使用 nginx 缓存 POST 响应:我应该将 Cache-Control 标头转发到客户端吗?

2024-02-19

我们的系统使用 POST 请求来预加载资产列表。给定相同的资产标识符列表,服务器将使用相同的资产数据列表进行响应。由于标识符列表可能非常长(它实际上是包含 JSON 列表的多部分请求),因此我们使用 POST 而不是 GET,尽管它is幂等的。

我们使用 NGINX 作为这些服务器前面的反向代理。我成功地将其配置为工作,但有一些“感觉”不对劲;我返回一个Cache-Control: max-age=3600我想要缓存的 POST 响应中的标头,并且我让 NGINX 在将它们返回给客户端之前剥离它们。

The RFC 7234 https://www.rfc-editor.org/rfc/rfc7234#section-2仅表示方法和 uri 将用作缓存键;我可以使用Vary https://www.rfc-editor.org/rfc/rfc7231#section-7.1.4标头,但似乎仅限于其他标头......

我不确定浏览器的可靠性如何。 “似乎”如果我将 HTTP POST 响应设置为可缓存,它将被缓存以用于“未来的 GET 请求”,这不是我想要的。

所以,我的选择似乎是:

  1. 返回一个Cache-Control header knowing(或者希望?)在它前面会有一个反向代理来剥离该标头。
  2. 返回一个Cache-Control标题并让它通过。如果有人可以解释为什么它实际上是可靠的,那会很简单(或者如果有另一个类似的标头?)
  3. 不使用Cache-Control而是直接在我的 NGINX 配置中“硬编码”所有 URL(不过我还无法完成这项工作)

我可以使用可靠的方法来实现我在这里需要的东西吗?非常感谢你的帮助。

以下是 NGINX 配置的摘录(如果对某人有帮助的话):

proxy_cache_path /path/to/nginx/cache levels=1:2 keys_zone=my_cache:10m max_size=10g inactive=60m use_temp_path=off;

location /path/to/post/request {
  proxy_pass http://remote-server;
  proxy_cache my_cache;
  proxy_set_header Host $host;
  proxy_set_header X-Real-IP $remote_addr;
  proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  proxy_set_header X-Forwarded-Proto $scheme;
  proxy_set_header proxy_http_version 1.1;
  proxy_set_header Connection "";
  proxy_cache_lock on;
  proxy_cache_use_stale error timeout updating http_500 http_502 http_503 http_504;
  proxy_cache_methods POST;
  proxy_cache_key "$scheme$proxy_host$uri$is_args$args|$request_body";
  proxy_cache_valid 5m;
  client_max_body_size 1500k;
  proxy_hide_header Cache-Control;
}

None

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 nginx 缓存 POST 响应:我应该将 Cache-Control 标头转发到客户端吗? 的相关文章

随机推荐