最近和同事一起看Web的Cache问题,又进一步理解了 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相关推荐

  1. 请解释一下http请求中的304状态码的含义

    请解释一下http请求中的304状态码的含义 304 未被修改. 自从上次请求后,请求的网页未被修改过.服务器返回此响应时,不会返回网页内容. 如果网页自请求者上次请求后再也没有更改过,你应将服务器配 ...

  2. IE浏览器中iframe背景BODY透明

    IE浏览器中iframe会出现默认的白色背景及边框,影响美观.有边框的正常,但IE默认的HTML背景色为白色,而FF默认背景色为透明色. 此外iframe在IE中长宽为300*150,其中边框为2px ...

  3. 304 Not Modify

    最近和同事一起看Web的Cache问题,又进一步理解了 HTTP 中的 304 又有了一些了解. 304 的标准解释是:Not Modified 客户端有缓冲的文档并发出了一个条件性的请求(一般是提供 ...

  4. php 控制304,php静态文件返回304技巧分享

    有时一些静态文件(如图片)会由php输出,会发现请求都是200,静态文件每次都去服务器上请求太浪费资源了,这时如何让浏览器缓存图片呢?就需要我们在php中输出304了. 我们可以利用php中的 HTT ...

  5. http请求时返回的304是干什么的

    请求成功时,返回的是200,那么返回的304是什么意思呢? 如上图,200和304有什么区别呢? 看下http的响应头: 刷新一次,对比下 这次请求的头信息中多了一条If-Modified-Since ...

  6. 【转】对 HTTP 304 的理解

    最近和同事一起看Web的Cache问题,又进一步理解了 HTTP 中的 304 又有了一些了解. 304 的标准解释是: Not Modified 客户端有缓冲的文档并发出了一个条件性的请求(一般是提 ...

  7. php如何处理304缓存,php静态文件返回304技巧分享

    有时一些静态文件(如图片)会由php输出,会发现请求都是200,静态文件每次都去服务器上请求太浪费资源了,这时如何让浏览器缓存图片呢?就需要我们在php中输出304了. 我们可以利用php中的 HTT ...

  8. php 控制304,php静态文件返回304技巧分享,_PHP教程

    php静态文件返回304技巧分享, 有时一些静态文件(如图片)会由php输出,会发现请求都是200,静态文件每次都去服务器上请求太浪费资源了,这时如何让浏览器缓存图片呢?就需要我们在php中输出304 ...

  9. http状态码之304

    常见的http状态码: 100 继续发送请求 101 切换协议 200 成功 301 永久重定向 302 暂时重定向 400 语法错误 403 没有足够的权限 404 找不到对应的资源 500 服务器 ...

最新文章

  1. [LeetCode]: 62: Unique Paths
  2. mysql索引 钱缀_mysql字符串前缀索引
  3. 第二章 数据类型和文件操作
  4. SaltStack部署
  5. ajax 分页 评论刷新,评论:js无刷新分页(原创)
  6. [剑指offer][JAVA]面试题[第23题][合并K个排序链表][分治][优先队列]
  7. VS Code编译Python
  8. 计算2的幂(信息学奥赛一本通-T1037)
  9. linux 网卡驱动编译安装包,Dell R720 安装debian系统编译网卡驱动
  10. redhat7安装Oracle11g数据库全过程
  11. 消极风险应对策略的区别
  12. 共享黑名单是行业潜规则
  13. Cloudera Manager 配置
  14. 新疆旅游攻略-乌鲁木齐
  15. C语言time.h中srand(),rand()等等函数产生随机数的用法。
  16. 输入一个数判断一个数是不是质数,如果是质数输出“YES“,否则输出“NO“
  17. 为什么你宁愿吃生活的苦,也不愿吃学习的苦
  18. 行式数据和列式数据对比 存储压缩性能
  19. Oracle DataGuard环境下使用TDE透明加密需要注意的点
  20. #单片机# ------ stc89c52引脚说明

热门文章

  1. Lecture4_14_2.多维随机变量及其概率分布
  2. 7、Flask实战第7天:Jinjia2模板
  3. springmvc 自定义view支持json和jsonp格式数据返回
  4. java 常量池详解
  5. C# 打开Word文档错误
  6. linux中/bin和/sbin和/usr/bin和/usr/sbin
  7. pysvn安装及常用方法
  8. 11.编写一个Java程序,计算半径为3.0的圆周长和面积并输出结果。把圆周率π定义为常量,半径定义为变量,然后进行计算并输出结果。...
  9. 空间triangle和AABB的相交判定方法
  10. Discuz! X2.5 添加自定义数据调用模块