How to disable Ajax caching?

后端 未结 3 1802
夕颜
夕颜 2020-12-06 06:43

I am having an issue with ajax caching, This was a problem in IE browser too but i fixed it by Writing the Following code.

    response.setHeader(\"Cache-Co         


        
相关标签:
3条回答
  • 2020-12-06 06:58

    First, a note on your Expires header. Your question doesn't specify what server framework you're using, so I'm not sure if this is applicable. However, it looks like you might be sending an invalid Expires header.

    The RFC requires Expires to be a date, however you appear to be setting the header to a literal "-1". There are many frameworks that have an expires property on their HTTP response object that takes an int and automatically calculates a date that is that number of seconds from now.

    Use a HTTP inspector to ensure that your server is sending a validly formatted date and not -1 in the Expires header.


    You might try making your Cache-Control header more restrictive:

    response.setHeader("Cache-Control", "private, no-cache, no-store, must-revalidate");
    

    must-revalidate tells caches that they must obey any freshness information you give them. HTTP allows caches to serve stale representations under special conditions; by specifying this header, you’re telling the cache that you want it to strictly follow your rules. [1]

    0 讨论(0)
  • 2020-12-06 06:58

    According to RFC 2616 section 9.5 about POST

       Responses to this method are not cacheable, unless the response
       includes appropriate Cache-Control or Expires header fields. However,
       the 303 (See Other) response can be used to direct the user agent to
       retrieve a cacheable resource.
    

    So, the browser must not cache POST responses, unless the response specifies otherwise. In the same time, browsers may cache GET responses, unless the response specifies otherwise. So, for the requests that should not be cached, such as AJAX requests, POST is preferrable method.

    If you, for any reason, don't want to use POSTs for AJAX, you should use the trick mentioned by minitech, it is in fact widely used to force browser to load current version of any resource.

    0 讨论(0)
  • 2020-12-06 07:01

    Send an extra parameter with your GET request that will never be the same, for example, the current timestamp. Something like:

    url = url + '&nocache=' + new Date().getTime();
    

    This will prevent caching.

    0 讨论(0)
提交回复
热议问题