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 文件了,浏览器也不会每次都脑残地返回完整内容了,看来是有效了。
相关推荐
**Ajax加载页面时遇到304 Not Modified状态码详解** 在使用Ajax技术进行网页部分更新时,如果服务器返回304 Not Modified状态码,这意味着客户端(浏览器)在向服务器请求资源时,服务器发现该资源自上次请求后并未...
当遇到H5页面加载时出现304 Not Modified的状态码时,这通常意味着浏览器已经缓存了资源,并且服务器没有检测到资源的变化。这可能会导致某些依赖于最新资源的功能出现问题。 - 在**appserver\vendor\kamiorz\lumen...
304 Not Modified表示客户端有缓存,资源未被修改,可直接使用缓存。 4. 4XX (客户端错误):这类状态码表示请求包含错误语法或者无法完成请求。400 Bad Request表示请求无法被服务器理解;401 Unauthorized表示请求...
- **304 Not Modified**:表示客户端缓存的版本是最新的,因此服务器无需发送新的数据。这对于减少不必要的数据传输非常有用。 - **305 Use Proxy**:已经不再被使用,原本表示客户端必须通过代理访问请求的资源。 -...
- **304 Not Modified**:客户端缓存的资源仍然是最新的,无需再次获取。 4. **4XX** - 客户端错误状态码:表示客户端的请求有误或无法被服务器理解。 - **400 Bad Request**:服务器无法理解请求报文。 - **...
- **304 Not Modified** 服务器端响应304时,不包含任何消息体,因为资源尚未改变,客户端可以继续使用之前缓存的数据。 - **305 Use Proxy** 客户端请求的资源只能从代理服务器获取。 - **306 Unused** 该...