マイクロソフト系技術情報 Wiki」は、「Open棟梁Project」,「OSSコンソーシアム .NET開発基盤部会」によって運営されています。

目次

概要

クロス ドメイン接続専用に用意された技術。

  • ブラウザとサーバ間で、約束された Request / Response を使って、
    そのドメインからのクロス ドメインの呼び出しを許可するか確認をおこなう。
  • サーバが許可していれば XMLHttpRequest? を使用したクロス ドメインの呼び出しをおこなう。

このように、ブラウザ・サーバの双方が CORS に対応している必要がある(ここが鬼門)。

詳細

使い方

サーバーでポリシ設定

  • フレームワーク次第だが、基本的に、閉じられているので、空ける。

ブラウザのサポートを確認

  • jQueryなど、ブラウザ上のライブラリは基本にCORSをサポートしている。
  • ブラウザによってサポート状況が異なり動作が変わる。
  • 例えば、fetchで以下の様なエラーが出る。
    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は閉じられているので、空ける。
  • 特定サイトのみ許可する制御を加える。
    • 対象:特定GUI(Public Client)にのみアクセスを許可する。
    • 対象外:不特定多数のClientに公開しているWebAPI

ポイント

Preflight request

  • リクエストが受け入れられるかどうかを事前にチェックを行う。
  • ある一定条件のリクエストを投げる際には事前に発生する。
    (代表的なものに、POST かつ application/json の例がある。)
  • その場合、サーバが以下を適切にレスポンスするように構成する必要がある。
#Header説明
1Access-Control-Allow-Method許可されるメソッドの一覧
2Access-Control-Allow-Headers許可されるヘッダの一覧
3Access-Control-Max-Ageプリフライト情報のキャッシュを保持して良い時間

curlでCORS設定を確認

  • 以下のように、curlで任意のOriginヘッダを指定してテストできる。
    ※ 送信するOriginヘッダは、ブラウザでは捏造不可能。
>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

参考

Qiita

IE8, 9

なお、IE8, 9 ではサポート状況が違うため、
ライブラリのプラグイン内で条件分岐しているもよう。


Tags: :プログラミング, :通信技術, :.NET開発, :.NET Core, :ASP.NET, :ASP.NET Web API


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2019-09-06 (金) 16:35:04 (14d)