POSTリクエストでユーザーを外部サイトにリダイレクトする必要があります。
私が考え出した唯一のオプションは、JavaScriptを介してフォームを送信することです。
何か案は?
それが何を意味するのかはっきりしないので、いくつかのシナリオを考えてみましょう:
ユーザーは自分以外のサーバーにPOSTフォームを送信する必要があります
簡単です。フォームアクションとしてターゲットを指定するだけです。
<form action="http://someotherserver.com" method="post">
POST submitが成功した後、ユーザーをリダイレクトする必要があります
簡単で、通常どおりPOSTデータを受け入れて処理し、302
または303
リダイレクトヘッダーで応答します。
ユーザーはサーバーにデータをPOST送信し、検証後、そのデータを別のサーバーにPOST送信する必要があります
少しトリッキーですが、3つのオプション:
307
リダイレクトで応答します。これは、ユーザーが別のアドレスで同じリクエストを試行する必要があることを意味します。理論的には、ブラウザが同じデータを別のサーバーにPOST送信する必要があることを意味します。これがどれほどサポートされているかはよくわかりませんが、HTTP1.1を理解しているブラウザであれば実行できるはずです。 AFAIAは、実際にはあまり使用されていません。すべてのHTTPリダイレクトオプションのリストについては、ここを参照してください。 http://en.wikipedia.org/wiki/Http_status_codes#3xx_Redirection
HTMLフォームのアクションURLを特定の外部サイトに設定するだけです。
これが [〜#〜] sscce [〜#〜] です。コピーして貼り付けて実行するだけです。
<!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保護を備えていることがわかります;)
JavaScriptが唯一の方法です(自動的に実行するため)。標準のPOST
メソッドを介してhttp
リクエストをリダイレクトすることはできません。 GET
がここでのオプションではないことを確信していますか?
リンク、HTTPリダイレクト、および<meta http-equiv="refresh" >
としてフォームを使用することがおそらく唯一のオプションです。ブラウザは[〜#〜] get [〜#〜]メソッドを使用して別のURLをロードするだけです。
ただし、フォームを送信するために必ずしもJavaScriptを使用する必要はありません。何らかのユーザー操作が許容できる場合は、いくつかの<input type="hidden">
フィールドを含むフォームを使用して、ユーザーが送信ボタンを押すようにできます。
また、リダイレクト先のページがGETパラメータを受け入れていないことを確認することもできます。 一部のスクリプト GETとPOSTの両方を無差別に受け入れます。