Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Latest commit

 

History

History
History
72 lines (43 loc) · 5 KB

File metadata and controls

72 lines (43 loc) · 5 KB
Copy raw file
Download raw file
Open symbols panel
Edit and raw actions
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
(PS扫描[首页里面的二维码](README.md)进群分享我自己在看的技术资料给大家希望和大家一起学习进步!)
#### [1.HTTPS建立连接的过程是怎么样的?](#HTTPS建立连接的过程是怎么样的?)
#### [2.HTTP的缓存策略是怎么样的?](#HTTP的缓存策略是怎么样的?)
### HTTPS建立连接的过程是怎么样的
在发起连接之前服务器会将自己的公钥发给CA证书机构CA证书机构会用自己的私钥对服务器的公钥加密生成CA证书给服务器服务器存储后供之后建立安全连接使用
1.客户端发起请求TCP三次握手跟服务器建立连接
2.发送请求将随机数(时间戳+随机数),sessionID支持的加密方式发送给服务器
3.服务器接受请求将随机数sessionID,挑选的加密方式CA证书发给客户端CA证书会包括发布机构过期时间公共密钥
4.客户端收到CA证书后会将证书跟客户端内置的CA证书进行校验CA证书中会有一个证书机构用自己的私钥对公钥域名有效期生成的hash值加密结果也就是签名客户端中内置的证书用公钥签名进行解密看解密后得到的结果跟公钥域名有效期的hash值是否一样这个如果是真实的然后会看过期时间域名是否匹配
5.客户端会随机生成一个对称加密的公钥根据根据CA证书里面的公钥将它加密后发给服务器
6.服务器用自己的私钥解密得到对称加密的公钥
7.之后就根据对称加密的公钥进行通信
假设没有CA那么如果服务器返回的包含公钥的包被hack截取然后hack也生成一对公私钥他将自己的公钥发给客户端hack得到客户端数据后解密然后再通过服务器的公钥加密发给服务器这样数据就被hack获取
有了CA后客户端根据内置的CA根证书很容易识别出hack的公钥不合法或者说hack的证书不合法
### HTTP的缓存策略是怎么样的
HTTP 缓存主要分为强缓存和对比缓存两种从优先级上看强缓存大于对比缓存
#### 强缓存
![img](../static/13002258-3191bc567f09cd99.png)
强缓缓存就是浏览器缓存数据库里有缓存数据就不再去向服务器发请求了
可以造成强制缓存的字段有Expires和Cache-Control两个
Expires该字段标识缓存到期时间是一个绝对时间也就是服务器时间+缓存有效时间
缺点如果客户端修改了本地时间会造成缓存失效如果本地时间与服务器时间不一致也会导致缓存失效
Cache-Control该字段表示缓存最大有效时间该时间是一个相对时间
使用相对时间的话即使本地时间与服务器时间不一致也不会导致缓存失效
下面列举一下Cache-Control的字段可以带的值
> - max-age即最大有效时间
> - no-cache表示没有缓存即告诉浏览器该资源并没有设置缓存
> - s-maxage同max-age但是仅用于共享缓存如CDN缓存
> - public多用户共享缓存默认设置
> - private不能够多用户共享HTTP认证之后字段会自动转换成private
#### 对比缓存
![img](../static/13002258-488a103decf49453.png)
对比缓存的实现原理时先给给服务器发请求并且带上缓存的资源文件的缓存标识让服务端进行对比如果资源文件没有更改就只返回header部分body为空状态码是304浏览器使用缓存的资源文件如果数据有更改就返回更新后的资源文件
可以实现对比缓存的机制有Last-Modified/If-Modified-Since和Etag/If-None-Match两种
##### Last-Modified/If-Modified-Since
就是 请求的response header中会返回Last-Modified字段代表资源文件最近的修改时间发请求时 request header中会带上If-Modified-Since字段代表上次获取的资源文件的最近修改时间服务器判断资源文件是否有更新来决定返回最新的资源文件返回200),还是让浏览器使用缓存(返回304)。
缺点
1. Last-Modified标注的最后修改只能精确到秒级如果某些文件在1秒钟以内被修改多次的话它将不能准确标注文件的修改时间
2. 如果某些文件会被定期生成当有时内容并没有任何变化但Last-Modified却改变了导致文件没法使用缓存
##### Etag/If-None-Match
就是 response header中会返回Etag代表资源文件的版本号发请求时 request header中会加上If-None-Match字段值是上次请求的资源的文件的版本号代表上次请求的资源文件的版本号服务器判断资源文件是否有更新来决定返回最新的资源文件返回200),还是让浏览器使用缓存(返回304)。
##### 优先级
优先级方面排序是 强缓存Cache-Control)> 强缓存Expires)> 对比缓存Etag/If-None-Match)> 对比缓存Last-Modified/If-Modified-Since
Morty Proxy This is a proxified and sanitized view of the page, visit original site.