响应头中的缓存控制

时间:2014-01-20 15:34:48

标签: http-headers

对于我不想从浏览器缓存的文件,我有此服务器响应。响应有两个缓存控制头。

  • 缓存控制:无缓存,无存储,必须重新验证(这是我想要的)
  • Cache-Control:private(默认情况下从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

2 个答案:

答案 0 :(得分:1)

根据RFC2616,多次设置相同的标题应相当于将所有值设置为逗号分隔一次。

  

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

所以在你的情况下,它将等同于

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

private将进一步阻止服务器和浏览器之间的代理缓存响应,因此不会产生任何负面影响。

答案 1 :(得分:0)

为客户研究了类似的问题后,我可以根据自己的经验告诉您,如果通过Citrix NetScaler提供此内容并启用了压缩,那么任何具有内容类型文本的内容都将具有缓存-Control:NetScaler设置的私有值。你如何获得两份参赛作品超出了我的范围。然而,Yolanda的答案很可能是正确的。警告的唯一原因是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)可以阻止压缩功能添加Cache-Control响应头(nsapimgr -ys cmp_no_cc_hdr = 1)。