2016-08-01 136 views
0
var epoch = time.Unix(0, 0).Format(time.RFC1123) 
var headers = map[string]string{ 
    "Expires":   epoch, 
    "Cache-Control": "no-cache, private, max-age=0", 
    "Pragma":   "no-cache", 
    "X-Accel-Expires": "0", 
} 

log.Errorln("no cache header") 
for k, v := range headers { 
    rw.Header().Set(k, v) 
} 

http.ServeFile(rw, req, path) 

我在服務器端有上述代碼塊來提供文件請求。但所提供的文件仍然在瀏覽器中緩存。 但是,而不是http.ServeFile()我用http.ServeContent()與最後修改時間戳time.Now()。如果請求有相當長的時間差,這將起作用。瀏覽器是否優先於最後修改時間而不是無緩存頭?那麼沒有緩存頭的目的是什麼?我做錯了什麼?文件被瀏覽器緩存,即使響應沒有緩存頭

回答

0

某些瀏覽器緩存文件時不注意標題。典型的解決方案是將一些get參數添加到靜態文件路徑,因此瀏覽器認爲它是不同的請求。它可以是散列和或最後修改的時間戳。它可能看起來像這樣:site.com/icon.png?q=123456