If-Modified-Since

If-Modified-Since是HTTP客户端的标准请求头,用来发送给服务器,HTTP服务器端根据If-Modified-Since的值来判断是否要返回最新的响应。服务端200会响应返回Last-Modified来标记最新的修改时间。

第一次请求


第一次请求后,浏览器会把响应文件缓存住。

第二次请求


第二次请求前,在浏览器请求头里加上If-Modified-Since,If-Modified-Since值也跟Last-Modified值一致,服务端会响应304,并且不会发送文件内容,节约了网络流量。

第三次请求


这次请求我们修改了If-Modified-Since,同Last-Modified不一致,服务端响应200,发送最新的文件内容。

etag

If-Modified-Since是以修改时间来校验的,如果文件修改时间变了,内容未变的情况,我们可以用etag来处理。etag会生成一个与文件内容相关的字符串,类似哈希校验。客户端浏览器通过If-None-Match或If-Match设置该值。
If-None-Match:告诉服务器如果一致,返回状态码304,不一致则返回资源。
If-Match:告诉服务器如果不一致,返回状态码412。

从状态码的角度来看

cache-control的各个值关系

缓存头部对比

头部 优势和特点 劣势和问题
Expires 1、HTTP 1.0 产物,可以在HTTP 1.0和1.1中使用,简单易用。
2、以时刻标识失效时间。
1、时间是由服务器发送的(UTC),如果服务器时间和客户端时间存在不一致,可能会出现问题。
2、存在版本问题,到期之前的修改客户端是不可知的。
Cache-Control 1、HTTP 1.1 产物,以时间间隔标识失效时间,解决了Expires服务器和客户端相对时间的问题。
2、比Expires多了很多选项设置。
1、HTTP 1.1 才有的内容,不适用于HTTP 1.0 。
2、存在版本问题,到期之前的修改客户端是不可知的。
Last-Modified 1、不存在版本问题,每次请求都会去服务器进行校验。服务器对比最后修改时间如果相同则返回304,不同返回200以及资源内容。 1、只要资源修改,无论内容是否发生实质性的变化,都会将该资源返回客户端。例如周期性重写,这种情况下该资源包含的数据实际上一样的。
2、以时刻作为标识,无法识别一秒内进行多次修改的情况。
3、某些服务器不能精确的得到文件的最后修改时间。
ETag 1、可以更加精确的判断资源是否被修改,可以识别一秒内多次修改的情况。
2、不存在版本问题,每次请求都回去服务器进行校验。
1、计算ETag值需要性能损耗。
2、分布式服务器存储的情况下,计算ETag的算法如果不一样,会导致浏览器从一台服务器上获得页面内容后到另外一台服务器上进行验证时发现ETag不匹配的情况。

总结

缓存开关是: pragma、cache-control。
缓存校验有:Expires、Last-Modified、etag。

参考

https://blog.csdn.net/u012375924/article/details/82806617
https://imweb.io/topic/5795dcb6fb312541492eda8c

HTTP If-Modified-Since 请求头的作用:缓存校验相关推荐

  1. 通信 / HTTP Host 请求头的作用

    Host 是 HTTP 1.1 协议中新增的一个请求头,主要用来实现虚拟主机技术. 虚拟主机(virtual hosting)即共享主机(shared web hosting),可以利用虚拟技术把一台 ...

  2. HTTP 协议 Host 请求头的作用

    Host 是 HTTP 1.1 协议中新增的一个请求头,主要用来实现虚拟主机技术. 虚拟主机(virtual hosting)即共享主机(shared web hosting),可以利用虚拟技术把一台 ...

  3. 爬虫实战学习笔记_2 网络请求urllib模块+设置请求头+Cookie+模拟登陆

    1 urllib模块 1.1 urllib模块简介 Python3中将urib与urllib2模块的功能组合,并且命名为urllib.Python3中的urllib模块中包含多个功能的子模块,具体内容 ...

  4. 和跨域CORS有关的几个请求头和响应头请求头

    阮一峰:http://www.ruanyifeng.com/blog/2016/04/cors.html添加链接描述 参考: https://blog.csdn.net/qq_29923881/art ...

  5. http请求头中Referer的含义和作用

    http请求头中Referer的含义和作用 别人写好了,链接过去看看吧,出门左转. 记得房号不迷路 02房 01房 三人行必有我师焉,其实两人行也有我师焉--

  6. 常见的请求头以及它们的作用是什么?(较详细)

    1.首先最常用的:Accept:它的作用是:客户端接收的数据格式: 比方说你的参数值填写的是application/json,就说明浏览器所接收的数据是json类型的数据,当你加了Accept请求头之 ...

  7. 如何修改本地host文件?Request请求头中的host所起的作用

    由于之前对Request请求头中的host理解不充分,所以在此篇都Request头的相关只是进行补充 https://blog.csdn.net/Smart_look/article/details/ ...

  8. python伪造请求头x-forwarded-for的作用_Pyspider中给爬虫伪造随机请求头的实例

    Pyspider 中采用了 tornado 库来做 http 请求,在请求过程中可以添加各种参数,例如请求链接超时时间,请求传输数据超时时间,请求头等等,但是根据pyspider的原始框架,给爬虫添加 ...

  9. OKHTTP系列(九)---http请求头(header)作用

    前言 在项目开发中,网络请求是必不可少的 ,在http方面的知识学习也是不能拉下的,这里就做一波http请求头的记录. Header:请求头个别参数和描述 Header 解释 示例 Accept 指定 ...

最新文章

  1. 网站PC端跟移动端有哪些不同的区别所在?
  2. shiro.ini实现授权
  3. 图像处理和计算机视觉中的经典论文
  4. 七、Java编码字符集和转义符介绍
  5. dbus-glib-0.108 arm交叉编译
  6. 浙大网新实训项目介绍
  7. 希尔排序法(插入排序的改进版本)
  8. 千万别惹程序员之经典的SQL注入式***
  9. AD的小知识贴片的template
  10. js中apply、call和bind的区别
  11. 【转】很实用的编程英语词库,共收录一千五百余条词汇
  12. matlab来解决城市设计,Matlab的实际应用设计(经典).doc
  13. 未检测到扫描仪Win10解决 WIA服务1061
  14. 【生活】解决广州社保无法查询的问题,2020年3月起,广州社保/医保/养老无法在微信/支付宝查询到的解决办法
  15. C++ using的使用
  16. 小马哥 - ----高仿三星n9006 主板A202型号 拆机主板图 完美开机
  17. EasyNVR无插件IPC摄像机直播方案前端构建之:区分页面是自跳转还是分享依据
  18. 硕士论文查重经验(省钱又高效地查重经验,本人亲测,觉得有用点个赞)
  19. Bugku逆向-游戏过关
  20. 如何用Python自动爬取全国30+城市地铁图数据?

热门文章

  1. jsp教学网站百度文库_动态网站技术(JSP)教学大纲
  2. v-if和v-for不能一起使用的原因以及解决办法
  3. 匿名网络Tor与I2P的比较研究
  4. win32键盘输入python_windows下python捕捉键盘鼠标事件 pywin32 | 学步园
  5. 电脑窗口保护视力颜色
  6. Efficient Inference in Fully Connected CRFs with Gaussian Edge Potentials
  7. 各种Normalization总结
  8. servlet和jsp实现简单分页功能
  9. 【R语言作图初级4-图形组合布局par等】
  10. Springboot遇到的一些问题