资讯专栏INFORMATION COLUMN

HTTP缓存字段总结

SolomonXie / 2639人阅读

摘要:总之,实体首部可以告知报文的接收者它在对什么进行处理。与缓存相关的首部字段通用首部字段里请求首部字段里实体首部此处才开始正文和来规范。表示的是从服务器将文档传来之时起,可以认为此文档处于新鲜状态的秒数剩下的都是缓存校验字段。

首部

通用首部:有些首部提供了与报文相关的最基本的信息,它们被称为通用首部。

请求首部:请求首部是只在请求报文中有意义的首部。

响应首部

实体首部: 用来描述HTTP报文的负荷,由于请求和响应报文中都可能包含实 体部分,所以在这两种类型的报文中都可能出现这些首部。实体首部提供了有关实体及其内容的大量信息,从有关对象类型的信息,到能够对 资源使用的各种有效的请求方法。总之,实体首部可以告知报文的接收者它在对什 么进行处理。

与缓存相关的HTTP首部字段

1:通用首部字段里:

2:请求首部字段里:
3:实体首部:

此处才开始正文~


Pragma和Expires来规范。虽然这两个字段早可抛弃,但为了做http协议的向下兼容,你还是可以看到很多网站依旧会带上这两个字段。

所以这里不再介绍过时的东东啦,大家简单了解这是关于缓存的就可以啦。

Cache-Control

这是个通用首部字段, 其有很多值可以设置:

no-store:禁止缓存对响应进行复制

no-cache: 可以存储在本地缓存区,但是在与原始服务器验证新鲜度之前不能给客户端使用。

max-age:表示的是从服务器将文档传来之时起,可以认为此 文档处于新鲜状态的秒数

剩下的都是缓存校验字段。

这些字段都是根据修改时间来判断文件是否有变动:

Last-Modified

If-Modified-Since: Last-Modified-value

If-Unmodified-Since: Last-Modified-value

只根据修改时间来判断会有问题:如果在服务器上,一个资源被修改了,但其实际内容根本没发生改变,会因为Last-Modified时间匹配不上而返回了整个实体给客户端(即使客户端缓存里有个一模一样的资源)

为了解决这个问题,推出了Etag实体首部字段。服务器会通过某种算法,给资源计算得出一个唯一标志符(比如md5标志),在把资源响应给客户端的时候,会在实体首部加上“ETag: 唯一标识符”一起返回给客户端。比如:Etag: "5d8c72a5edda8d6a:3239"

如果服务器发现ETag匹配不上,那么直接以常规GET 200回包形式将新的资源(当然也包括了新的ETag)发给客户端;如果ETag是一致的,则直接返回304知会客户端直接使用本地缓存即可。

那么客户端是如何把标记在资源上的 ETag 传回给服务器的呢?请求报文中有两个首部字段可以带上 ETag 值:

If-None-Match: ETag-value

If-Match: ETag-value

需要注意的是,如果资源是走分布式服务器(比如CDN)存储的情况,需要这些服务器上计算ETag唯一值的算法保持一致,才不会导致明明同一个文件,在服务器A和服务器B上生成的ETag却不一样。

附上参考链接:点击跳转,以及《HTTP权威指南》

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/6873.html

相关文章

  • 浏览器缓存机制学习总结

    浏览器缓存机制学习总结 最近在做一个考试系统时,由于经常加载试卷或图片等等静态资源,抽空学习了一下缓存机制,在此记录 为什么要使用缓存 1、通过HTTP协议,在客户端和浏览器建立连接时需要消耗时间,而大的响应需要在客户端和服务器之间进行多次往返通信才能获得完整的响应,这拖延了浏览器可以使用和处理内容的时间。这就增加了访问服务器的数据和资源的成本,因此利用浏览器的缓存机制重用以前获取的数据就变成了性...

    JiaXinYi 评论0 收藏0
  • TCP/IP基础总结性学习(6)

    摘要:源服务器以后也将不再对缓存服务器请求中提出的资源有效性进行确认,且禁止其对响应资源进行缓存操作。换言之,该指令要求缓存服务器不重新加载响应,也不会再次确认资源有效性。若发生请求缓存服务器的本地缓存无响应,则返回状态码。 HTTP 首部 一. HTTP 报文首部 1.HTTP 报文的结构:showImg(https://segmentfault.com/img/bV8xzC?w=613&...

    Barrior 评论0 收藏0
  • TCP/IP基础总结性学习(6)

    摘要:源服务器以后也将不再对缓存服务器请求中提出的资源有效性进行确认,且禁止其对响应资源进行缓存操作。换言之,该指令要求缓存服务器不重新加载响应,也不会再次确认资源有效性。若发生请求缓存服务器的本地缓存无响应,则返回状态码。 HTTP 首部 一. HTTP 报文首部 1.HTTP 报文的结构:showImg(https://segmentfault.com/img/bV8xzC?w=613&...

    LinkedME2016 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<