Browser 浏览器执行GET而不是post的可能原因

Browser 浏览器执行GET而不是post的可能原因,browser,post,get,Browser,Post,Get,web应用程序中最常见的错误情况之一是,用户执行GET请求,表单应该在该请求中提交帖子 我意识到最有可能的情况是他们进入页面(通过帖子),然后点击地址栏并点击回车 问题是,是否有其他不太明显的方式可以实现这一点(打印预览/返回按钮等) 我们从未能够不断地重复这些问题。不同用户和不同页面的问题也不会经常发生(可能一周一次) 编辑: GET请求没有提交任何数据,因此处理页面崩溃。错误,获取GET而不是POST的最明显原因是因为您正在执行GET而不是POST 一个不太明显的原因是您忘记在其中一个表单中

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

我意识到最有可能的情况是他们进入页面(通过帖子),然后点击地址栏并点击回车

问题是,是否有其他不太明显的方式可以实现这一点(打印预览/返回按钮等)

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

编辑:
GET请求没有提交任何数据,因此处理页面崩溃。

错误,获取GET而不是POST的最明显原因是因为您正在执行GET而不是POST

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

仔细检查所有标签,确保所有标签都明确指定method=“post”


编辑:当您单击地址栏并按enter键时,是的,浏览器确实会获得一个页面,但您的表单不会以这种方式提交,因为浏览器对待URL的方式与复制粘贴URL的方式类似:一个新会话,不向服务器发送任何附加信息(cookie除外).

正如您所说,您的问题是间歇性的,因此将表单方法中的问题设置为get而不是post可能会被否决,但您是对的,如果用户在地址栏中按enter键,这将是一个get请求,返回按钮请求始终取决于最后发出的请求,若它是一篇文章,那个么任何好的浏览器都会提示你们重新提交,若它是get,那个么并没有提示,页面会被买回来(可能是从缓存中)

可能您可以使用Firebug(在.net选项卡中跟踪请求)或Fiddler,并对不同的用户/页面执行一些测试,如果您可以复制它,只需在地址栏中按enter键即可

编辑:
而且get总是应该“检索信息”,所以如果浏览器缺少什么或需要什么,它将是一个get,但再次检查IIS日志中的这些get请求并在浏览器中尝试,如果它们包含viewstate和eventvalidation的查询字符串,那么它们实际上是从post到get的格式错误的请求,如果表单方法未显式设置为get

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

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

也许是一个微不足道的答案,但我会这么做。不知道这是否增加了讨论的内容。

我也遇到了类似的问题,尽管听起来这不是你的问题。我有一个表单是通过ajax提交的,不应该使用默认提交。我时不时地收到表格上的“完成”错误。不可能提交此表格;然而,某些版本的Safari for Mac在进入时提交了它。我刚刚在它上面添加了一个jquery form.submit()捕获,以防止出现默认功能。我还将操作设置为不会导致错误的页面(在缺少javascript的情况下)。

使用可避免此问题。问题由来已久,但可以在此处找到很好的解释,谢谢。我没有明确指出的一点是,99%的时间里,所有的页面都没有瑕疵。使用GET调用页面只是“随机”的,我通常认为是用户在地址栏中按enter键。我正在努力确保该假设是有效的。@汤姆·哈伯德:尝试验证失败的页面,您可能意外生成了一个无效标记,在非常特定的情况下使浏览器感到困惑,并使浏览器无法正确解析method=“post”。请注意,此类无效标记可能位于页面的任何部分,甚至可能位于相关标记之外。尝试通过100%的有效性。