我正在托pipe一个正在发送适当的caching控制标题的REST服务。 我使用Varnish作为Web服务器前面的caching服务器。 但是,清漆的限制是它不支持cachingHTTP POST和HTTP PUT。 有没有其他caching服务器可以caching这些请求?
我知道,cachingPOST是有点棘手,因为你不能只是caching基于URL作为一个关键像GET; 它需要实际检查请求主体。 在multipart/form-data请求的情况下,caching请求体的大小应该是有限制的(这样大file upload等不会被caching)。 不过,我真的希望能够caching简短的HTTP POST,或者至less是application/x-www-form-urlencoded 。
caching的主要思想是在不询问后端系统的情况下对同一请求提供相同的响应。 POST请求的问题是,你必须检查正文以决定两个请求是否相同。 最好的解决scheme是从POST更改为GET。
如果不适用,您可以尝试使用Nginx的代理模块进行以下设置(请参阅所需的主体大小限制):
location @apache_backend { ... proxy_cache_methods POST; proxy_cache_key "$uri|$request_body"; client_max_body_size 1k; }
你已经用nginx标记了你的问题,但是显然你不知道proxy_cache_methods和proxy_cache_key指令应该允许你代理POST响应,只要你的服务器使用了caching控制头proxy_cache_key POST响应。
这个想法将包括与proxy_cache_methods的POST方法,并find适合proxy_cache_key的行。 $scheme$proxy_host$request_uri;的默认值$scheme$proxy_host$request_uri; 不会像你怀疑的那样工作,但你可以从大量的Nginxvariables中select一些适合你需要的东西。