缓存标头设置但仍在发送网络请求

时间:2018-03-15 18:30:31

标签: http go http-caching

我正在写一个提供图像的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响应。但是我试图一起避免网络请求。

0 个答案:

没有答案