我们的系统使用 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 请求”,这不是我想要的。
所以,我的选择似乎是:
- 返回一个
Cache-Control
header knowing(或者希望?)在它前面会有一个反向代理来剥离该标头。
- 返回一个
Cache-Control
标题并让它通过。如果有人可以解释为什么它实际上是可靠的,那会很简单(或者如果有另一个类似的标头?)
- 不使用
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(使用前将#替换为@)