我需要通过POST请求将用户重定向到外部站点。
我想到的唯一选择是通过JavaScript提交表单。
有什么想法吗?
答案 0 :(得分:32)
你的意思并不十分清楚,所以让我们采取一些方案:
用户应将表单发布到您自己的服务器
简单,只需将目标指定为表单操作:
<form action="http://someotherserver.com" method="post">
成功提交POST后,应重定向用户
像往常一样轻松,接受并处理POST数据,然后使用302
或303
重定向标题进行回复。
用户应将数据发布到您的服务器,并在验证后,您希望将该数据发布到另一台服务器
有点棘手,但有三种选择:
307
重定向进行回答,这意味着用户应在其他地址尝试相同的请求。从理论上讲,它意味着浏览器应该将相同的数据POST到另一台服务器。我不太确定这是多么受支持,但任何了解HTTP1.1的浏览器都应该能够做到这一点。 AFAIA在实践中经常没有使用它。请在此处查看所有HTTP重定向选项的列表:http://en.wikipedia.org/wiki/Http_status_codes#3xx_Redirection
答案 1 :(得分:4)
只需将HTML表单的操作网址设置为特定的外部网站即可。
这是一个SSCCE,只是复制'n'paste'n'run它:
<!doctype html>
<html lang="en">
<head>
<title>SO question 2604530</title>
</head>
<body>
<form action="http://stackoverflow.com/questions/2604530/answer/submit" method="post">
<textarea name="post-text"></textarea>
<input type="submit" value="Post Your Answer">
</form>
</body>
</html>
您将看到Stackoverflow具有良好的CSRF保护;)
答案 2 :(得分:2)
Javascript是唯一的方法(自动完成)。您无法通过标准POST
方法重定向http
请求。你确定GET
不是一个选项吗?
答案 3 :(得分:0)
使用表单可能是您唯一的选项,因为链接,HTTP重定向和<meta http-equiv="refresh" >
只会导致浏览器使用 GET 方法加载其他网址。
您不一定要使用JavaScript来提交表单。如果某些用户互动可以接受,您可以使用包含一些<input type="hidden">
字段的表单,并让用户按下提交按钮。
您可能还希望确保您重定向到的页面尚未接受GET参数。 某些脚本不分青红皂白地接受GET和POST。