内容缓存后,我应该发送什么标题以完全停止对服务器的所有请求?
我们有一个非常高延迟的服务器(Sigh,VMWare),因此即使向HEAD
服务器发送请求也要花费40ms。
当前,这些是正在发送/接收的报头;
第一个要求
客户发送;
GET http://dugong:8080/Rvi24mYJkxFRGNzq73PPvgWGh1j/IMG_2071.jpg HTTP/1.1
Host: dugong:8080
User-Agent: Mozilla/5.0 (Windows NT 5.1; rv:9.0) Gecko/20100101 Firefox/9.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip, deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Pragma: no-cache, no-cache, no-cache
Cache-Control: no-cache, no-cache, no-cache
服务器响应;
HTTP/1.1 200 OK
Server: nginx/1.0.11
Date: Wed, 01 Feb 2012 14:51:51 GMT
Content-Type: text/plain
Vary: Accept-Encoding
Last-Modified: Tue, 31 Jan 2012 10:45:11 GMT
Content-Length: 14
Expires: Thu, 31 Jan 2013 14:51:51 GMT
Cache-Control: max-age=31536000
因此它将在未来发送,Cache-Control
并将Expires
标头设置为365天。不幸的是,在第二次刷新时,它再次请求了带有If-Modified-Since
标题的对象。
第二个请求
GET http://dugong:8080/Rvi24mYJkxFRGNzq73PPvgWGh1j/IMG_2071.jpg HTTP/1.1
Host: dugong:8080
User-Agent: Mozilla/5.0 (Windows NT 5.1; rv:9.0) Gecko/20100101 Firefox/9.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip, deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
If-Modified-Since: Tue, 31 Jan 2012 10:45:11 GMT
Cache-Control: max-age=0
响应;
HTTP/1.1 304 Not Modified
Server: nginx/1.0.11
Date: Wed, 01 Feb 2012 14:58:00 GMT
Vary: Accept-Encoding
Expires: Thu, 31 Jan 2013 14:58:00 GMT
Cache-Control: max-age=31536000
不幸的是,由于愚蠢的过时的代理软件,我们无法使用Keep-Alive
,或将任何其他服务器/代理放在应用程序的前面。我们也无法提高服务器性能并减少网络延迟。我一直在尝试找出可以发送哪些标头以摆脱301请求。我试过使用ETags,但这没什么区别,它仍然发送If-modified-since
标头。我也尝试过删除Last-Modified
标头,但这只会导致没有缓存的标准GET请求(检查日志,服务器仍在接收请求)。
客户端是Firefox(主要是),IE 7、8和(某些)9,Chrome和Safari的混合体,但是此行为似乎在所有经过测试的浏览器中均出现。
TL; DR;
糟糕的网络,我应该发送哪些标头以告知客户端永远不要If-modified-since
向服务器发送请求以验证其缓存,并保持内容被缓存直到Expires
标头得到满足?
我可能缺少明显的东西,但是我尝试的一切似乎都能产生相同的结果。
我们的应用程序服务器前面有一个NGINX服务器,因此我可以随意添加/删除任何标头。我们的代理不支持Keep-Alive,也无法提高网络性能。由于糟糕的软件设计,Web应用程序在每个页面加载时加载+100资源(是的,企业软件很烂),每个对象的延迟约为40-50ms。
text/plain
有何处理?