Open xzhuz opened 6 years ago
https://meisen.pro/article/182ffdf6c60f4aaa9fd002d641bed96c
通过制定首部字段Cache-Control的指令,就能操作缓存的工作机制。示例如下:
Cache-Control: private, max-age=0, no-cache
Cache-Control: public
表明其他用户也可以使用缓存。
Cache-Control: private
响应只以特定的用户作为对象
使用no-cache的目的是为了防止从缓存中返回过期的资源。客户端请求中包含no-cache指令是,表明客户端不会接受缓存过的响应。服务器端响应中包含no-cache指令时,表明客户端不会对响应进行缓存。
可以也只能在响应中指定no-cache的参数
Cache-Control: no-cache=Location
使用no-store指令时,说明请求或响应中包含机密信息。因此该指令规定不能再本地存储请求或响应的任一部分。
Cache-Control: no-store
no-cache表示不缓存过期的资源,缓存会向源服务器进行有效期确认后处理资源。 no-store才表示不真正的进行缓存
no-cache表示不缓存过期的资源,缓存会向源服务器进行有效期确认后处理资源。
no-store才表示不真正的进行缓存
当客户端请求中包含max-age指令时,如果判断资源缓存的缓存时间数值比指定的时间数值要小的时候,那么客户端就能接收缓存的数值。服务器返回的响应中包含max-age指令时,缓存服务器不对资源有效性进行确认,max-age的数值就是缓存的有效时间。
应用HTTP/1.1版本的缓存服务器遇到同时存在Expires首部字段的情况时,会优先处理max-age指令,而忽略Expires首部字段。而HTTP/1.0版本的缓存服务器的情况相反
s-maxage指令的功能和max-age相同,不同点就是s-maxage指令只适用于供多位用户使用的公共缓存服务器(一般指代理)
Cache-Control: min-fresh=60
表示要求缓存服务器至少返回未过指定时间的缓存资源
Cache-Controle: max-stale=3600
表示可指定资源,即使过期也同样接收。
表示客户端仅在缓存服务器本地资源目标资源的情况下才会要求其返回。就是说,该指令要求缓存服务器不重新加载响应,也不会再次确认资源的有效性。若发生请求资源服务器的本地缓存无响应,则会返回状态码504 Gateway Timeout
代理会向源服务器再次验证即将返回的响应缓存目前是否仍然有效。
Cache-Control: no-transform
指令规定无论是在请求还是响应中,缓存都不能改变实体主体的媒体类型。
Cache-Control: private, community="UCI"
仅能对理解他的缓存服务器是有意义的。
Cache-Control指令一览
缓存响应指令
Connection字段有两个作用:
Connection: 不在转发的首部字段
Connection: Keep-Alive
HTTP/1.1版本的默认连接都是持久连接。当服务端想要断开连接的时候,则指定首部字段Connection的值为close.
Connection: close
表明创建HTTP报文的日期和时间。
HTTP/1.1版本之前遗留字段,只为兼容。常用方式:
Cache-Control: no-cache Pragma: no-cache
字段会事先说明在报文主体后记录了那些首部字段。该首部字段可用于HTTP/1.1版本分块传输编码时。
HTTP/1.1 200 OK Date: Tue, 03 Jul 2018 04:40:56 GMT Content-Type: text/html ... Transfer-Encoding:chunked Trailer: Expires ...(报文主体)... 0 Expires: Tue, 03 Jul 2018 14:40:56 GMT
规定了传输报文主体时采用的编码方法。
HTTP/1.1的传输编码方法仅对分块传输编码有效
用户检测HTTP协议及其他协议是否可使用更高的版本进行通信, 其参数值可以用来指定一个完全不同的通信协议。
上图用例中,首部字段Upgrade指定的值为TLS/1.0.请注意此处两个字段首部字段的对应关系,Connection的值被指定为Upgrade.Upgrade首部字段产生作用的Upgrade对象仅限于客户端和邻接服务器之间。因此,使用首部字段Upgrade时,还需要额外指定Connection:Upgrade
这里是笔者有点疑惑的地方,不知道这里的Connection字段的作用,后面如果找到会不上去
对于附有首部字段Upgrade的请求,服务器可用101 Switching Protocols状态码作为响应返回。
使用Via是为了跟踪客户端与服务器之间的请求和响应报文的传输路径。
告知用户一些与缓存相关的问题的警告。
Warning: [警告码] [警告的主机:端口号] "[警告内容]" ([日期时间])
Warning: 112 127.0.0.1:8080 "Heuristic expiration" Tue, 03 Jul 2018 04:40:56 GMT
转载请注明出处
https://meisen.pro/article/182ffdf6c60f4aaa9fd002d641bed96c
1 Cache-Control
通过制定首部字段Cache-Control的指令,就能操作缓存的工作机制。示例如下:
1.1 public
表明其他用户也可以使用缓存。
1.2 private
响应只以特定的用户作为对象
1.3 no-cache && no-store
使用no-cache的目的是为了防止从缓存中返回过期的资源。客户端请求中包含no-cache指令是,表明客户端不会接受缓存过的响应。服务器端响应中包含no-cache指令时,表明客户端不会对响应进行缓存。
可以也只能在响应中指定no-cache的参数
使用no-store指令时,说明请求或响应中包含机密信息。因此该指令规定不能再本地存储请求或响应的任一部分。
1.4 max-age && s-maxage
当客户端请求中包含max-age指令时,如果判断资源缓存的缓存时间数值比指定的时间数值要小的时候,那么客户端就能接收缓存的数值。服务器返回的响应中包含max-age指令时,缓存服务器不对资源有效性进行确认,max-age的数值就是缓存的有效时间。
s-maxage指令的功能和max-age相同,不同点就是s-maxage指令只适用于供多位用户使用的公共缓存服务器(一般指代理)
1.5 min-fresh
表示要求缓存服务器至少返回未过指定时间的缓存资源
1.6 max-stale
表示可指定资源,即使过期也同样接收。
1.7 only-if-cached
表示客户端仅在缓存服务器本地资源目标资源的情况下才会要求其返回。就是说,该指令要求缓存服务器不重新加载响应,也不会再次确认资源的有效性。若发生请求资源服务器的本地缓存无响应,则会返回状态码504 Gateway Timeout
1.1.8 must-revalidate
代理会向源服务器再次验证即将返回的响应缓存目前是否仍然有效。
1.9 no-transform
指令规定无论是在请求还是响应中,缓存都不能改变实体主体的媒体类型。
1.10 扩展 cache-extension token
仅能对理解他的缓存服务器是有意义的。
Cache-Control指令一览
缓存响应指令
2 Connection
Connection字段有两个作用:
2.1 不在转发代理的首部字段
2.2 管理持久链接
HTTP/1.1版本的默认连接都是持久连接。当服务端想要断开连接的时候,则指定首部字段Connection的值为close.
3 Date
表明创建HTTP报文的日期和时间。
4 Pragma
HTTP/1.1版本之前遗留字段,只为兼容。常用方式:
5 Trailer
字段会事先说明在报文主体后记录了那些首部字段。该首部字段可用于HTTP/1.1版本分块传输编码时。
6 Transfer-Encoding
规定了传输报文主体时采用的编码方法。
7. Upgrade
用户检测HTTP协议及其他协议是否可使用更高的版本进行通信, 其参数值可以用来指定一个完全不同的通信协议。
上图用例中,首部字段Upgrade指定的值为TLS/1.0.请注意此处两个字段首部字段的对应关系,Connection的值被指定为Upgrade.Upgrade首部字段产生作用的Upgrade对象仅限于客户端和邻接服务器之间。因此,使用首部字段Upgrade时,还需要额外指定Connection:Upgrade
对于附有首部字段Upgrade的请求,服务器可用101 Switching Protocols状态码作为响应返回。
7. Via
使用Via是为了跟踪客户端与服务器之间的请求和响应报文的传输路径。
8. Warining
告知用户一些与缓存相关的问题的警告。
转载请注明出处