2014-01-20 50 views
1

我有这个服务器响应的文件,我不希望从浏览器缓存文件。该响应具有两个缓存控制标头。响应头中的高速缓存控制

  • 缓存控制:无缓存,无店铺,必重新验证(这是我想要的,)
  • 缓存控制:私人(这是由NetScaler的默认和服务器端的家伙附告诉我他们不能删除它)

我的问题是哪一个会占上风?

HTTP/1.1 200 OK 
Date: Mon, 20 Jan 2014 15:29:53 GMT 
Server: Apache 
Last-Modified: Fri, 17 Jan 2014 16:50:54 GMT 
ETag: "682-4f02d58643780" 
Accept-Ranges: bytes 
Cteonnt-Length: 1666 
P3P: CP="NOI ADM DEV PSAi COM NAV OUR OTR STP IND DEM" 
Keep-Alive: timeout=5, max=1000 
Connection: Keep-Alive 
Content-Type: text/javascript 
Cache-Control: no-cache, no-store, must-revalidate 
Pragma: no-cache 
Expires: 0 
Cache-Control: private 
Content-Encoding: gzip 
Content-Length: 716 

回答

1

作为每RFC2616,相同的标头多次设定应相当于与由昏迷分离所有值一旦设置它。

当且仅当该标题字段的整个字段值被定义为以逗号分隔的列表时,具有相同字段名的多个消息标题字段可以存在于消息中[即,#(值)]。它必须能够将多个头字段组合成一个“字段名称:字段值”对,而不改变消息的语义,通过将每个后续字段值附加到第一个字段值,每个字段值都用逗号分隔。

你的情况

因此,这将相当于

Cache-Control: no-cache, no-store, must-revalidate, private 

private只会进一步防止响应由服务器和浏览器之间的代理缓存,所以它不应该有任何负面影响。

0

已经研究了类似的问题,为客户,我可以从我自己的经验告诉大家的是,如果正在通过Citrix NetScaler可提供该内容和压缩已启用,与内容类型的文本的任何事情都会有一个Cache-Control:由NetScaler设置的私有值。你如何得到两个条目是超出我的。然而,约兰达的答案很可能是正确的。警告的唯一原因是RFC2616在2014年被取代。(请参阅https://www.w3.org/Protocols/rfc2616/rfc2616.html

关于NetScaler添加/替换Cache-Control标头,看起来它可以关闭;你只需要知道如何。必须打开Citrix的案例才能了解CTX124717(常见问题解答:防止将缓存控制响应标头设置为私有)。

如果在NetScaler上启用了压缩,当响应包含Content-Type标头并包含文本时,两个默认策略(ns_cmp_content_type和ns_adv_cmp_content_type)“压缩数据”(请参阅​​http://docs.citrix.com/en-us/netscaler/10-5/ns-optimization-wrapper-10-con/ns-compression-gen-wrapper-con/ns-compression-configactions-tsk.html)。使用NetScaler API Mgr(nsapimgr),可以防止压缩功能添加缓存控制响应标头(nsapimgr -ys cmp_no_cc_hdr = 1)。