当 If-None-Match / If-Modified-Since 匹配时,为什么 NGinx 会在 HTTP 304 响应中发送内容?

当 If-None-Match / If-Modified-Since 匹配时,为什么 NGinx 会在 HTTP 304 响应中发送内容?

If-None-Match我的默认 NGinx 安装会向具有匹配标头和未过期标头的请求返回 304 Not Modified 响应,If-Modified-Since这是正确的行为,但 NGinx 还会将资源的内容添加到 304 响应中。有人会认为 NGinx 不会添加内容,而只是返回带有空主体的 304,向浏览器表明使用其缓存的资源就足够了。

出现这种行为有什么原因吗?我该如何禁用它?

答案1

您确定 NGINX 正在返回内容吗?

根据您查看响应的方式,这可能只是表面看起来的情况。

例如,当 Chrome 开发者工具从 NGINX 收到 304 时,它会显示内容,看起来就像是从 NGINX 发送的,但实际上只是被 Chrome 从缓存中检索。

您可以通过在 Chrome 开发工具中右键单击文件 -> “复制 -> 复制为 cURL”来尝试此操作。

在刚刚复制的内容的开头添加 -vv(例如curl -vv <your-url> -H 'HeaderKey: HeaderValue' <etc>),然后在终端/shell 中执行。

您可能会发现它没有返回正文内容(即使它是 304)。然后,您可以仅使用 URL(curl -vv <your-url>)尝试相同的请求,并查看没有 304 的正文。

相关内容