HTTP缓存

2019-05-06  本文已影响0人  kiterumer

我们知道,http协议是无状态,无连接的。有如下特点:

【状态】的含义可以这样理解
客户端与浏览器在某次会话中产生的数据
【无状态】则意味着这些数据不会被保留(翻脸不认人)

但是,通过利用cookie和session机制,现在的网络请求是有‘状态’的(你还是那个你)

cookie.png

缓存的好处

Cache-Control和Expires

属于强制缓存,即在有效期内,浏览器不会向服务器发送数据请求(通常情况)
Cache-Control是HTTP/1.1,Expires是HTTP/1.0,两者若同时出现,前者优先级更高
Cache-Control是一个时间段(max-age),Expires是一个时间点

Cache-Control : max-age = 1000
Expires :  Wed, Jan 10 2018 00:27:04 GMT

Cache-Control可以再报文头部取不同的值:

协商缓存(Last-Modified和Etag)

协商缓存需要进行对比判断是否使用缓存,这个由服务器承担。浏览器第一次请求数据时,服务器会将缓存标识与数据一起响应给客户端,客户端将它们备份至缓存中。再次请求时,客户端会将缓存中的标识发送给服务器,服务器根据此标识判断。若未失效,返回304状态码,浏览器拿到此状态码就可以直接使用缓存数据了。有两组分别是:Last-Modified/if-Modified-Since(基于资源修改的时间标识)与Etag/if-None-Match(利用md5摘要算法生成的一段字符串标识)。两者的流程很类似,区别在于根据什么来判断资源是否更新,是否需要下载资源。两者都是需要发送请求的。
如果对比后一致,那么服务器会返回304(Not Modified)

Last-Modified 与 If-Modified-Since

第一次请求返回的响应头:

Last-Modified: Wed, Jan 10 2018 00:27:04 GMT

第二次请求的请求头信息:

If-Modified-Since: Wed, Jan 10 2018 00:27:04 GMT

基于资源的修改时间来判断资源有无更新

Etag/if-None-Match

基于资源内容的摘要信息(md5)来判断
第一次请求返回的响应头:

ETag: "15f0fff99ed5aae4edffdd6496d7131f"

第二次请求的请求头信息:

If-None-Match: "15f0fff99ed5aae4edffdd6496d7131f"
上一篇 下一篇

猜你喜欢

热点阅读