有人知道是否发生了什么奇怪的事情吗?看来我的反向代理设置没有保留来自原始虚拟主机的正确缓存标头。
让我解释...
我目前正在使用 PHP Slim 为我的 Web 应用创建 API。它有自己的缓存机制,这些机制设置和运行良好。因此,api.example.com/info
例如,在访问资源时,我有一个上一次更改已设置,允许它被缓存(它不会经常改变)。
因此,标题看起来像这样:
Request URL:http://api.example.com/info
Request Method:GET
Status Code:304 Not Modified
请求标头
Accept:text/html,application/xhtml xml,application/xml;q=0.9,*/*;q=0.8
Accept-Charset:ISO-8859-1,utf-8;q=0.7,*;q=0.3
Accept-Encoding:gzip,deflate,sdch
Accept-Language:en-GB,en-US;q=0.8,en;q=0.6
Cache-Control:max-age=0
Connection:keep-alive
Host:api.example.com
If-Modified-Since:Mon, 04 Oct 2010 08:00:52 1100
User-Agent:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.5 (KHTML, like Gecko) Chrome/19.0.1084.56 Safari/536.5
响应标头
Connection:Keep-Alive
Date:Tue, 19 Jun 2012 22:34:45 GMT
Keep-Alive:timeout=5, max=100
Server:Apache/2.2.21 (Win64) PHP/5.3.8
Vary:Accept-Encoding
这表明资源返回了 304 - 它已从缓存中检索。太棒了!
但是,Web 应用程序从反向代理访问它(跨域问题)。当访问完全相同的资源时(这次是从)app.example.com/api/info
,它返回 200 代码。它的加载速度也明显较慢,这让我觉得有些地方出了问题。
这次,标题是
Request URL:http://app.example.com/api/info
Request Method:GET
Status Code:200 OK
请求标头
Accept:text/html,application/xhtml xml,application/xml;q=0.9,*/*;q=0.8
Accept-Charset:ISO-8859-1,utf-8;q=0.7,*;q=0.3
Accept-Encoding:gzip,deflate,sdch
Accept-Language:en-GB,en-US;q=0.8,en;q=0.6
Cache-Control:max-age=0
Connection:keep-alive
Host:app.example.com
If-Modified-Since:Mon, 04 Oct 2010 08:00:52 GMT
User-Agent:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.5 (KHTML, like Gecko) Chrome/19.0.1084.56 Safari/536.5
响应标头
Connection:Keep-Alive
Content-Encoding:gzip
Content-Length:1959
Content-Type:application/json
Date:Tue, 19 Jun 2012 22:41:01 GMT
Keep-Alive:timeout=5, max=100
Last-Modified:Mon, 04 Oct 2010 08:00:52 GMT
Server:Apache/2.2.21 (Win64) PHP/5.3.8
Vary:Accept-Encoding
X-API-Version:v1.0
X-Powered-By:PHP/5.3.8, Slim
有什么想法吗?抱歉,上面的标题信息太多了——我不想遗漏任何信息。
答案1
当我比较您的两个示例请求时,我发现它们之间存在更多差异。
例如第二个响应(通过代理)包含
Content-Encoding:gzip
行。也许您的反向代理在传递结果之前添加了 gzip 压缩过滤器。这可能意味着:您的主要资源没有改变,但代理通过压缩更改了内容,因此它将其标记为“新内容”。
另一个区别在于您的请求:在您的第一个请求中,您发送:
If-Modified-Since:Mon, 04 Oct 2010 08:00:52 +1100
+1100
但是在您的第二个请求中缺少时间偏移,因此您发送了另一个修改时间。