最近、JSONPとASP.NETMVCを使用してクロスドメインJavaScriptを実行しています。
特定のコントローラーアクションはPOSTリクエストにのみ応答します。これは仕様によるものです。
IE8では、(Fiddler2を介して)応答が正しいことを確認し、JSONPjavascriptとともにHTTP200応答を返します。
Firefox、Safari、Chromeでは、適切なHTTP 200コードとJSONPコンテンツを使用して応答が返されますが、唯一の違いは、JQueryで使用されているXmlHttpRequestオブジェクトがステータスコードを0に設定し、responseTextを空に設定していることです。
もともと、これはCOR HTTPプリフライト(Http Access Control)によるものだと思っていました。これにより、カスタムヘッダーまたはtext / plain以外のコンテンツタイプにより、追加のHTTPリクエスト(OPTIONSを含む)動詞がサーバーに送信されます。Fiddler2で、OPTIONSリクエストがHTTP404で応答されていることがわかります。
WebサーバーはIIS7です(ただし、実稼働WebサーバーはIIS6ボックスになります)。IIS7では、ハンドラーにリストされている標準のOPTIONSVerbHandlerを確認できますが、これが実際に何かを実行しているとは確信していません(実際、OPTIONSVerbHandlerに関するドキュメントはどこにも見つかりません)。
これを回避するために、カスタムヘッダーを設定しないようにJQueryライブラリを変更し、content-typeをapplication/jsonではなくtext/plainに変更すると、Firefoxは最終的にOPTIONSリクエストとプレーンPOSTのバイパスを開始します。
Fiddler2がコンテンツを含む成功したHTTP200応答を示しているにもかかわらず、問題は依然として空の応答(XmlHttpRequestオブジェクトによる)にあります。
何か助けはありますか?