nginx 在条件 GET 时不从原始服务器返回更新的标头

nginx 在条件 GET 时不从原始服务器返回更新的标头

除了一个小问题外,nginx 及其缓存工作正常。当第一次发出请求时,它会到达原始服务器,返回 200,然后 nginx 会缓存该响应。如果我发出另一个请求,我可以从标头中看到X-Cache-Status缓存已被命中。当我等待一段时间,知道缓存将过期时,我可以看到 nginx 命中了我的原始服务器,并执行了条件 GET,因为我已经proxy_cache_revalidate on;定义了。

当我在源服务器上检查应用中的资源是否已更改时,我发现资源没有更改,因此返回了带有新Expires标头的 304。有些人可能会问,如果源服务器表示没有任何变化,而您返回 304,为什么还要返回新Expires标头。答案是,HTTP RFC 表示可以这样做https://www.rfc-editor.org/rfc/rfc7234#section-4.3.4

我注意到一件事,无论我添加或修改什么标头,当原始服务器返回 304 时,nginx 都会使用它看到的该资源的第一组响应标头进行响应。

此外,如果我Cache-Control:max-age在返回 304 响应时从第一个请求更改标头值,则似乎 nginx 遵循新值,因为我的资源当时已被缓存,但是响应标头值是第一个请求时给出的值,而不是我在 304 响应上修改的值。

我在跑步nginx version: nginx/1.10.1

相关内容