与HTTP缓存有关的首部字段:

在HTTP1.0时代客户端缓存的方式可以通过pragma和Expires控制
Pragma:
当值设置为no-cache时,客户端不使用缓存。
Expires:
值为一个GMT(格林尼治时间),用来告诉浏览器缓存过期时间,该时间是相对服务器时间而言的,如果客户端和服务器时间不一致则缓存时间可能就会失去作用。
Cache-Control
HTTP1.1时代新增了Cache-Control来解决Expires客户端与服务器时间不一致的问题,一般是用‘max-age=1000’用来表示1000秒之后缓存过期。
以上三个字段优先级顺序为:Pragma->Cache-Control->Expires
- 上述三种首部字段均能决定客户端是否向服务器发送请求,但是如果缓存到期时服务器端的数据并未被修改过,那么我们依旧要花费带宽和时间来重新获取数据。为让客户端和服务器端实现缓存文件更新验证、提升缓存复用率,HTTP1.1新增了Last-Modified和ETag来解决这件事。
Last-Modified:
服务器将资源传递给客户端时会将资源最后修改时间以‘Last-Modified:GMT’的形式加在实体首部一同发给客户端。客户端再次请求资源时会将该信息一同发给服务器,如果该值与服务器端一致则返回304,内容为空,依旧使用缓存,若与服务器端不一致则发送资源,返回200.但是当资源修改了,但是实际内容没有改变时,服务器仍然会发送资源给客户端。
ETag:
为解决Last-Modified可能存在的不准确的问题,HTTP1.1还推出了ETag首部字段,服务器会通过某种算法给资源得出一个唯一标识符,把资源发给客户端时会将该字段放在实体首部一起发给客户端。客户端下次请求资源时会将该字段一起发送给服务器进行匹配。
网友评论