2016-10-12 76 views
4

在調試生產問題時,我們發現對URL的GET請求返回500 Internal Server Error給一位用戶,但是返回給其他人的200 OK。它似乎是從緩存服務的500,但任何嘗試,因爲重現此錯誤是不成功的。瀏覽器是否可以緩存500 Internat Server錯誤響應?

我的問題是:是否有可能由瀏覽器緩存錯誤響應?如果是這樣,哪些瀏覽器支持它,需要什麼緩存頭來複制它?

我的直覺是,不應該緩存錯誤響應,因爲即使bug已經修復,您仍然會被拒絕服務。基於Which HTTP status codes are cacheable?它似乎也不應該是可緩存的。緩存策略是否在不同瀏覽器上一致地實施?

回答

2

A 500 Internal Server Error被指定爲默認情況下不可緩存。參考請參閱Section 6.1 of RFC 7231Section 6.6.1 500 Internal Server Error of RFC 7231。如果默認情況下500可以緩存,則規範將明確定義。

但是,根據明確的緩存頭這種行爲可以被覆蓋,它完全可能發生,一個500的響應被緩存,因爲Section 3 of RFC 7234說,除其他相關的事情,您的問題,這樣的:

注意上面列出的任何要求都可以被緩存控制擴展覆蓋;

我的猜測是,在500錯誤的情況下,某些東西已經與緩存標頭搞砸了。

要激發500響應緩存,可以嘗試設置Cache-Control響應標頭中的public標誌。

相關問題