バイタル一致していてもアクセス制御 - 許可 - 起源によって拒否:XmlHttpRequestの原点が完全
クロームバージョン23.0.1271.64 のMac OS X 10.8.2
状況:
を私は持っていますhttps://api.myapi.com/に公開されているWebサービス JavaScriptアプリケーションとこのAPIとの対話を許可したいと思います。 CORSは、明らかに最良のフィット感(jsonpと友人はひどい、ひどいハックである)のように感じます。私は、プリフライトリクエストが送信されている私の開発者ツールで見ることができる
:
Request URL: https://api.myapi.com/someapi
Request Method: OPTIONS
Status Code: 200 OK
Request Headers
Accept: */*
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-US,en;q=0.8
Access-Control-Request-Headers: origin, authorization, accept
Access-Control-Request-Method: GET
Connection: keep-alive
Host: api.myapi.com
Origin: http://prototypes.mycompany.com
Referer: http://prototypes.mycompany.com/somepage.html
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_2) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.64 Safari/537.11
Response Headers
Access-Control-Allow-Headers: Accept,Authorization,Content-Length,Content-Type,Cookie
Access-Control-Allow-Methods: GET,POST,PUT,DELETE,HEAD,OPTIONS
Access-Control-Allow-Origin: http://prototypes.mycompany.com
Access-Control-Allow-Credentials: true
Connection: close
これは特に、応答Access-Control-Allow-Origin
ヘッダを正確に要求Origin
ヘッダーを一致させるように思われる、非常に良い感じです。
直後に、実際の要求が試行されます。
Request URL: https://api.myapi.com/someapi
Request Headers
Accept: application/json, text/javascript, */*; q=0.01
Authorization: <custom authentication scheme, removed>
Origin: http://prototypes.mycompany.com
Referer: http://prototypes.mycompany.com/somepage.html
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_2) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.64 Safari/537.11
それは、その後、「キャンセル」として表示され、次のエラーが放出されます。
のXMLHttpRequestがhttps://api.myapi.com/someapiをロードすることはできません。 Origin http://prototypes.mycompany.comは、Access-Control-Allow-Originによって許可されていません。
私は元来許可された起源として*
で開始しましたが、これはまったく同じ問題で失敗します。
私は、Mobile Safari for iOS 5とFirefoxでこの問題を再現しました。 Firefoxでは、この動作はさらに混乱します。 サーバは200 OKと応答し、次に6〜7KBのデータを返します(これは私の予想どおりです)。クライアント側のログには、200 OKと〜300バイトのデータがあり(応答ヘッダーがなく、応答がない...)、「エラー」ハンドラーがトリガーされます。
私には何が欠けていますか?
質問を投稿して以来、私は 'Access-Control-Allow-Credentials'を追加しましたが効果はありません。私は 'Origin'を追加しますが、これは問題ではないと思います - エラーメッセージが無効なヘッダーが指定されたことを報告しませんか? –