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.club.tw/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.club.tw/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 無內容。