可以通过浏览器缓存500 Internat Server Error响应吗?

时间:2016-10-12 18:45:38

标签: browser browser-cache cache-control http-caching

在调试生产问题时,我们发现对网址的GET请求为一个用户返回500 Internal Server Error,但为其他所有人返回200 OK。看起来500是从缓存中提供的,但是自从重现这个bug以来的任何尝试都没有成功。

我的问题是:浏览器是否可以缓存错误响应?如果是这样,哪些浏览器支持它以及我需要复制它的缓存头?

我的直觉是错误响应不应该被缓存,因为即使已修复错误,您仍将继续被拒绝服务。基于Which HTTP status codes are cacheable?,似乎500根本不可缓存。是否在浏览器中一致地实施了缓存策略?

1 个答案:

答案 0 :(得分:1)

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响应的缓存,可以尝试在public响应标头中设置Cache-Control标记。