在POST请求中提交表单后,点击返回按钮时页面未更新

问题描述

我有一个简单的测试网站,其中有两个不同的页面,分别是Page1和Page2。页面是由Web服务器生成的。

所有响应均包含以下标头:

Cache-control: no-cache,no-store,must-revalidate
Pragma: no-cache

Page1包含一个指向Page2的链接一个TextArea元素,并包含在FORM标记中。 Page2是空白页(不包含任何有用的内容)。 单击Page2链接(在Page1内)会将表单(和TextArea值)提交到服务器,然后切换到Page2。 每次从服务器请求Page1时,都会在TextArea中添加新行。这发生在服务器端(在浏览器端没有通过JavaScript的DOM操作)。

因此,在应用程序启动时,Page1的TextArea包含:

“第1行”

如果我单击指向Page2的链接,然后单击“后退”按钮,则Page1的TextArea现在包含2行,如预期的那样:

“第1行”
“第2行”

显示了两件事:

  • BFCache(后退缓存)未使用(因为每次按下后退按钮时,都会向Web服务器发送一个新请求)。也可以通过pageshow的event参数持久属性为false的事实来确认。
  • 浏览器正在正确更新页面(因为按预期在服务器端添加页面的新内容显示在浏览器端)

但是,如果我清除文本区域,单击指向Page2的相同链接,然后单击“后退”按钮,则TextArea仍将显示空白内容。我希望它能显示恰好一行文本(由服务器插入)。在所有经过测试的浏览器(包括WebKit,FireFox甚至Internet Explorer)中都会发生这种情况。

使用开发人员工具中的网络标签,我可以看到服务器以正确的内容进行响应,并且预览子标签(在开发工具/网络中)完全显示了这一点。

因此,在第二种情况下,浏览器肯定是从服务器检索更新的内容,但拒绝使用该内容更新页面。在我看来,无论何时提交页面,无论用户端在服务器端更新了什么内容,浏览器都将在用户单击后退按钮时使用提交的页面

此问题与此处的另一个问题非常相似:How to prevent content being displayed from Back-Forward cache in Firefox? 症状相同,但在那种情况下,没有表单提交,响应头的更改将解决该问题。

我的问题:

a)为什么浏览器从服务器检索更新的内容,但在特定情况下不使用它来更新页面?这是有据可查的行为吗?

b)有没有办法改变这种行为?我特别在考虑一种强制浏览器使用服务器的响应来更新页面方法(与不涉及提交的情况相同)。

顺便说一句,考虑到在某些情况下可能需要完整的回发,在AJAX请求中提交表单不是解决方案,而仅仅是解决此问题的方法

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)