www.dextsolution.com
DEXTUPLOAD
X5
제품설명 > Cross Origin Resource Sharing(CORS)

# Cross-Origin Resource Sharing(CORS)

DEXTUploadX5製品は純粋にウェブ技術を使ってファイルをアップロードする機能を提供します。 ファイルをアップロードするためにXmlHttpRequest APIを使用するAjax技術を使用します。 しかし、Ajax技術を使用してGETまたはPOSTリクエストを行うと、ドメインが異なる場合、リクエストの送信に失敗します。 これはセイム・オリジン・ポリシーと呼ばれるポリシーによるもので、Ajaxリクエストは、現在ブラウザで表示しているページをダウンロードしたオリジンからのみ行うことができるというものです。 つまり、製品からファイルをアップロードしようとしても、基本的に異なるオリジンにアップロードすることは不可能です。

CORSはCross-Origin Resource Sharing頭文字を取って作った略語としてW3Cで定義されたインターネット用語である。

"User agents commonly apply same-origin restrictions to network requests. These restrictions prevent a client-side Web application running from one origin from obtaining data retrieved from another origin, and also limit unsafe HTTP requests that can be automatically launched toward destinations that differ from the running application's origin."

Originとスキーマ、ドメイン、サブドメイン、ポートが他のものも、他のoriginとみなす。CORSは、W3Cでも、他のOriginの間の要求を送受信する方法を標準化したものである。要求を受け取ったサーバの立場から許諾をするAjax通信を行うことができるよう、応答ヘッダーを構成することがCORSある。リクエストが来たとき、サーバは、Access-Control-Allow-Originレスポンスヘッダを設定して、クライアント送る。クライアントは、サーバから受信したAccess-Control-Allow-Originレスポンスヘッダを解析して、要求が許可された場合は、次の通信を行い、そうでない場合、要求が中断される。

次の画像は、CORSが適用されていない場合、コンソール（Firefox）に記録されたエラー情報である。

localhostにサービスするページから別のサービスにアップロードするとき、アップロードが失敗し、コンソールにエラー内容が記録された。

フィドラープログラムを使用してサーバーとやりとりする会話を見ると、Originが異なる場合、すぐPOSTでファイルのアップロードを開始するのではなく、OPTIONS要求をする。（preflight）

サーバーは、CORSが設定されていませんので、Access-Control-Allow-Originレスポンスヘッダを受けない。Access-Control-Allow-Originレスポンスヘッダを受け取っていないAjax APIは、POSTリクエストを送信できません失敗してしまう。

サーバーにCORSが適用した後は、ファイルのアップロードが成功し、次のような会話を確認することができる。

「Access-Control-Allow-Origin：*」は、クライアントの要求を許可することを意味する。これはCross-Origin要求を承諾したものなのでAjax APIは直接アップロード作業（POST）を開始することになる。

CORSはCORSをサポートするブラウザが必要で、応答ヘッダーの設定は、完全にサーバーやサーバーのコードで設定する必要が部分なのでDEXTUploadX5製品レベルでCORSを設定する方法はない。

CORSを設定すると、セキュリティに脆弱性があるので、Same-Origin Policyポリシーをそのまま使用することをお勧めします。

DEXTUploadX5は、ドメインのライセンスを使用して、サブライセンスに基づいてホストが他の複数のサービスを許可している。しかし、CORS未設定により、ファイルがアップロード、またはダウンロードしていない現象が発生するのは、ライセンス認証に影響を受けるものではない。したがって、多数のサービス（ホストが他の）を使用するためのライセンスを購入した場合でも、各サービスごとにCORS設定は、直接くれるならない。

enable-corsサイトはCORSを設定するいくつかの方法が記載されている。