浏览器执行GET而不是发布的可能原因

时间:2010-09-22 10:51:18

标签: browser post get

Web应用程序中最常见的错误情况之一是用户执行GET请求,表单应该提交POST。

我意识到最可能的情况是他们到达页面(通过POST),然后点击地址栏并点击回车。

问题是,是否还有其他不那么明显的方法(打印预览/后退按钮等)?

我们从未能够始终如一地重复这些问题。针对不同用户和不同页面的问题也不会经常发生(可能每周一次)。

修改: 没有使用GET请求提交数据,因此处理页面崩溃了。

4 个答案:

答案 0 :(得分:0)

正如你所说你的问题是间歇性的,所以在表单方法设置为get而不是post时出现问题可以被否决但是你是对的,如果用户按下输入地址栏,它将是一个获取请求和后退按钮请求总是取决于最后一个请求,如果它是一个帖子,那么任何好的浏览器都会提示你重新提交,如果它得到了没有提示,页面将被买回(可能来自缓存)。

您可以使用Firebug(.net选项卡中的跟踪请求)或Fiddler,如果您可以重现它,可以使用不同的用户/页面进行一些测试,只需按下输入地址栏即可。

编辑: 并且get总是应该'检索信息',所以如果浏览器缺少某些内容或者需要某些内容它将会获得但是再次在IIS日志中检查这些获取请求并在浏览器中尝试它们,如果它们包含viewstate和eventvalidation的查询字符串,那么他们真的是错误形成了来自post的请求,如果form方法没有明确设置得到。

答案 1 :(得分:0)

我认为回答“浏览器执行GET而不是POST的原因是什么”并没有帮助解决在您期望获得GET的表单上接收GET的问题。但是:要回答这个问题,我只是说你收到一个GET,因为浏览器发送一个GET,你可以在任何可以发送POST的页面上发送GET。另一方面,如果用户使用表单,则浏览器发送POST。因此,您的服务器必须准备好处理GET,它应该以与具有无效参数的POST相同的方式处理GET。我的建议是:

  • 如果您收到GET,请再次显示该表单。
  • 如果您收到包含无效数据的POST,请再次显示该表单并通知用户他必须以特定方式输入数据。

也许是一个微不足道的答案,但这就是我要做的。不知道它是否会增加讨论。

答案 2 :(得分:0)

我遇到了类似的问题,虽然这听起来不像是你的。我有一个通过ajax提交的表单,不应该使用默认提交。偶尔我收到了表格上的GET错误。不应该提交此表格;但是,某些版本的Safari for Mac在输入时提交。我刚刚添加了一个jquery form.submit()catch来阻止默认功能。我还将操作设置为不会导致错误的页面(如果缺少javascript)。

答案 3 :(得分:-2)

错误,你获得GET而不是POST的最明显的原因是因为你正在进行GET而不是POST。

一个不太明显的原因是您忘记在其中一个表单中指定method =“post”。 HTML标准指定默认方法是GET,因此如果要POST,则必须明确指定method =“post”。

仔细检查所有标记,并确保所有标记明确指定method =“post”。

编辑:当你点击地址栏并按回车键时,是的浏览器确实会获取一个页面,但是你的表单不会以这种方式提交,因为浏览器处理的URL类似于复制粘贴的方式URL将是:没有任何附加信息发送到服务器的新会话(cookie除外)。