HTTP 中的 304
304 的标准解释是:Not Modified 客户端有缓冲的文档并发出了一个条件性的请求(一般是提供If-Modified-Since头表示客户只想比指定日期更新的文档)。服务器告诉客户,原来缓冲的文档还可以继续使用。
如 果客户端在请求一个文件的时候,发现自己缓存的文件有 Last Modified ,那么在请求中会包含 If Modified Since ,这个时间就是缓存文件的 Last Modified 。因此,如果请求中包含 If Modified Since,就说明已经有缓存在客户端。只要判断这个时间和当前请求的文件的修改时间就可以确定是返回 304 还是 200 。对于静态文件,例如:CSS、图片,服务器会自动完成 Last Modified 和 If Modified Since 的比较,完成缓存或者更新。但是对于动态页面,就是动态产生的页面,往往没有包含 Last Modified 信息,这样浏览器、网关等都不会做缓存,也就是在每次请求的时候都完成一个 200 的请求。
因此,对于动态页面做缓存加速,首先要在 Response 的 HTTP Header 中增加 Last Modified 定义,其次根据 Request 中的 If Modified Since 和被请求内容的更新时间来返回 200 或者 304 。虽然在返回 304 的时候已经做了一次数据库查询,但是可以避免接下来更多的数据库查询,并且没有返回页面内容而只是一个 HTTP Header,从而大大的降低带宽的消耗,对于用户的感觉也是提高。
当这些缓存有效的时候,通过 HttpWatch 查看一个请求会得到这样的结果:
第一次访问 200
鼠标点击二次访问 (Cache)
按F5刷新 304
按Ctrl+F5强制刷新 200
如果是这样的就说明缓存真正有效了。以上就是我对 HTTP 304 的一个理解。
转载于:https://blog.51cto.com/stevenlee87/1182484
HTTP 中的 304相关推荐
- 请解释一下http请求中的304状态码的含义
请解释一下http请求中的304状态码的含义 304 未被修改. 自从上次请求后,请求的网页未被修改过.服务器返回此响应时,不会返回网页内容. 如果网页自请求者上次请求后再也没有更改过,你应将服务器配 ...
- IE浏览器中iframe背景BODY透明
IE浏览器中iframe会出现默认的白色背景及边框,影响美观.有边框的正常,但IE默认的HTML背景色为白色,而FF默认背景色为透明色. 此外iframe在IE中长宽为300*150,其中边框为2px ...
- 304 Not Modify
最近和同事一起看Web的Cache问题,又进一步理解了 HTTP 中的 304 又有了一些了解. 304 的标准解释是:Not Modified 客户端有缓冲的文档并发出了一个条件性的请求(一般是提供 ...
- php 控制304,php静态文件返回304技巧分享
有时一些静态文件(如图片)会由php输出,会发现请求都是200,静态文件每次都去服务器上请求太浪费资源了,这时如何让浏览器缓存图片呢?就需要我们在php中输出304了. 我们可以利用php中的 HTT ...
- http请求时返回的304是干什么的
请求成功时,返回的是200,那么返回的304是什么意思呢? 如上图,200和304有什么区别呢? 看下http的响应头: 刷新一次,对比下 这次请求的头信息中多了一条If-Modified-Since ...
- 【转】对 HTTP 304 的理解
最近和同事一起看Web的Cache问题,又进一步理解了 HTTP 中的 304 又有了一些了解. 304 的标准解释是: Not Modified 客户端有缓冲的文档并发出了一个条件性的请求(一般是提 ...
- php如何处理304缓存,php静态文件返回304技巧分享
有时一些静态文件(如图片)会由php输出,会发现请求都是200,静态文件每次都去服务器上请求太浪费资源了,这时如何让浏览器缓存图片呢?就需要我们在php中输出304了. 我们可以利用php中的 HTT ...
- php 控制304,php静态文件返回304技巧分享,_PHP教程
php静态文件返回304技巧分享, 有时一些静态文件(如图片)会由php输出,会发现请求都是200,静态文件每次都去服务器上请求太浪费资源了,这时如何让浏览器缓存图片呢?就需要我们在php中输出304 ...
- http状态码之304
常见的http状态码: 100 继续发送请求 101 切换协议 200 成功 301 永久重定向 302 暂时重定向 400 语法错误 403 没有足够的权限 404 找不到对应的资源 500 服务器 ...
最新文章
- [LeetCode]: 62: Unique Paths
- mysql索引 钱缀_mysql字符串前缀索引
- 第二章 数据类型和文件操作
- SaltStack部署
- ajax 分页 评论刷新,评论:js无刷新分页(原创)
- [剑指offer][JAVA]面试题[第23题][合并K个排序链表][分治][优先队列]
- VS Code编译Python
- 计算2的幂(信息学奥赛一本通-T1037)
- linux 网卡驱动编译安装包,Dell R720 安装debian系统编译网卡驱动
- redhat7安装Oracle11g数据库全过程
- 消极风险应对策略的区别
- 共享黑名单是行业潜规则
- Cloudera Manager 配置
- 新疆旅游攻略-乌鲁木齐
- C语言time.h中srand(),rand()等等函数产生随机数的用法。
- 输入一个数判断一个数是不是质数,如果是质数输出“YES“,否则输出“NO“
- 为什么你宁愿吃生活的苦,也不愿吃学习的苦
- 行式数据和列式数据对比 存储压缩性能
- Oracle DataGuard环境下使用TDE透明加密需要注意的点
- #单片机# ------ stc89c52引脚说明
热门文章
- Lecture4_14_2.多维随机变量及其概率分布
- 7、Flask实战第7天:Jinjia2模板
- springmvc 自定义view支持json和jsonp格式数据返回
- java 常量池详解
- C# 打开Word文档错误
- linux中/bin和/sbin和/usr/bin和/usr/sbin
- pysvn安装及常用方法
- 11.编写一个Java程序,计算半径为3.0的圆周长和面积并输出结果。把圆周率π定义为常量,半径定义为变量,然后进行计算并输出结果。...
- 空间triangle和AABB的相交判定方法
- Discuz! X2.5 添加自定义数据调用模块