阻止后退按钮显示POST确认警报

Mil*_*kov 39 php forms post http-headers

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

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

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

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

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

输入内容,提交,然后单击"上一步"按钮.没有警告,它只是回去了.

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

我想这可能是一些HTTP标题可行,但究竟是哪个?

Ily*_*man 37

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

停止数据插入数据库两次

它说:"永远不要用身体回应POST请求.始终执行工作,然后使用Location:标头进行响应以重定向到更新的页面,以便浏览器使用GET请求它"

如果浏览器曾要求用户重新发布POST,那么您的Web应用程序就会崩溃.用户不应该看到这个问题.

  • 亚马逊似乎没有遵循这条黄金法则 (8认同)
  • 我会说你的"黄金法则"有点简化了.如果POST不成功,则不应该有重定向.只有在请求可以处理之后.这个概念也称为PRG或"后发后重定向". (6认同)

Pet*_*ham 28

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

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


作为历史记录,这种技术在1995年成立.

  • @Ian假设您的浏览器获取页面A,其上有一个POST表单.您的浏览器历史记录中包含GET A. 您将表单发布到B,并重定向到GET C.您的浏览器历史记录现在有GET A,GET C.它不应该记录POST B,因为如果获得303重定向,浏览器不应该在历史记录中记录页面.尝试http://www.andypemberton.com/sandbox/prg/上的沙箱,查看浏览器的历史记录,看看是否有两到三页.因此用户不会回到帖子的结果,而是回到表单. (2认同)