响应。是否使用POST而不是Get重定向?

我们需要提交表单并保存一些数据,然后将用户重定向到异地页面,但在重定向过程中,我们需要使用POST而不是GET“提交”表单

我希望有一个简单的方法来实现这一点,但我开始认为没有。我想我现在必须创建一个简单的另一个页面,只包含我想要的表单,重定向到该页面,填充表单变量,然后对只调用document.forms[0].submit()的脚本执行body.onload调用

有人能告诉我有没有别的选择吗?我们可能需要在项目的后期对此进行调整,这可能会变得有点复杂,因此如果有一个简单的方法,我们可以完成这一切,这将是非常棒的

无论如何,谢谢你的回复

要做到这一点,需要了解HTTP重定向的工作原理。使用Response.Redirect()时,您会发送一个HTTP状态代码为302的响应(发送到发出请求的浏览器),通知浏览器下一步要去哪里。根据定义,即使原始请求是POST,浏览器也会通过GET请求来实现这一点

另一个选项是使用HTTP状态代码307,它指定浏览器应以与原始请求相同的方式发出重定向请求,但向用户提示安全警告。为此,您可以这样写:

公共无效页面加载(对象发送方,事件参数e)
{
//处理你这边的帖子
Response.Status=“307临时重定向”;
Response.AddHeader(“位置”http://example.com/page/to/post.to");
}

不幸的是,这并不总是有效的。不同的浏览器实现方式不同,因为这不是一个常见的状态代码

唉,与Opera和FireFox开发人员不同,IE开发人员从未阅读过规范,即使是最新、最安全的IE7也会在没有任何警告或确认对话框的情况下将POST请求从域A重定向到域B!Safari的工作方式也很有趣,虽然它不会引发确认对话框并执行重定向,但它会丢弃POST数据,有效地将307重定向更改为更常见的302。

所以,据我所知,实现类似的东西的唯一方法是使用Javascript。有两种选择,我可以在脑海中想到:

  1. 创建表单并使其操作属性指向第三方服务器。然后,向submit按钮添加一个click事件,该按钮首先使用数据向服务器执行AJAX请求,然后允许将表单提交到第三方服务器
  2. 创建要发布到服务器的表单。提交表单时,向用户显示一个页面,其中包含一个表单,其中包含要传递的所有数据,所有数据都在隐藏输入中。只需显示类似“重定向…”的消息。然后,将javascript事件添加到将表单提交给第三方服务器的页面

在这两种情况中,我会选择第二种,原因有二。首先,它比第一个更可靠,因为它不需要Javascript就可以工作;对于那些没有启用它的用户,您可以始终使隐藏表单的submit按钮可见,并指示他们在超过5秒时按下它。其次,您可以决定将哪些数据传输到第三方服务器;如果您使用justprocess来处理表单,那么您将传递所有post数据,这并不总是您想要的。307解决方案也是如此,假设它适用于所有用户

希望这有帮助

发表评论