【问题标题】:curl -X GET -I -H "Cache-Control: no-cache" does not bypasscurl -X GET -I -H "Cache-Control: no-cache" 不绕过
【发布时间】:2015-06-24 23:06:05
【问题描述】:

我正在做以下事情

$ curl -X GET -I -H "Cache-Control: no-cache" https:/myserver/myimage.jpg
HTTP/1.1 200 OK
Server: nginx/1.4.6 (Ubuntu)
Date: Wed, 24 Jun 2015 22:55:31 GMT
Content-Type: image/jpeg
Content-Length: 37502
Connection: keep-alive
Etag: "wzsdm-1434973626-37502-1204291434"
Cache-Control: max-age=604800, public
Expires: Wed, 01 Jul 2015 22:43:01 GMT
X-Proxy-Cache: HIT

我希望得到以下内容

X-Proxy-Cache: BYPASS

我在 Nginx 上的配置如下:

   location ~* \.(?:jpg|jpeg|gif|png|pdf|ico|cur|gz|svg|svgz|mp4|ogg|ogv|webm|htc)$ { 
      proxy_cache my_zone;
      add_header X-Proxy-Cache $upstream_cache_status;

      include proxy_params;
      proxy_pass http://my-backend;
   }

有没有我可能错过的配置?

【问题讨论】:

  • 我猜你需要nginx.org/r/proxy_cache_bypassCache-Control 标头用于浏览器,而不是用于服务器。
  • 是的,我知道“Cache-Control: no-cache”适用于浏览器。在 Chrome 中,它改为发送“Cache-Control:max-age=0”。我已经包含了 proxy_cache_bypass 并且它不会绕过缓存。
  • 你包括了什么?
  • 我没有包括任何东西(当然除了启用网站的网站)。我的 nginx 是通过 apt-get 安装的。
  • 显示完整的 nginx 配置。

标签: curl nginx cache-control no-cache


【解决方案1】:

默认情况下,Nginx 的缓存不支持Cache-Control:no-cache 请求头,也不支持Pragma:no-cache 请求头。当用户代理发送这些请求标头时,您必须显式配置 Nginx 以绕过缓存并将请求传递到源服务器。

将以下行添加到您的配置文件中:

proxy_cache_bypass $http_pragma;
proxy_cache_bypass $http_cache_control;

From Nginx's caching guide:

NGINX 如何处理 Pragma 标头?

客户端添加 Pragma:no-cache 标头以绕过所有 中间缓存并直接进入源服务器以获取 请求的内容。 NGINX 默认不支持 Pragma 标头, 但您可以使用以下内容配置该功能 proxy_cache_bypass 指令:

【讨论】:

  • 来自文档:如果字符串参数的至少一个值不为空且不等于“0”,则不会从缓存中获取响应。所以它不关心标头的内容,任何非空/零 Pragma 或 Cache-Control 请求标头都会触发 BYPASS。进行硬刷新时,浏览器通常会设置“无缓存”。
猜你喜欢
  • 2022-11-17
  • 1970-01-01
  • 2014-01-16
  • 1970-01-01
  • 2011-11-26
  • 1970-01-01
  • 2015-05-18
  • 2020-02-14
  • 2012-11-03
相关资源
最近更新 更多