gpt4 book ai didi

javascript - HTML 表单似乎正在提交 *both* POST 和 GET?

转载 作者:数据小太阳 更新时间:2023-10-29 04:47:23 24 4
gpt4 key购买 nike

这不是 this 等问题的重复,而是相反:我有一个通过 jQuery 提交的表单

    $('<form>', {
action : 'service',
method : 'post',
target : '_blank'
}).append(
$('<input>', {
type : 'hidden',
name : 'payload',
value : JSON.stringify(payload)
})
).appendTo('body').submit().remove();

这样做是为了我可以用 HTML 打开不同的页面。

由于我需要提交相当多的复杂信息,我实际做的是将它们全部序列化为一个大的 JSON 字符串,然后创建一个只有一个字段(“payload”)的表单并提交那个.

接收端有一个过滤器是这样的:

  • 如果方法是POST,
  • 并且只有一个提交的变量,
  • 那个变量的名字是“payload”,
  • 然后对其值进行 JSON 解码并使用它来创建伪造的 GET 数据。

因此,当 GET 数据增长太多时,我可以在不修改实际脚本的情况下切换方法,该脚本根本不会注意到任何变化。

直到今天它一直有效。

应该发生什么

服务器应接收单个 POST 提交,并在弹出窗口中打开适当的响应。

实际发生了什么

服务器确实收到了正确的 POST 提交...

...显然忽略了它...

...在那个之后,浏览器立即发出一个没有参数的GET,它是那个无参数GET的结果(请原谅双关语)显示在弹出窗口中。

毫不奇怪,这始终是“您没有提交任何参数”错误。呃。

我已经做了什么

  • 验证此方法有效,并且在过去几年中对不同的形式和不同的服务端点一直有效
  • 尝试用硬编码 <FORM> 替换表单在 HTML 中,没有任何 jQuery。相同的结果。所以,这不是 jQuery 问题。
  • 尝试了不同的浏览器(如果它只适用于某些浏览器,那将无济于事:我需要支持大多数现代浏览器。但是,我检查了。幸运的是,这种故障在所有浏览器中重现,即使在 iPhone 上也是如此)。
  • 尝试发送少量数据(只是“{ test: 0 }”)。
  • 尝试在端点脚本收到任何内容后立即停止端点脚本。
  • 检查了 Stack Overflow。我找到了什么 seems to be the same problem , 在 various flavours ,但这并没有什么安慰。 This one有一个有趣的陷阱,但不,它没有帮助。
  • 检查防火墙、代理、广告拦截器和插件(我现在使用普通的 Firefox)。
  • 调用 IT 人员并询问有关最近 SVN 提交的尖锐问题。没有。

我还没有做什么

  • 检查低级别的 HTTPS 对话(我没有足够的访问权限)。
  • 逐步比较可以正常工作的服务器的配置和不能正常工作的新服务器的配置。
  • 很明显,戴上我的思考帽。 一定有什么很明显是我遗漏的,我正在为自己准备一个相当大的脸掌。

最佳答案

使用类似 hurl.it 的工具或 Postman手动向服务器发送请求。这些工具将很好地显示来自服务器的响应,包括所有 HTTP header 。我怀疑服务器响应重定向(状态代码 30X),导致 POST 完成后发出 GET 请求。


更新:HTTP 重定向

HTTP 重定向不一定使用相同的 HTTP 方法甚至相同的数据来向重定向目标发出请求。特别是对于非幂等请求,这可能是一个安全问题(您通常不希望您的表单提交自动重新提交到另一个地址)。但是,HTTP 为您提供了两种选择:

[...] For this reason, HTTP/1.1 (RFC 2616) added the new status codes 303 and 307 [...], with 303 mandating the change of request type to GET, and 307 preserving the request type as originally sent. Despite the greater clarity provided by this disambiguation, the 302 code is still employed in web frameworks to preserve compatibility with browsers that do not implement the HTTP/1.1 specification.

[from Wikipedia: HTTP 302]

同样适用于 301:

If the 301 status code is received in response to a request of any type other than GET or HEAD, the client must ask the user before redirecting.

[from Wikipedia: HTTP 301]

关于javascript - HTML 表单似乎正在提交 *both* POST 和 GET?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39848396/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com