`

304 Not Modified状态码

阅读更多
在 Response-Header 中加上这几项:

Last-Modified: Wed, 18 Jun 2008 14:22:27 GMT
Cache-Control: max-age=600
Expires: Wed, 18 Jun 2008 14:48:39 GMT
Date: Wed, 18 Jun 2008 14:38:39 GMT

其中 Last-Modified 后面的日期是上次更新 config 的时间,Date 后面是当前时间,Expires 后面是当前时间 + 10分钟,10分钟就是 Cache-Control 后面的 max-age,单位是秒。因为看到 GAE 对 static 文件的 Cache 时间也是10分钟,所以我使用了这个数字。

Last-Modified

如果客户端收到的 Response 中包含 Last-Modified,那么下次 request 的时候就会在 Request Header 中包含 If-Modified-Since 字段,值就是上次服务器发送的 Last-Modified,服务器端会判断上次的 config 时间是否比 If-Modified-Since 晚。如果自上次 request 之后又更新了 config,那么服务器就会返回完整的内容;如果期间没有更新 config,那么服务器就没必要返回完整的内容,只需要向客户端发送一个 304 Not Modified 状态码就可以了。

Cache-Control、Date 和 Expires

这几个参数的组合,表示告诉浏览器:这个文件在多长时间之内不会更改,在这个时间内不需要再 request,保守起见,我设置了10分钟。

浏览器行为

如果只是在网站的链接之间 click click click,那么浏览器会完全遵守上述行为。这样可以尽可能地减少请求次数,以及 response 的数据量。

如果在某个页面点击了浏览器的刷新按钮或者按 F5,浏览器会忽略 Expires 时间,把该页面需要的所有的文件都重新请求一遍。

如果按住 Ctrl 再刷新或者 Ctrl-F5 (俗称强制刷新),浏览器将不会发送 Last-Modified Header,将所有需要的文件请求一遍,服务器会返回文件的完整内容,而不是仅仅一个 304 Not Modified 状态码。

后记

经初步观察,现在浏览器不会每次都彪呼呼地去请求一大堆 css、jpg、gif 文件了,浏览器也不会每次都脑残地返回完整内容了,看来是有效了。

分享到:
评论

相关推荐

    ECSHOP3.6 H5网路错误解决方案(php.ini,httpd.conf,CorsService.php和304 Not Modified缓存错误)

    当遇到H5页面加载时出现304 Not Modified的状态码时,这通常意味着浏览器已经缓存了资源,并且服务器没有检测到资源的变化。这可能会导致某些依赖于最新资源的功能出现问题。 - 在**appserver\vendor\kamiorz\lumen...

    ajax加载页面服务器返回 304 not modified

    **Ajax加载页面时遇到304 Not Modified状态码详解** 在使用Ajax技术进行网页部分更新时,如果服务器返回304 Not Modified状态码,这意味着客户端(浏览器)在向服务器请求资源时,服务器发现该资源自上次请求后并未...

    http请求吗,响应头,状态码

    12. **If-Modified-Since**: 只有当所请求的内容在指定日期之后被修改过才会返回新的内容,否则返回304 Not Modified状态码。 13. **If-None-Match**: 如果内容未改变,则返回304 Not Modified状态码。参数通常为...

    http协议-缓存控制:etag If-None-Match / Last-Modified If-Modified-Since

    如果服务器上的资源未发生变化,服务器会检查If-None-Match的Etag值,如果匹配,则返回304 Not Modified状态码,客户端则可以使用缓存的资源,无需下载整个响应体。 EtagComputeUtils.java可能是一个工具类,负责...

    计算机网络实验HTTP.doc

    11. **304 Not Modified状态码**: 对于第二次GET请求,服务器返回了`304 Not Modified`状态码,这意味着服务器确认资源自上次请求以来没有更改,因此没有返回文件内容。这是HTTP缓存机制的一部分,减少了不必要的...

    网站Cache全分析.doc

    例如,如果资源未过期,服务器会返回304 Not Modified状态码,客户端则直接使用本地缓存的版本。 4. 实例分析 以访问图片为例,首次访问时,服务器返回200 OK状态码和完整的图片内容;再次访问时,若图片未修改,...

    Etag和Expires.docx

    如果服务器上的文件自上次请求后未被修改,服务器将返回304 Not Modified状态码,客户端则直接从本地缓存中获取资源,避免了不必要的数据传输。 然而,Last-Modified存在一些局限性,例如文件的修改时间可能无法...

    计算机网络Wireshark_http

    11. **304 Not Modified状态码**:当服务器判断文件未修改时,会返回304状态码,告知浏览器从缓存中使用文件,而不是重新下载。 12. **HTTP GET请求数**:题目中提到了两次HTTP GET请求,分别对应于文件的首次和...

    计算机网络实验-HTTP11

    11. HTTP状态代码与缓存:对于第二个HTTP GET请求,服务器返回304 Not Modified状态码,表示资源未更改,客户端应使用缓存中的版本。在这种情况下,服务器不再发送文件内容,而是指示浏览器使用本地缓存。 实验体会...

    浏览器缓存机制 mindMaster脑图与visio流程图

    服务器根据这些信息判断资源是否改变,如果没有变化,会返回304 Not Modified状态码,浏览器则更新资源的本地副本,避免了数据的重复传输。 现在,我们详细解释一下这两个缓存类型: 1. 强缓存:主要通过Cache-...

    gaedo-collections-0.5.1.zip

    如果资源未改变,服务器只需返回304 Not Modified状态码,避免了重复传输整个响应体,极大地提高了网络效率。 `etag-cache`库正是基于这样的原理,为HTTP请求提供了一种智能的缓存策略。它将ETag作为资源的唯一标识...

    前端开源库-lws-conditional-get.zip

    如果资源未改变,服务器将返回304 Not Modified状态码,而不是完整的资源内容,这样就避免了重复下载,节省了带宽和时间。 lws库是一个轻量级的web服务器,通常被用作嵌入式环境或开发人员自定义HTTP服务的组件。它...

    Python爬虫~已爬取目标网站所有文章,后续如何只获取新文章.zip

    这样,如果服务器上的内容没有更新,它将返回一个304 Not Modified状态码,避免下载重复内容。 4. **HTML变动检测**:对于不支持`If-Modified-Since`的网站,可以通过比较新旧HTML内容的差异来发现新文章。可以使用...

    web浏览器-缓存详解

    3. 缓存验证:若资源可能已更新,浏览器会发送一个带有If-None-Match或If-Modified-Since头的请求到服务器,服务器根据这些头信息判断资源是否改变,若无变化则返回304 Not Modified状态码,浏览器继续使用缓存;...

    restful架构详解

    使用HTTP的304 Not Modified状态码和ETag、Last-Modified头信息实现。 5. **层式系统(Layered System)**:客户端不必了解请求经过了哪些中间层,可以有代理、网关、负载均衡器等。 二、HTTP方法 1. **GET**:用于...

    10172911梁天一Wireshark 实验HTTP.docx

    如果文件没有变化,则服务器会返回一个304 Not Modified状态码而不是整个文件内容。 - **缓存机制**:大多数现代浏览器都支持缓存机制,这有助于减少网络流量并提高网页加载速度。通过条件GET请求,浏览器可以有效...

    关于RemETag的DLL

    如果一致,说明资源未发生变化,服务器则返回304 Not Modified状态码,客户端可以继续使用本地缓存的资源,从而减少不必要的数据传输,提高页面加载速度。 RemETag的DLL可能包含函数或接口,用于生成、检查或处理与...

    etag的讲解etag的讲解

    如果匹配,说明资源未变,服务器可以返回一个304 Not Modified状态码,不发送完整的资源内容,节省带宽。 4. **资源更新**:如果资源被修改,服务器会生成新的Etag,并在响应中返回新的Etag值,客户端会更新其缓存。...

Global site tag (gtag.js) - Google Analytics