私は最近、すべてのPOSTリクエストで偽造防止トークンをチェックするために取り組んでいるサイトを更新しました。私は反偽造トークンをチェックするためにプレフィルターを入れているAJAXリクエストの場合とヘッダに追加CORSプリフライトでPOSTを行うAjax anti-forgery OPTIONSリクエスト(302リダイレクト)
$.ajaxPrefilter(function (options, localOptions, jqXHR) {
if (options.type == "POST") {
var token = GetAntiForgeryToken();
jqXHR.setRequestHeader(token.name, token.value);
}
});
別々にデータを送信するためにCORSを使用して管理者としてログインしたときに、サイトも管理ツールを持っています管理サイト。これらのツールの1つは、AJAX投稿要求です。ヘッダーが要求に追加され、正しく動作します。
もう1つのツールは、ダイアログに表示されるフォームを返すGETリクエストです。これは正常に動作します。しかし、フォームが提出されると、プリフライトOPTIONS要求は302で満たされ、「プリフライトの応答は無効です(リダイレクト)」というエラーが発生します。
ajaxPrefilterを削除すると、投稿リクエストはしません。プレフィルタをオンにすると、ストレートポストリクエストは機能しますが、フォームポストは機能しません。私はかなり失われています。偽装防止ヘッダーは、Access-Control-Allow-Headersで許可されています。両方の要求は、次のとおりです。この1つは302
OPTIONS http://localhost:64789/Example2/Example2/ HTTP/1.1
Host: localhost:64789
Connection: keep-alive
Access-Control-Request-Method: POST
Origin: http://localhost:64947
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 Safari/537.36
Access-Control-Request-Headers: __requestverificationtoken, accept, content-type
Accept: */*
Referer: http://localhost:64947/
Accept-Encoding: gzip, deflate, sdch
Accept-Language: en-GB,en-US;q=0.8,en;q=0.6
を返し
OPTIONS http://localhost:64789/Example/Example/?_=1464356730712 HTTP/1.1
Host: localhost:64789
Connection: keep-alive
Access-Control-Request-Method: POST
Origin: http://localhost:64947
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 Safari/537.36
Access-Control-Request-Headers: __requestverificationtoken, accept, content-type
Accept: */*
Referer: http://localhost:64947/
Accept-Encoding: gzip, deflate, sdch
Accept-Language: en-GB,en-US;q=0.8,en;q=0.6
この1つは任意の助けが本当に有用であろう200
を返します。
あなたの質問は簡単ではありません。一般的で有用な部品のみを提供してください... – ReZa