Apache 反向代理不保留标头

Apache 反向代理不保留标头

有人知道是否发生了什么奇怪的事情吗?看来我的反向代理设置没有保留来自原始虚拟主机的正确缓存标头。

让我解释...

我目前正在使用 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但是在您的第二个请求中缺少时间偏移,因此您发送了另一个修改时间。

相关内容