簡體   English   中英

發送帶有 404 響應的緩存控制/過期/雜注 - 現代瀏覽器是否有效/理解?

[英]sending cache-control / expires / pragma with 404 response - valid / understood by modern browsers?

我們正在努力減少一些“無意義”的流量。

如果我們發送帶有 404 響應的有效緩存控制標頭(a-la “do cache”),現代瀏覽器會緩存請求的資源不存在嗎?

我們使用了一個自定義的基於 php 的 404 處理程序,由於 session 創建,它正在發送不緩存標頭,因此我們刪除了這些。 但是現在想知道我們確定的資源是否無效,我們應該發送正確的緩存頭嗎?

這些是所有用戶通過相同 uri 訪問的公共資源。

謝謝!

現代瀏覽器有一個HTTP 協議的實現,理想情況下接近標准,代理服務器也是如此,如果你想對用戶和非故意的機器人流量產生影響,你應該考慮到這一點。 當前版本是 1.1 ,部分摘錄:

10.4 客戶端錯誤 4xx

狀態碼的 4xx class 適用於客戶端似乎出錯的情況。 除了響應 HEAD 請求時,服務器應該包含一個實體,其中包含對錯誤情況的解釋,以及它是暫時的還是永久的情況。 這些狀態碼適用於任何請求方法。 用戶代理應該向用戶顯示任何包含的實體。

如果客戶端正在發送數據,使用 TCP 的服務器實現應該小心確保客戶端在服務器關閉輸入連接之前確認收到包含響應的數據包。 如果客戶端在關閉后繼續向服務器發送數據,則服務器的 TCP 堆棧將向客戶端發送一個復位數據包,這可能會在 HTTP 應用程序讀取和解釋之前擦除客戶端未確認的輸入緩沖區。

更具體地說,對於 404:

10.4.5 404 未找到

服務器未找到任何與請求 URI 匹配的內容。 沒有說明這種情況是暫時的還是永久性的。 如果服務器通過一些內部可配置的機制知道舊資源永久不可用並且沒有轉發地址,則應該使用 410 (Gone) 狀態代碼。 當服務器不希望確切地揭示請求被拒絕的原因或沒有其他響應適用時,通常使用此狀態代碼。

404 響應代碼就這么多。

您問:

現在 [我們] 想知道對於我們確定的資源是否無效,我們是否應該發送正確的緩存標頭?

您沒有提供任何您想使用的特定緩存標頭,因此回答您的問題有點不精確。 緩存是協議規范中它自己的一部分: 13 Caching in HTTP

通常,以下內容應該是您要查找的內容,摘自13.1.1 Cache Correctness

正確的緩存必須使用緩存所持有的最新響應來響應請求,該響應符合以下條件之一:

...

 3. It is an appropriate 304 (Not Modified), 305 (Proxy Redirect), or error (4xx or 5xx) response message.

因此,您可以緩存 404 響應消息並將它們發送到緩存。 代理和客戶應該處理它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM