- にデプロイされているとしましょう
portal.example.com
。 - これには、
<script>
から提供されるソースをロードするタグが含まれassets.example.com
ます。 - その JavaScript ファイルは、API に対して HTTP リクエストを作成します。
admin.example.com
この API リクエストは、CORS プリフライトが失敗したためにエラーになっています。
Failed to load http://admin.example.com/v0/user/navigation: No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://portal.example.com' is therefore not allowed access.
実際のOPTIONS
リクエストは以下の通り
OPTIONS /v0/user/navigation HTTP/1.1
Host: admin.example.com
Connection: keep-alive
Access-Control-Request-Method: GET
Origin: http://portal.example.com
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.84 Safari/537.36
Access-Control-Request-Headers: authorization,x-correlation-id,x-user-domain
Accept: */*
Accept-Encoding: gzip, deflate
Accept-Language: en-US,en;q=0.9,en-GB;q=0.8
実際のOPTIONS
対応は以下の通り
HTTP/1.1 200
Allow: GET
Access-Control-Allow-Headers: authorization,x-correlation-id,x-user-domain
Access-Control-Allow-Methods: GET
Access-Control-Allow-Origin: http://portal.example.com
Vary: Origin
Content-Length: 0
Date: Tue, 20 Feb 2018 12:12:19 GMT
Set-Cookie: 97d2c19dadc3933a73dce9bec0748df1=5a15895c5e0f5b526c177132cb4aa666; path=/; HttpOnly
Cache-control: private
X-RBT-SCAR: 10.127.48.7:777511903:1000
問題は、リクエストが実際にリクエストを行っているスクリプトから送信されているためだと思いますassets.example.com
。Access-Control-Allow-Origin: http://assets.example.com
だから私はOPTIONS
応答に戻る必要があります。ただし、 W3Cのアドバイスに従いました。
Access-Control-Allow-Origin ヘッダーは、応答で Origin 要求ヘッダーの値、「*」、または「null」を返すことによって、リソースを共有できるかどうかを示します。
それで、私はCORSを誤解していますか、それともブラウザOrigin
はリクエストを行うスクリプトのURLではなく、メインの実行URLを送信していますか?
更新しました
GET レスポンス
HTTP/1.1 200
X-Correlation-Id: 8978b245-081a-4c4a-b4c9-73f2920ab55c
Content-Type: application/vnd.example+json
Transfer-Encoding: chunked
Date: Tue, 20 Feb 2018 13:22:39 GMT
Set-Cookie: 97d2c19dadc3933a73dce9bec0748df1=dc4e3543c3071d752959e7176c5e4d29; path=/; HttpOnly
Cache-control: private
X-RBT-SCAR: 10.127.48.7:778160108:2000