Http 使用nginx缓存POST响应:我应该将缓存控制头转发给客户端吗?

Http 使用nginx缓存POST响应:我应该将缓存控制头转发给客户端吗?,http,caching,nginx,reverse-proxy,w3c,Http,Caching,Nginx,Reverse Proxy,W3c,我们的系统使用POST请求预加载资产列表。给定相同的资产标识符列表,服务器将使用相同的资产数据列表进行响应。由于标识符列表可能很长(实际上是一个包含JSON列表的多部分请求),因此我们使用POST而不是GET,尽管它是幂等的 我们使用NGINX作为这些服务器前面的反向代理。我成功地将其配置为工作状态,但有些“感觉”不对劲;我在要缓存的POST响应中返回一个Cache Control:max age=3600头,我让NGINX在将它们返回到客户端之前除去它们 声明只将方法和uri用作缓存密钥;我可

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

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

声明只将方法和uri用作缓存密钥;我可以使用标题,但它似乎仅限于其他标题

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

因此,我的选择似乎是:

  • 返回
    缓存控制
    头,知道(或希望?)前面将有一个反向代理剥离该头
  • 返回一个
    缓存控件
    头并让它通过。如果有人能解释为什么它实际上是可靠的,那就简单了(或者如果有另一个类似的标题?)
  • 不要使用
    缓存控制
    ,而是直接在我的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;
    }