我正在写一个提供图像的golang服务器。当请求进入时,我返回图像并设置HTTP Cache标头。
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
if r.URL.String() == "/sw.js" || r.URL.String() == "/favicon.ico" {
return
}
// logic to get image
w.Header().Set("Content-Type", "image/jpeg")
w.Header().Set("Content-Length", strconv.FormatInt(*result.ContentLength, 10))
w.Header().Set("Cache-Control", "public, max-age=2592000")
io.Copy(w, result.Body)
})
现在我只是在浏览器上对此进行测试。我请求一个图像,所有标头都从服务器正确返回。我检查了chrome://cache/
,其中的网址设置了所有正确的标头。
然而,当在网址地址栏中再次点击enter
以重新请求图片时。浏览器仍在向服务器发送网络请求。我错过了回复标题中的内容吗?我还使用etag标头实现了此功能,如果etag键没有更改,则只返回http.StatusNotModified
响应。但是我试图一起避免网络请求。