2014-01-20 49 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)。