【问题标题】:Possible reasons for a browser executing GET rather than post浏览器执行 GET 而不是 post 的可能原因
【发布时间】:2023-03-14 16:43:02
【问题描述】:

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

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

问题是,是否还有其他不太明显的方式会发生这种情况(打印预览/后退按钮等)?

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

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

【问题讨论】:

标签: browser post get


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

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

    编辑: 并且 get 总是应该“检索信息”,所以如果浏览器缺少某些东西或需要某些东西,它将是一个 get 但再次检查 IIS 日志中的这些 get 请求并在浏览器中尝试它们,如果它们包含视图状态和事件验证的查询字符串,那么如果表单方法未明确设置为获取,则它们确实是来自 post 的错误格式请求。

    【讨论】:

      【解决方案3】:

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

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

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

      【讨论】:

        【解决方案4】:

        错了,您得到 GET 而不是 POST 的最明显原因是因为您正在执行 GET 而不是 POST。

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

        仔细检查所有标签并确保所有标签都明确指定 method="post"。

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

        【讨论】:

        • 谢谢。我没有说清楚的一点是,99% 的时间所有页面都可以正常工作(POST)。使用 GET 调用页面只是“随机”的,我通常认为是用户在地址栏中按 Enter 键。我试图确保这个假设是有效的。
        • @Tom Hubbard:尝试验证您失败的页面,您可能不小心生成了一个无效标记,在非常特定的情况下混淆了浏览器,并使浏览器无法正确解析 method="post"。请注意,此类无效标记可能位于页面的任何部分,甚至可能位于相关的
          标记之外。尝试通过 100% 的有效性。
        猜你喜欢
        • 1970-01-01
        • 2021-12-18
        • 1970-01-01
        • 1970-01-01
        • 2013-02-25
        • 2019-10-31
        • 1970-01-01
        • 2017-12-06
        • 1970-01-01
        相关资源
        最近更新 更多