mydomain.com
RESTful バックボーン アプリケーションから、 からへの CORS リクエストを実行していmyExtdomain.com
ます。
サーバーにCORSを設定しました。動詞(任意のURL)に次のようmyExtdomain.com
に応答しています:OPTIONS
Access-Control-Allow-Origin: *
Access-Control-Allow-Methods: POST, GET, OPTIONS, PUT, DELETE
Access-Control-Allow-Headers: Content-Type
Status Code: HTTP/1.1 204 No Content
そして、私のAPI呼び出しにmyExtdomain.com
:
Access-Control-Allow-Origin: *
Content-Type: application/json
Status Code: HTTP/1.1 200 OK
私は必死になって、すべての HTTP リクエストに応答しようとしmyExtdomain.com
ました。
Access-Control-Allow-Origin: *
Access-Control-Allow-Methods: POST, GET, OPTIONS, PUT, DELETE
Access-Control-Allow-Headers: Content-Type
Content-Type: application/json
Status Code: HTTP/1.1 200 OK
問題
- Chromeではすべて正常に動作します
- Firefox では、
PUT
リクエストは機能しますが、GET
リクエストは「ちょっと失敗」します...
「ちょっと失敗」の定義
- 返される HTTP ステータス コードは次のとおりです。
200 OK
- しかし、応答は空です (応答本文なし/サイズ 0 KB)
JSON
。 - しかし、なぜか100回に1回、1回の
GET
リクエストでうまくいく
退屈な詳細別名「ヘッダー」
OPTIONS
動詞への応答:
REQUEST HEADERS
-----------------
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:25.0) Gecko/20100101 Firefox/25.0
Origin: http://mydomain.com
Host: www.myExtdomain.com
Connection: keep-alive
Access-Control-Request-Method: PUT
Access-Control-Request-Headers: content-type
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
RESPONSE HEADERS
-----------------
X-Powered-By: ASP.NET
Server: Microsoft-IIS/7.0
Date: Fri, 15 Nov 2013 07:01:57 GMT
Content-Type: text/html
Access-Control-Allow-Origin: *
Access-Control-Allow-Methods: POST, GET, OPTIONS, PUT, DELETE
Access-Control-Allow-Headers: Content-Type
PUT
リクエスト:
REQUEST HEADERS
----------------
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:25.0) Gecko/20100101 Firefox/25.0
Referer: http://mydomain.com/account
Origin: http://mydomain.com
Host: www.myExtdomain.com
Content-Type: application/json; charset=UTF-8
Content-Length: 36
Connection: keep-alive
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Accept: application/json, text/javascript, */*; q=0.01
RESPONSE HEADERS
----------------
X-Powered-By: ASP.NET
Server: Microsoft-IIS/7.0
Date: Fri, 15 Nov 2013 07:01:57 GMT
Content-Type: application/json
Content-Length: 0
Access-Control-Allow-Origin: *
BODY RESPONSE
--------------
_Some_Json_Here_
魔法 のGET
リクエスト:
REQUEST HEADERS
----------------
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:25.0) Gecko/20100101 Firefox/25.0
Referer: http://mydomain.com/somepage
Origin: http://mydomain.com
Host: www.myExtdomain.com
Connection: keep-alive
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Accept: application/json, text/javascript, */*; q=0.01
RESPONSE HEADERS
----------------
Server: Microsoft-IIS/7.0
Last-Modified: Fri, 15 Nov 2013 06:58:18 GMT
Date: Fri, 15 Nov 2013 07:01:57 GMT
Content-Type: application/json
Content-Length: 4041
Connection: keep-alive
RESPONSE BODY
--------------
Empty (0KB), it's supposed to be some JSON, that *SOMETIMES* (1/100) I get.. Magic.
最後に
- ご覧のとおり、マジック
GET
リクエストのレスポンス ヘッダーには、私が設定した CORS ヘッダーさえ含まれていません。myExtdomain.com
- 一方
PUT
、リクエストにはそれらが含まれています.. - 繰り返しますが、Chrome ではすべてが正常に機能し、すべての応答ヘッダーが存在し、
JSON
期待どおりに取得されます。 - 私はCORSの研究 にかなりの時間を費やしました(明らかに十分ではありませんでした)、必要なもの/不要なものを分解し、ランダムなコードをコピー/貼り付けしない
JSONP
GET
リクエストは私にとって代替手段ではありません- すべてのリクエスト (任意の動詞) は、安全でないページから作成されています (からではありません
https://
) - 私は絶望的です..