“阻止后退”按钮显示开机自检确认警报

2022-08-30 12:27:02

我有一个应用程序,它为网页提供一长串参数,所以我必须使用POST而不是GET。问题是,当页面显示并且用户单击“后退”按钮时,Firefox 会显示一条警告:

要显示此页面,Firefox 必须发送的信息将重复之前执行的任何操作(如搜索或订单确认)。

由于应用程序的构建方式使返回是一种非常常见的操作,因此这对最终用户来说真的很烦人。

基本上,我想按照这个页面的方式去做:

http://www.pikanya.net/testcache/

输入内容,提交,然后单击“后退”按钮。没有警告,它只是回去。

谷歌搜索我发现这可能是Firefox 3中的一个错误,但即使他们“修复”了它,我也想以某种方式获得这种行为。

我想使用一些HTTP标头可以做到这一点,但究竟是哪一个呢?


答案 1

在这里查看我的Web编程黄金法则:

停止向数据库中插入数据两次

它说:“永远不要用身体回应POST请求。始终完成工作,然后使用位置:标头进行响应以重定向到更新的页面,以便浏览器使用GET请求它”

如果浏览器询问用户有关重新开机自检的问题,则您的Web应用程序已损坏。用户不应该看到这个问题。


答案 2

一种方法是将POST重定向到重定向到GET的页面 - 请参阅维基百科上的帖子/重定向/获取

假设您的 POST 是 4K 的表单数据。据推测,您的服务器会对该数据执行某些操作,而不仅仅是显示一次然后将其丢弃,例如将其保存在数据库中。继续这样做,或者如果它是一个巨大的搜索表单,请在数据库中创建一个临时副本,该副本将在几天后或在使用空间限制时以LRU为基础进行清除。现在创建可以使用 GET 访问的数据的表示形式。如果它是临时的,请为其生成一个ID并将其用作URL;如果它是一组永久的数据集,它可能具有可用于URL的ID或某些东西。在最坏的情况下,像小网址这样的算法可以将一个大网址折叠成一个小网址。重定向 POST 以获取数据的表示形式。


作为历史说明,这种技术是在1995年建立的实践


推荐