这两个字段都和HTTP协议的缓存控制相关。
浏览器缓存机制是通过HTTP协议Header里的Cache-Control(或Expires)和Last-Modified(或 Etag)等字段来实现。
这两个字段的作用:
1. 接收响应时,浏览器决定文件是否需要被缓存;
2. 需要加载文件时,浏览器决定是否需要发出请求的字段。
看一些例子:
Cache-Control:max-age=115360000,表示缓存有效期为115360000秒。如果115360000秒内需要再次请求这个文件,浏览器不会发出向服务器发出请求,而是直接使用本地的缓存的文件。这是HTTP/1.1标准中的字段。
这总情况能在Chrome开发者工具的Network标签页里看到from disk cache的提示:
从本地缓存中读取文件非常快速,上面的例子只花费了6毫秒:
Expires: Thu, 31 Dec 2018 23:55:55 GMT,表示该文件的过期时间是2018年12月31日晚上23点55分55秒,在这个时间之前浏览器都不会再次发出请求去获取该文件。这是HTTP/1.0中的字段。
在Chrome开发者工具的network标签页里能看到:
下面两个字段是发起请求时,服务器决定文件是否需要更新的字段。
Last-Modified: Thu, 26 Jul 2018 05:41:21 GMT,这表示这个文件最后的修改时间是2018年7月26日5点41分21秒。
浏览器会在下次请求的时候,把Last-Modified的值作为Request Header的If-Modified-Since字段带上。如果浏览器缓存的文件已经超过了Cache-Control(或者Expires),那么需要加载这个文件时,就会发出请求,请求的Header有一个字段为If-Modified-Since,如下图所示:
服务器接收到请求后,会把文件的Last-Modified时间和这个时间对比,如果时间没变,那么浏览器将返回304 Not Modified给浏览器:
如果时间有变化,那么服务器会返回200 OK,并返回相应的内容给浏览器。
下图第9行的get_header_field方法是服务器从浏览器发送过来的HTTP请求提取头部字段If-Modified-Since的值。
下图第16行的set_header_field方法是服务器设置Last-Modified头部字段的值。
下图就是服务器设置304 Not Modified响应的位置:
要获取更多Jerry的原创技术文章,请关注公众号"汪子熙"或者扫描下面二维码:
相关推荐
"304 Not Modified"表示客户端发送了一个带有If-Modified-Since或If-None-Match头的请求,询问服务器资源是否自上次访问后有所改变。如果资源未修改,服务器返回304状态码,告知客户端可以直接使用本地缓存的版本,...
* 304 Not Modified:服务器已经成功处理了客户端的请求,但自从上次客户端请求后,网页没有修改。 * 305 Use Proxy:客户端只能使用代理来访问服务器的网页。 4xx 客户端错误 这些状态码表示客户端可能出错,阻碍...
当浏览器第一次请求一个文件,如CSS、图片或JavaScript时,服务器会返回200 OK状态码以及文件内容,并可能在响应头中包含Last-Modified字段,该字段标明了文件的最后修改时间。浏览器接收到此信息后,会在本地存储这...
304 未修改(Not Modified) 305 使用代理 ④ 客户方错误 400 错误请求(Bad Request) 401 未认证 402 需要付费 403 禁止(Forbidden) 404 未找到(Not Found) 405 方法不允许 ...
对于第二次GET请求,服务器返回了`304 Not Modified`状态码,这意味着服务器确认资源自上次请求以来没有更改,因此没有返回文件内容。这是HTTP缓存机制的一部分,减少了不必要的数据传输。 这个实验展示了HTTP协议...
* 304 Not Modified——未修改:表示服务器上的资源未发生变化,客户端可以继续使用缓存。 * 305 Use Proxy——使用代理:表示服务器要求客户端使用代理访问资源。 400 系列错误代码:Client Request Errors * 400...
"200 OK"是最常见的成功状态码,表示请求已完成;"201 Created"表示服务器成功创建了新资源;"204 No Content"则表示服务器成功处理请求,但不返回任何内容。 3. 3XX(重定向):这些状态码表示客户端需要进行额外...
11. HTTP状态代码与缓存:对于第二个HTTP GET请求,服务器返回304 Not Modified状态码,表示资源未更改,客户端应使用缓存中的版本。在这种情况下,服务器不再发送文件内容,而是指示浏览器使用本地缓存。 实验体会...
- 如果对象被修改,服务器返回完整的实体和一个`200 OK`状态码。 #### 三、检索长文档 1. **长文档的处理**: - 在请求长文档时,如果没有进行条件GET请求,则服务器会发送整个文档,即使该文档已经存在于客户端...
以访问图片为例,首次访问时,服务器返回200 OK状态码和完整的图片内容;再次访问时,若图片未修改,服务器会返回304 Not Modified,告知客户端直接使用本地缓存,避免了不必要的网络传输。 总结来说,网站Cache是...
3xx:重定向,如303 See Other和304 Not Modified,前者指示客户端转向其他URL,后者表示资源未修改,可使用缓存。 4xx:客户端错误,如404 Not Found表示请求的资源未找到,401 Unauthorized和403 Forbidden分别...
11. **304 Not Modified状态码**:当服务器判断文件未修改时,会返回304状态码,告知浏览器从缓存中使用文件,而不是重新下载。 12. **HTTP GET请求数**:题目中提到了两次HTTP GET请求,分别对应于文件的首次和...
304 Not Modified表示资源未修改,客户端可以使用缓存的版本,避免重复下载。 - **4xx(客户端错误状态码)**:表示客户端的请求有问题。400 Bad Request意味着请求报文有误,服务器无法理解。其他如401 ...
- 304 Not Modified:如果客户端发送了条件GET请求,并且资源自上次请求后未修改,服务器返回此状态码,不发送资源内容,节省带宽。 这些状态码在进行性能测试时,如LoadRunner,非常重要,因为它们可以帮助理解...
HTTP/1.1协议包含了多个组成部分,包括请求方法(如GET、POST、PUT、DELETE等),请求头(如User-Agent、Accept、Cookie等),状态码(如200 OK、404 Not Found、500 Internal Server Error等),响应头,实体主体...
- 304 Not Modified:客户端缓存的资源未修改,可继续使用。 - 305 Use Proxy:客户端应通过Location头指定的代理服务器获取资源。 - 307 Temporary Redirect:类似于302,适用于GET请求的临时重定向(HTTP 1.1新增...