Full page reload on Post/Redirect/Get ignoring cache control

前端 未结 3 1853
名媛妹妹
名媛妹妹 2020-12-29 12:28

I have a page that loads a lot of images, css and javascript. I\'ve added a far future Expires header and set Cache-Control to public on these external dependencies so they

3条回答
  •  抹茶落季
    2020-12-29 13:18

    When you F5/refresh in Chrome, Safari or IE8 all the GET resources are requested again, even if they've been cached.

    If you watch the request/response with the dev tools or Fiddler you'll see that the server responds with an HTTP 304 status and no content. This tells the browser that they don't need to download it again and that they can continue to use the cache.

    In Chrome's dev tools' Resource tab files refreshed like that will have a latency time, but a download time of 0ms.

    If you reload the page by leaving and returning you'll find that these cached files are not retrieved again and the server is not checked.

    This behaviour of F5/refresh for GET static resource is correct - it's FX and IE6 that are doing it wrong. It also helps with the confusing CTRL+F5 command that most users don't know about.

    You can't cache POST or pages that return a temporary HTTP redirect:

    POST changes data and should always prompt before being sent again, and its results are never cached.

    Redirects are handled at a low level in the HTTP stuff - below caching. Really it tells the browser to get the resource from somewhere else and while it can cache that it hasn't cached the redirect and needs to check again.

    You should be able to cache a 301 permanent redirect, but a 302 or 303 temporary redirects shouldn't be cached according to the HTTP spec.

提交回复
热议问题