这两个字段都和HTTP协议的缓存控制相关。

浏览器缓存机制是通过HTTP协议Header里的Cache-Control(或Expires)和Last-Modified(或 Etag)等字段来实现。

这两个字段的作用:

1. 接收响应时,浏览器决定文件是否需要被缓存;

2. 需要加载文件时,浏览器决定是否需要发出请求的字段。

看一些例子:

Cache-Control:max-age=115360000,表示缓存有效期为115360000秒。如果115360000秒内需要再次请求这个文件,浏览器不会发出向服务器发出请求,而是直接使用本地的缓存的文件。这是HTTP/1.1标准中的字段。

这总情况能在Chrome开发者工具的Network标签页里看到from disk cache的提示:

从本地缓存中读取文件非常快速,上面的例子只花费了6毫秒:

Expires: Thu, 31 Dec 2018 23:55:55 GMT,表示该文件的过期时间是2018年12月31日晚上23点55分55秒,在这个时间之前浏览器都不会再次发出请求去获取该文件。这是HTTP/1.0中的字段。

在Chrome开发者工具的network标签页里能看到:

下面两个字段是发起请求时,服务器决定文件是否需要更新的字段。

Last-Modified: Thu, 26 Jul 2018 05:41:21 GMT,这表示这个文件最后的修改时间是2018年7月26日5点41分21秒。

浏览器会在下次请求的时候,把Last-Modified的值作为Request Header的If-Modified-Since字段带上。如果浏览器缓存的文件已经超过了Cache-Control(或者Expires),那么需要加载这个文件时,就会发出请求,请求的Header有一个字段为If-Modified-Since,如下图所示:

服务器接收到请求后,会把文件的Last-Modified时间和这个时间对比,如果时间没变,那么浏览器将返回304 Not Modified给浏览器:

如果时间有变化,那么服务器会返回200 OK,并返回相应的内容给浏览器。

下图第9行的get_header_field方法是服务器从浏览器发送过来的HTTP请求提取头部字段If-Modified-Since的值。

下图第16行的set_header_field方法是服务器设置Last-Modified头部字段的值。

下图就是服务器设置304 Not Modified响应的位置:

要获取更多Jerry的原创技术文章,请关注公众号"汪子熙"或者扫描下面二维码:

HTTP 200 OK和HTTP 304 Not modified的由来相关推荐

  1. 200 OK (from cache) 与 304 Not Modified

    本文载于袁源(歪歪)的个人博客:http://www.bokeyy.com/post/200-ok-from-cache-vs-304-not-modified.html . 为什么有的缓存是 200 ...

  2. HTTP statusCode 200 OK 和 304 Not Modified

    场景 启动Node服务器之后,GET一个文件资源,多次刷新发现除了第一次,之后的相应码皆为304. 响应分为五类:信息响应(100–199),成功响应(200–299),重定向(300–399),客户 ...

  3. 返回状态码304 Not Modified详解

    第一次访问 200 鼠标点击二次访问 (Cache) 按F5刷新 304 按Ctrl+F5强制刷新 200 在客户端向服务端发送http请求时,若返回状态码为304 Not Modified 则表明此 ...

  4. HTTP 304: Not Modified

    HTTP 304: Not Modified :Not Modified客户端有缓冲的文档并发出了一个条件性的请求(一般是提供if-Modified-Since头表示客户只想比指定日期更新的文档).服 ...

  5. 304 Not Modified详解

    第一次访问 200  鼠标点击二次访问 (Cache)  按F5刷新 304  按Ctrl+F5强制刷新 200 在客户端向服务端发送http请求时,若返回状态码为304 Not Modified 则 ...

  6. 304 not modified 缓存问题解决

    304 not modified 缓存问题解决   问题引入:一个普通的get请求,当点击按钮,发送第二次请求,Status变为304 not modified,不在是200   解决方法:需在url ...

  7. 304 Not Modified 产生原因以及解决方案

    当我向服务器发送一个简单地get请求后,第一次服务器返回的状态码为200 再次向该地址发送请求时就会返回304 Not Modified 返回304 Not Modified那说明在服务器上,你这个x ...

  8. 304 Not Modified

    304 Not Modified,不是服务器发出的错误,是服务器所承载的业务系统在开发时为了节省带宽和提升浏览器的体验,对GET/js,css,image等执行了缓存机制.客户端第一次对服务器发出GE ...

  9. Where is ABAP Netweaver HTTP 304 not modified set

    Created by Jerry Wang, last modified on Mar 26, 2015 test1: test2: What does 304 Not Modified mean? ...

最新文章

  1. Java多线程之synchronized(二)
  2. 15.3 动态类型安全
  3. getpwnam学习
  4. Sentinel(二十一)之Sentinel Dashboard控制台日志路径设置
  5. linux启动过程剖析,分析Linux系统的启动过程
  6. 计算机专业英语词汇mp3,【听单词】计算机专业英语词汇音频106,计算机英语单词MP3...
  7. 杀人游戏约瑟夫环(洛谷P1145题题解,Java语言描述)
  8. 嵌入式基础(1)---硬件知识,搞嵌入式开发必备
  9. linux中自动化日志分析,Shell项目案例7-应用日志分析
  10. 动辄年薪 25 万只是白菜价的人工智能黄了?
  11. JavaScript(二)数据类型(二)
  12. 利用机器学习实现微信小程序-加减大师自动答题
  13. 毕业设计论文-基于matlab的车牌识别系统
  14. AMD64(x86_64)架构abi文档:中
  15. ATF(Arm Trusted Firmware)/TF-A Chapter 03 Chain of Trust (CoT)
  16. [OpenAirInterface实战-19] :OAI 软件无线电USRP UHD硬件驱动程序的使用与网络架构
  17. 除硬件外 计算机系统不可缺少的,计算机应用基础选择精选100题.doc
  18. MATLAB 线性动态范围调整
  19. VM虚拟机桥接模式的复制物理网络连接状态是什么意思
  20. Android Library的创建及使用详解

热门文章

  1. volatile与synchronized 同步原理基础讲解
  2. 线性代数及其应用(part4)--特征向量与线性变换
  3. 机器学习中的不平衡分类方法(part2)--模型评估与选择
  4. 20应用统计考研复试要点(part7)--统计学
  5. windows7 32升级64位 硬盘安装_LabVIEW 2018(32/64)位 软件安装教程
  6. 在生产环境中调试 Angular 应用程序而不显示源映射
  7. Jest 测试框架 expect 和 匹配器 matcher 的设计原理解析
  8. SAP Spartacus powertools-spa site在Commerce Cloud后台的属性
  9. SAP Spartacus CmsComponentConnector
  10. 一步步使用SAP CRM Application Enhancement Tool创建扩展字段