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.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"

在響應包含帶有上面響應中 ETagIf-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 無內容

另請參閱