304 未修改
HTTP 的 **304 未修改
** 客户端重定向响应代码表示无需重新传输请求的资源。当请求是带有 If-None-Match
或 If-Modified-Since
标头的条件性 GET
或 HEAD
请求,并且条件评估为假时,会发送此响应代码。它会隐式重定向到一个缓存的资源,如果条件评估为真,则该资源将导致 200
OK
响应。
响应不得包含主体,并且必须包含在等效的 200
OK
响应中发送的标头:Cache-Control
、Content-Location
、Date
、ETag
、Expires
和 Vary
。
注意:许多浏览器的 开发者工具网络面板 会创建额外的请求,导致 304
响应,以便开发人员可以看到对本地缓存的访问。
状态
http
304 Not Modified
示例
以下示例显示了使用 curl 进行的带有条件请求标头的 GET
请求以及收到的 HTTP 响应。如果我们知道资源已在 If-Modified-Since
标头中的时间戳之后更新,则第一个示例将返回 200
OK
。为了说明,该请求使用 2050 年 11 月 21 日的未来日期来检查资源是否自此日期以来已更新
bash
curl -v --header 'If-Modified-Since: Tue, 21 Nov 2050 08:00:00 GMT' \
https://mdn.org.cn/en-US/
http
> Request
GET /en-US/ HTTP/2
Host: developer.mozilla.org
User-Agent: curl/8.1.2
Accept: */*
If-Modified-Since: Tue, 21 Nov 2050 08:00:00 GMT
< Response
HTTP/2 304
date: Tue, 21 Nov 2023 08:44:28 GMT
expires: Tue, 21 Nov 2023 08:53:14 GMT
age: 3194
etag: "e27d81b845c3716cdb5d4220d78e2799"
在响应包含带有上面响应中 ETag 的 If-None-Match
标头的 GET
请求时,也会返回 304 未修改
响应。由于 etag
存在,匹配的实体标记使条件失败,并返回 304
响应。
bash
curl -v --header 'If-None-Match: "e27d81b845c3716cdb5d4220d78e2799"' \
https://mdn.org.cn/en-US/
http
> Request
GET /en-US/ HTTP/2
Host: developer.mozilla.org
User-Agent: curl/8.1.2
Accept: */*
If-None-Match: "e27d81b845c3716cdb5d4220d78e2799"
< Response
HTTP/2 304
date: Tue, 21 Nov 2023 08:47:37 GMT
expires: Tue, 21 Nov 2023 09:38:23 GMT
age: 2920
etag: "e27d81b845c3716cdb5d4220d78e2799"
规范
规范 |
---|
HTTP 语义 # status.304 |
兼容性说明
如果此响应在持久连接上错误地包含主体,则浏览器行为会有所不同。有关更多详细信息,请参阅 204 无内容。