HTTP缓存字段总结

栏目: 后端 · 前端 · 发布时间: 5年前

内容简介:1:通用首部字段里:2:请求首部字段里:3:实体首部:

1:通用首部字段里:

HTTP缓存字段总结

2:请求首部字段里:

HTTP缓存字段总结

3:实体首部:

HTTP缓存字段总结

此处才开始正文~

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

HTTP缓存字段总结
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权威指南》


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

PHP经典实例(第3版)

PHP经典实例(第3版)

David Sklar、Adam Trachtenberg / 苏金国、丁小峰 / 中国电力出版社 / 2015-7 / 128.00

想要掌握PHP编程技术?或者想要学习如何完成一个特定的任务?那么一定要先看看《PHP经典实例(第3版)》。本书介绍了专门为PHP 5.4和5.5修订的350个经典技巧,并提供了丰富的示例代码。特别是对生成动态Web内容的解决方案做了全面更新,从使用基本数据类型到查询数据库,从调用RESTful API到测试和保护网站安全都有涵盖。 各个技巧都提供了示例代码,可以免费使用,另外还讨论了如何解决......一起来看看 《PHP经典实例(第3版)》 这本书的介绍吧!

CSS 压缩/解压工具
CSS 压缩/解压工具

在线压缩/解压 CSS 代码

XML、JSON 在线转换
XML、JSON 在线转换

在线XML、JSON转换工具

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换