Internet Explorer 10 后退按钮缓存


Internet Explorer 10 back button caching

在Internet Explorer 10中,如果你按后退按钮,它会尝试从浏览器缓存中获取上一页。此行为与几乎所有其他浏览器(包括 IE9)不同,在 IE9 中,按后退按钮将完全重新加载上一页,而不是重用缓存。

我如何从网站与IE10通信,可能使用javascript/headers等来不对网站全局进行此缓存利用率?

(注意:我不是在寻找IE10设置来禁用此功能。我正在寻找一种可以在网站而不是浏览器中实施的解决方案,以指示IE10不要将此缓存用于后退按钮)。此外,我正在寻找适用于网站中每个页面的全球解决方案......

我在网站上使用 PHP/Jquery

所以这里有更多信息

该页面是一个表单。它包含一些动态加载的信息。(假设它包含用户提交表单的次数)

单击表单的提交按钮。然后,您将被重定向到表单的操作页面。

然后按后退按钮。

在所有其他浏览器中,它将使用新更新的"用户提交表单的次数"重新加载初始表单。然而,在IE10中,这不会发生。如何在IE 10中做到这一点。

下面是一些示例标头:

1. 首次加载表单时:

请求标头

Key Value
Request GET /path/to/my/page HTTP/1.1
Accept  text/html, application/xhtml+xml, */*
Accept-Language en-US
User-Agent  Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; WOW64; Trident/6.0)
Accept-Encoding gzip, deflate
Host    myhost.com
If-Modified-Since   Tue, 10 Sep 2013 23:55:33 GMT
If-None-Match   "1378857333"
DNT 1
Connection  Keep-Alive
Cookie  __utma=104299925.1011127538.1340896287.1364829735.1378764406.12; __utmz=104299925.1340896287.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none); has_js=1; __utmc=104299925; __qca=P0-1247924781-1340896285157; _mkto_trk=id:601-CPX-764&token:_mch-sadfsadfze.com-1358808312889-73607; __utma=171146939.775168663.1343066079.1375907514.1378762647.41; __utmz=171146939.1343066079.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none); s_stats_browser_info=%7B%22pluginInfo%22%3A%7B%22pdf%22%3A%5B%22pdf%22%2C%22application/pdf%22%2C%220%22%5D%2C%22quicktime%22%3A%5B%22qt%22%2C%22video/quicktime%22%2C%220%22%5D%2C%22realplayer%22%3A%5B%22realp%22%2C%22audio/x-pn-realaudio-plugin%22%2C%220%22%5D%2C%22wma%22%3A%5B%22wma%22%2C%22application/x-mplayer2%22%2C%220%22%5D%2C%22director%22%3A%5B%22dir%22%2C%22application/x-director%22%2C%220%22%5D%2C%22flash%22%3A%5B%22fla%22%2C%22application/x-shockwave-flash%22%2C%220%22%5D%2C%22java%22%3A%5B%22java%22%2C%22application/x-java-vm%22%2C%221%22%5D%2C%22gears%22%3A%5B%22gears%22%2C%22application/x-googlegears%22%2C%220%22%5D%2C%22silverlight%22%3A%5B%22ag%22%2C%22application/x-silverlight%22%2C%220%22%5D%7D%2C%22res%22%3A%221920x1080%22%7D; _pk_id.2.1644=19232922ec6753dc.1371502517.1.1371502630.1371502517.; SESS569093948b0206b05eb2212616da3db6=1977iogjr841af2s8l4sd1cjd0; XDEBUG_SESSION=12250; has_js=1; __utmc=171146939

响应标头:

> Key   Value Response  HTTP/1.1 200 OK Date    Tue, 10 Sep 2013 23:55:44 GMT
> Server    Apache/2.2.20 (Ubuntu) X-Powered-By PHP/5.4.15-1~tooptee10+1
> Last-Modified Tue, 10 Sep 2013 23:55:44 +0000 Cache-Control   no-cache,
> must-revalidate, post-check=0, pre-check=0 ETag   "1378857344"
> Keep-Alive    timeout=15, max=9987 Connection Keep-Alive
> Content-Type  text/html; charset=utf-8

2.当您点击后退按钮返回该表单时

请求标头

>     Key   Value
>     Request   GET /path/to/my/page HTTP/1.1
>     Accept    text/html, application/xhtml+xml, */*
>     Accept-Language   en-US
>     User-Agent    Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; WOW64; Trident/6.0)
>     Accept-Encoding   gzip, deflate
>     Host  myhost.com

响应标头

> Key   Value Response  HTTP/1.1 304 Not Modified
> X-Powered-By  PHP/5.4.15-1~tooptee10+1 ETag   "1378857344"
> Keep-Alive    timeout=15, max=9987 Content-Type   text/html; charset=utf-8
> Content-Length    117183 Expires  Tue, 10 Sep 2013 22:55:36 GMT
> Last-Modified Tue, 10 Sep 2013 23:55:44 GMT

请注意,它最终返回 304。当我在 Firefox 中尝试此操作时,当您按下后退按钮时,它返回了 200。

我认为您想要的行为是一种打破用户后退按钮期望的行为。

用户希望当他们按回去时,它会将他们返回到他们之前查看的页面,处于他们离开页面时的状态。 大多数现代浏览器不仅通过缓存页面,而且通过在内存中保留页面状态(包括 Javascript 上下文)来实现这一点,以便在通过后退按钮返回页面时,它处于与之前相同的状态,包括他们写入表单的任何内容或他们与之交互的任何 Javascript。

在大多数浏览器中,您可以通过设置Cache-Control标头(例如 no-cacheno-store )来强制覆盖此设置。 我不知道no-store是否适用于您的IE10,或者IE10是否忽略了这一点,无论如何都会回到页面。 如果是这样,我想我真的不会责怪它。 这样做既符合用户的利益,既要快速,又要像以前查看时一样返回到页面。

我认为我会采取的方法是重新思考设计,你不必同意我的观点。 如果您不打算向用户显示他们返回时看到的相同内容,为什么还要要求用户点击"返回"? 如果要显示更新的表单,为什么不在 POST 后重定向回表单,这将计为新页面加载并遵循您的Cache-Control标题? 这就是我会做的,它已经成为一个事实上的标准。

tl;dr 有可能,但我不确定,你可以用no-store做你想做的事情,但我正在考虑在 POST 之后转向重定向,以免依赖后退按钮做其他事情回到以前的状态。

你可以在PHP中设置一些标题

Cache-Control: private, must-revalidate, max-age=0
Expires: Thu, 01 Jan 1970 00:00:00