HTTP缓存字段总结

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

内容简介: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权威指南》


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

查看所有标签

猜你喜欢:

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

机器学习

机器学习

周志华 / 清华大学出版社 / 2016-1-1 / 88.00元

机器学习是计算机科学与人工智能的重要分支领域. 本书作为该领域的入门教材,在内容上尽可能涵盖机器学习基础知识的各方面。 为了使尽可能多的读者通过本书对机器学习有所了解, 作者试图尽可能少地使用数学知识. 然而, 少量的概率、统计、代数、优化、逻辑知识似乎不可避免. 因此, 本书更适合大学三年级以上的理工科本科生和研究生, 以及具有类似背景的对机器学 习感兴趣的人士. 为方便读者, 本书附录给出了一......一起来看看 《机器学习》 这本书的介绍吧!

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

在线XML、JSON转换工具

Markdown 在线编辑器
Markdown 在线编辑器

Markdown 在线编辑器

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具