2016-08-01 130 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