304 未修改

HTTP 的 **304 未修改** 客户端重定向响应代码表示无需重新传输请求的资源。当请求是带有 If-None-MatchIf-Modified-Since 标头的条件性 GETHEAD 请求,并且条件评估为假时,会发送此响应代码。它会隐式重定向到一个缓存的资源,如果条件评估为真,则该资源将导致 200 OK 响应。

响应不得包含主体,并且必须包含在等效的 200 OK 响应中发送的标头:Cache-ControlContent-LocationDateETagExpiresVary

注意:许多浏览器的 开发者工具网络面板 会创建额外的请求,导致 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"

在响应包含带有上面响应中 ETagIf-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 无内容

另请参阅