`

HTTP 304状态分析

    博客分类:
  • web
 
阅读更多

HTTP 304: Not Modified
标准解释是:Not Modified 客户端有缓冲的文档并发出了一个条件性的请求(一般是提供If-Modified-Since头表示客户只想比指定日期更新的文档)。服务器告诉客户,原来缓冲的文档还可以继续使用。

我们先来看下浏览器的工作原理:
(1) 直接在缓存中去获取内容。如果先前有效访问的响应头包含 Expires, max-age的话,“打开新窗口”、“输入URI回车”、“前一页”、“后一页”这些浏览器行为不会使浏览器在Expires, max-age设置的有效期时间内去访问服务器,而是在缓存中去获取内容,但是"刷新'"或"重载"例外。
(2)访问服务器,根据服务器响应来 获取内容。这种情况发生在设置no-cache等头标要求不缓存,或者是设置了 Expires,max-age但浏览器行为是“刷新”或“重载”时候。'Last-Modified'、'ETag'、'must- revalidate' 等有些特殊,不直接受浏览器行为影响,它们必须访问服务器后,再由服务器判断是直接发送新的资源,还是发送一个304 Not Modfied让浏览器使用缓存中的资源。

如果客户端在请求一个文件的时候,发现自己缓存的文件有 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,从而大大的降低带宽的消耗,对于用户的感觉也是提高。

如何测试HTTP状态,缓存是否有效?

可以使用HttpWatch
第一次访问 200
鼠标点击二次访问 (Cache)
按F5刷新 304
按Ctrl+F5强制刷新 200
如果是这样的就说明缓存真正有效了。

对 HTTP 304 的理解

最近和同事一起看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 的一个理解。

分享到:
评论

相关推荐

    http状态码详解.docx

    #### 三、常见状态码实例分析 1. **204 No Content**:此状态码通常用于表示服务器成功处理了请求,但没有返回任何数据。例如,客户端可以通过发送一个HTTP请求检查某个资源是否存在,而不需要实际获取该资源的内容...

    HTTP响应状态码

    在实际开发中,通过分析HTTP响应状态码,我们可以快速定位问题所在。例如,如果看到404状态码,我们就知道是资源不存在,而500状态码则可能提示我们服务器端存在问题。此外,开发者工具通常会提供查看HTTP状态码的...

    http状态码汇总http网络

    通过分析`http状态码.txt`文件,我们可以详细了解各种HTTP状态码的具体含义和应用场景,这对于调试和优化网络应用非常有帮助。在实际开发中,我们需要根据返回的状态码调整请求策略,确保数据的正确传输和应用的正常...

    http状态码详细总结

    ### HTTP状态码详细总结 HTTP状态码是在HTTP通信过程中,由服务器向客户端返回的一个三位数字的响应状态码,用于指示客户端...了解这些状态码可以帮助开发人员更好地调试程序,同时也有助于网络工程师分析和解决问题。

    HTTP返回状态值详解

    - **304 Not Modified**:客户端发送了一个带有条件的GET请求,服务器端检查后发现请求的资源并没有更新,因此返回该状态码,表示客户端可以继续使用其缓存的副本。 #### 4xx:请求包含一个错误语法或不能完成 这...

    HTTP状态码表示意思

    通过分析服务器日志中出现的不同状态码,开发者可以发现并解决可能出现的问题,确保网站的正常运行和用户友好体验。同时,正确设置重定向状态码(如301和302)对保持网站结构的稳定性和搜索引擎排名至关重要。

    HTTP 状态码

    而“工具”可能涉及使用各种开发工具,如浏览器开发者工具、HTTP客户端库或服务器日志分析工具来查看和分析HTTP状态码。 提供的文档列表似乎与HTTP状态码主题关联度不高,它们的名称如"EMMAMPTM_GuideLineForR3&R2_...

    http协议状态码的含义及解决方法

    了解HTTP状态代码可以帮助我们更好地分析日志中的访问情况。 1xx 信息响应 * 100:表示已收到请求的一部分,正在继续发送余下部分。 * 101:切换协议。 2xx 成功 * 200:确定。客户端请求已成功。 * 201:已创建...

    http 200、301、304等状态码详解

    最常见的是301和304状态码。 - 301(永久移动):请求的资源已永久移动到新的URL。响应头中会包含新的URL(Location字段),浏览器通常会自动跳转到新URL。 - 304(未修改):客户端缓存的文件未被修改,服务器告诉...

    Web应用安全:HTTP状态码.pptx

    开发者可以通过监控和分析这些状态码来诊断和修复问题,而安全专家则利用它们来发现潜在的安全漏洞和攻击行为。在Web应用安全中,理解HTTP状态码可以帮助我们更好地理解和应对各种网络交互情况。

    Http协议-记录常见的状态码

    了解这些状态码对于分析和解决网络问题至关重要。 #### HTTP状态码的意义 HTTP状态码是一组由三位数字组成的代码,用来表示服务器对客户端请求的响应结果。这些状态码分为五大类,每种状态码都有特定的含义和用途...

    Apache日志分析手册

    例如,HTTP状态码“304”表示资源未被修改,客户端可以使用缓存的版本。 手册中还提到了对于处理日志的命令需要根据实际的日志格式进行适当的调整。比如,如果日志格式被自定义过,可能需要使用-F选项来定义字段...

    http协议状态码的含义及解决方法.docx

    了解http状态代码可以更详细地分析日志中的访问情况。下面是常见的http协议状态码及其含义: 1. 1xx:信息响应 * 100:表示已收到请求的一部分,正在继续发送余下部分。 * 101:切换协议。 2. 2xx:成功 * 200:...

    百度蜘蛛的代码分析与饲养技巧

    3. **利用304状态码**:通过设置适当的缓存策略,可以减少服务器负载,提高用户体验。 4. **监控服务器状态**:定期检查服务器日志,确保没有出现5xx错误,这表明服务器存在问题。 5. **改善服务器响应时间**:优化...

    loadrunnerHTTP服务器状态代码定义[参考].pdf

    在LoadRunner测试中,识别并分析这些HTTP状态代码有助于找出系统的问题,如网络连接问题、服务器错误、客户端错误等,从而优化软件性能和用户体验。了解这些代码的含义,对于开发者调试问题、测试工程师定位性能瓶颈...

    http协议计算机网络实验报告

    若资源未修改,服务器会返回304状态码,告知浏览器使用本地缓存;若已修改,则返回200状态码及新的资源内容。 4. **实验数据分析**: 实验结果显示,服务器gaia.cs.umass.edu的IP地址是128.119.245.12,而实验...

    hadoop项目--网站流量日志分析--2.docx

    - **状态码**:304(表示资源未修改) - **返回字节数**:0 - **Referer**:http://blog.fens.me/nodejs-socketio-chat/(来源页面) - **User-Agent**:Mozilla/5.0 (Windows NT 5.1; rv:23.0) Gecko/20100101...

    常用术语之IIS日志状态码.docx

    了解这些状态码对于分析网站性能、调试问题以及优化用户体验至关重要。例如,如果频繁看到404状态码,可能意味着存在死链;而500状态码则表明服务器端存在问题,需要排查服务器配置或应用程序错误。通过对IIS日志的...

    dome2_HTTP协议_

    4. **304(Not Modified)**:当客户端发送带条件的GET请求(比如使用If-Modified-Since或If-None-Match头),并且服务器发现资源自上次客户端获取以来没有改变,服务器将返回304状态码,告知客户端使用缓存中的版本...

Global site tag (gtag.js) - Google Analytics