我们的系统使用POST请求预加载资产列表。给定相同的资产标识符列表,服务器将使用相同的资产数据列表进行响应。由于标识符列表可能很长(它实际上是包含JSON列表的多部分请求),因此我们使用POST而不是GET,尽管它是幂等。
我们在这些服务器前面使用NGINX作为反向代理。我成功地将它配置为工作,但有一些“感觉”错了;我在POST响应中返回一个Cache-Control: max-age=3600
标题,我希望将其缓存,并且在将它们返回给客户端之前让NGINX剥离它们。
RFC 7234仅表示方法,uri将用作缓存键;我可以使用Vary标题,但它似乎仅限于其他标题...
我不确定浏览器的可靠性。似乎“如果我使HTTP POST响应可缓存,它将被缓存为”未来的GET请求“,这不是我想要的。
所以,我的选择似乎是:
Cache-Control
标题知道(或希望?)在它前面会有一个反向代理剥离该标题。Cache-Control
标题,然后让它通过。如果有人可以解释为什么它实际上是可靠的,那就很简单(或者是否有另一个类似的标题?)Cache-Control
而是直接在我的NGINX配置中“硬编码”所有网址(虽然我无法使其工作)我可以用一种可靠的方法来实现我的需求吗?非常感谢你的帮助。
以下是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;
}