第一次访问 200 
鼠标点击二次访问 (Cache) 
按F5刷新 304 
按Ctrl+F5强制刷新 200

在客户端向服务端发送http请求时,若返回状态码为304 Not Modified 则表明此次请求为条件请求。在请求头中有两个请求参数:If-Modified-Since 和 If-None-Match。
        当客户端缓存了目标资源但不确定该缓存资源是否是最新版本的时候, 就会发送一个条件请求。在进行条件请求时,客户端会提供给服务器一个If-Modified-Since请求头,其值为服务器上次返回响应头中Last-Modified值,还会提供一个If-None-Match请求头,值为服务器上次返回的ETag响应头的值。

服务器会读取到这两个请求头中的值,判断出客户端缓存的资源是否是最新的,如果是的话,服务器就会返回HTTP/304 Not Modified响应头, 但没有响应体.客户端收到304响应后,就会从本地缓存中读取对应的资源。 所以:当访问资源出现304访问的情况下其实就是先在本地缓存了访问的资源。

另一种情况是,如果服务器认为客户端缓存的资源已经过期了,那么服务器就会返回HTTP/200 OK响应,响应体就是该资源当前最新的内容.客户端收到200响应后,就会用新的响应体覆盖掉旧的缓存资源.只有在客户端缓存了对应资源且该资源的响应头中包含了Last-Modified或ETag的情况下,才可能发送条件请求.如果这两个头都不存在,则必须无条件(unconditionally)请求该资源,服务器也就必须返回完整的资源数据.另外,有时候我们浏览器调试的时候不希望本地缓存,可以设置取消缓存即可。

如果选中了no cache,则请求资源时,请求头中的Cache-Control为no-cache,表明不使用缓存,则会直接获取服务器资源。另外,若没选中no cache,Cache-Control有二种情况:
       1、max-age>0 时直接从游览器缓存中提取 
       2、max-age<=0 时向服务器发送http请求,该资源是否有修改有的话返回200 ,无的话返回304.

版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
转载自:《304 Not Modified详解》

304 Not Modified详解相关推荐

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

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

  2. 304状态码详解(协商缓存)

    304状态码详解(协商缓存) 上一篇文章针对不同的状态码做了一个整理,还说到要专门针对304做一个详解,于是与,今晚又来学习了. 首先说一下背景: 我们知道前端代码打包后需要部署到静态服务器上.客户端 ...

  3. HTTP状态码304与ETag详解

    总结一下,最近项目开发遇到的.由于缓存框架设计时,缓存请求文件时只以发起请求的url 为key,导致在客户端发起url 相同,传参类型不同的请求时,交替请求会出现,带上一次请求返回的etag ,进行下 ...

  4. Http 状态码详解之304、403、503

    一.304状态码 1.1 定义 自从上次请求后,请求的网页未修改过.服务器返回此响应时,不会返回网页内容. 如果网页自请求者上次请求后再也没有更改过,您应将服务器配置为返回此响应(称为 If-Modi ...

  5. 状态码(304 详解)

    状态码类别 状态码 类别 原因短语 1xx 信息状态码 接收的请求正在处理 2xx 成功状态码 请求正常处理完毕 3xx 重定向状态码 需要进行附加操作以完成请求 4xx 客户端错误状态码 服务器无法 ...

  6. [转]HTTP协议详解

    当今web程序的开发技术真是百家争鸣,ASP.NET, PHP, JSP,Perl, AJAX 等等. 无论Web技术在未来如何发展,理解Web程序之间通信的基本协议相当重要, 因为它让我们理解了We ...

  7. HTTP协议详解 转自小坦克

    HTTP协议详解 转自小坦克 -- 有些文章是引用别人的,为了方便我以后或不再备注;引用目的是因为直接网摘里面的地址经常被重置,找不到原来的文章 当今web程序的开发技术真是百家争鸣,ASP.NET, ...

  8. HTTP协议详解【转】

    当今web程序的开发技术真是百家争鸣,ASP.NET, PHP, JSP,Perl, AJAX 等等. 无论Web技术在未来如何发展,理解Web程序之间通信的基本协议相当重要, 因为它让我们理解了We ...

  9. php 请求拦截,解决拦截器对ajax请求的拦截实例详解

    解决拦截器对ajax请求的的拦截 拦截器配置:public boolean preHandle(HttpServletRequest request, HttpServletResponse resp ...

最新文章

  1. Sizeof与Strlen的区别与联系
  2. [推荐]经典炸弹人手机游戏[年兽防御战2]
  3. php 正则表达式 x,php – 匹配x正则表达式或y正则表达式
  4. shell中函数返回值
  5. Java基础总结之(面试)
  6. 百世快递收到纽交所退市警告!国内业务已68亿“卖身”
  7. SpringBoot实现的学生选课管理系统
  8. Linux 吉祥物30岁了!“出道”30年,你对Linux了解多少?
  9. oracle之sqlloader
  10. SQL数据库面试题以及答案(50例题)
  11. 数学建模:线性回归模型
  12. 知识变现海哥:如何利用自己的时间和知识获得财富自由
  13. 连续分配管理方式(单一连续分配 固定分区分配 动态分区分配)
  14. 哪种耳机对听力伤害小?骨传导耳机能保护听力吗?
  15. 不要把5G压力都留给运营商,华为自动驾驶网络是个聪明的方法
  16. Win10系统下安装编辑器之神(The God of Editor)Vim并且构建Python生态开发环境(2020年最新攻略)
  17. activeperl linux glibc gcc,ACTIVEPERL在LINUX下的安装
  18. 想读博士我看好武汉大学!
  19. 几个朋友合伙创业,如何分配股权?一个温和成长型股权结构思路
  20. C语言scanf与gets函数的区别

热门文章

  1. 网站更新部署20110210,新站部署全过程记录
  2. 【2018虚拟现实】VR眼镜不只是当下,它就是未来!不仅是VR小电影和游戏!
  3. VBA基础语法学习代码
  4. 《教练技术》读书笔记
  5. 安装:Python库的正确安装
  6. 大数据风控公司需要企业征信牌照?
  7. Ruby语言学习系列--基本的ruby语法
  8. 记录一次Java对接监控(大华、海康、onvif)
  9. GSM 相关名词解释
  10. outlook错误号