「マイクロソフト系技術情報 Wiki」は、「Open棟梁Project」,「OSSコンソーシアム .NET開発基盤部会」によって運営されています。
同一オリジンポリシーとも呼ばれる。
CORSは、クロスドメイン、クロスサイト接続専用に用意された技術。
このように、ブラウザ・サーバの双方が CORS に対応している必要がある(ここが鬼門)。
Same-Origin(同一生成元)とも言う。
※(クロスサイトでのCookie送信を制限する)SameSite属性が昨今、熱い。
Access to fetch at 'http://localhost:8888/...' from origin 'http://localhost:3000' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource. If an opaque response serves your needs, set the request's mode to 'no-cors' to fetch the resource with CORS disabled.
CORSプロトコルが理解されているかどうかを確認する CORSリクエスト
# | Header | 説明 |
1 | Access-Control-Allow-Origin | 許可されるオリジンの一覧 |
2 | Access-Control-Allow-Method | 許可されるメソッドの一覧 |
3 | Access-Control-Allow-Headers | 許可されるヘッダの一覧 |
4 | Access-Control-Max-Age | プリフライト情報のキャッシュを保持して良い時間 |
OPTIONS /test HTTP/1.1 Origin: http://site-a.example.com Access-Control-Request-Method: POST Access-Control-Request-Headers: X-Custom-Header, Content-Type
Access-Control-Allow-Origin: http://site-a.example.com Access-Control-Allow-Methods: POST, GET, OPTIONS Access-Control-Allow-Headers: X-Custom-Header, Content-Type Access-Control-Max-Age: 86400
POST /test HTTP/1.1 Content-Type: text/json X-Custom-Header: custom-data
HTTP/1.1 200 OK
>curl -H "Origin: http://example.com" --verbose http://localhost:8888/api/values/get * Trying ::1... * TCP_NODELAY set * Connected to localhost (::1) port 8888 (#0) > GET /api/values/get HTTP/1.1 > Host: localhost:8888 > User-Agent: curl/7.52.1 > Accept: */* > Origin: http://example.com > < HTTP/1.1 200 OK < Transfer-Encoding: chunked < Content-Type: application/json; charset=utf-8 < Server: Microsoft-IIS/10.0 < X-Powered-By: ASP.NET < Date: Thu, 05 Sep 2019 08:54:23 GMT < ["value1","value2"]* Curl_http_done: called premature == 0 * Connection #0 to host localhost left intact
なお、IE8, 9 ではサポート状況が違うため、
ライブラリのプラグイン内で条件分岐しているもよう。
ASP.NET Web API における設定は、下記を参照。
Tags: :プログラミング, :通信技術, :.NET開発, :.NET Core, :ASP.NET, :ASP.NET Web API