本当に奇妙です。
認証トークンを取得するために、WebAPI2(OWINベース)にCORS要求を作成しようとしました。
常に1回おきに失敗します。最初のリクエストは失敗しますが、2番目のリクエストは通過します。そして、3番目は失敗しますが、4番目は通過します。
なぜ半分の時間で機能していたのか理解できません。
ブラウザのリクエスト(クロム)を確認します。
失敗したものは常にOPTIONSメソッドで処理されます。通過したものは常にPOSTで送信されます。
しかし、私は常に「Content-Type」というヘッダーを持つpostメソッドを使用します:「application / x-www-form-urlencoded」
質問は、Chrome / fire foxがプリフライトリクエストを送信するのに、なぜ送信しないのかということです。
ところで、IEではまったく問題なく動作します。
回答:
回答№1は1ChromeとFireFoxの両方が使用していることは正しいプリフライトOPTIONSリクエスト。したがって、POSTを実行する前に、Chrome / FireFoxはOPTIONS動詞とともにリクエストを送信します。クロスドメインリクエストの送信が許可されていることをブラウザに通知するサーバーからの応答を受信しない場合、エラーが発生し、後続のPOSTは送信されません。
web.configでOPTIONSを有効にする必要があります(または、この記事にリストされているアプローチのいずれかを使用します)。 http://www.asp.net/web-api/overview/security/enabling-cross-origin-requests-in-web-api
web.configの場合:
<httpProtocol>
<customHeaders>
<add name="Access-Control-Allow-Origin" value="*" />
<add name="Access-Control-Allow-Methods" value="GET, POST, OPTIONS,PUT"/>
<add name="Access-Control-Allow-Headers" value="Content-Type, Accept"/>
</customHeaders>
IEはCORS標準の採用に時間がかかったため、IEがOPTIONSを有効にせずに正常に機能している理由です。