JavaScriptの同源戦略と「CORS」クロスドメイン方式
6324 ワード
記事の概要同ソースポリシー 同源は何ですか? どうやってソースにまたがり、シーンの応用ができますか? ソースの変更 ソースネットワークをまたいで にアクセスする.ソース・スクリプトAPIをまたいで にアクセスする.トランスソースデータストアアクセス CORSを理解する CORSとは何ですか? CORS機能概要 CORS Cookie について CORSの簡単な要求 CORS予備検査要求は何ですか? 他の は を参照してください.
ソースポリシー
同源は何ですか
ウェブブラウザでは、ソースポリシーは、同じソースからローディングされたドキュメントまたはスクリプトが、他のソースからのリソースとどのように相互作用するかを制限する.これは潜在的な悪意のある文書を隔離するための重要な安全機構である.
二つのページの場合.プロトコル .ポート(指定があれば) .ドメイン名 3つのページは同じです.2つのページは同じソースを持っています.
URL
結果
原因
異なるプロトコル(httpsとhttp)
異なるポート(81と80)
異なるドメイン名(newsとstore)
異なるドメイン名(storeは単独のドメインです.)
どのようにソースにまたがりますか?
以下は4種類の出会いができるクロスソースです.
ソースの変更
ページはいくつかの制限のために彼のソースを変更することがあります.
シーン
アクセス
同ソース戦略は異なるソース間の相互作用を制御した.
シーンはブラウザから発信されたクロスドメインHTTP要求(これはみんなが一番多く接触している)
ソース別スクリプトAPIアクセス
JavascriptのAPIでは、ドキュメント間の直接的な相互参照が可能です.しかし、二つのドキュメントのソースが異なる場合、いくつかの参照方法はAPIオブジェクトへのアクセスに制限を追加します.
シーン使用
クロスソースデータストアアクセス
ブラウザに されているデータは、 えば、local StrageとIndexedDBのようにソースで されます. ソースは、 のソースに するデータを
シーンnull
CORSを する
CORSは ですか
MDNのウェブサイトは、この2つの を する.
CORS(Cross-Origin Resource Sharing、ドメイン リソース )は、 のトランスポートHTTPヘッダからなるシステムであり、これらのHTTPヘッダは、ブラウザがフロントエンドJavaScriptコードを するかどうかを する.CORSは、ウェブサーバにこのような を え、すなわちサーバは、ドメイン がそれらのリソースにアクセスできるように することができる.
ドメインをまたぐリソース (CORS)は、 のソースサーバから されたリソースへのアクセスを されるウェブアプリケーションを させるために のHTTPヘッダを するメカニズムである.リソースが、そのリソース が するサーバとは なるドメイン、プロトコルまたはポートからリソースを すると、リソースは、ドメインをまたぐHTTP を する.
は つの は じです.CORSはサービス ( に うバックエンド)に を え、 でどのブラウザをコントロールするかの はそのリソースにアクセスでき、ドメインをまたぐ を する.
:
HTTPヘッダ
CORS
TLDR
サーバーデータに があるかもしれないHTTP ( にGET のHTTP 、またはいくつかのMIMEタイプのPOST を み わせる)に して、ブラウザはまずOPTTIONS を して を しなければなりません. って、サービス がクロスドメイン を するかどうかが かります.サーバーが を した 、 のHTTP を します. の において、サーバ は、アイデンティティ (CookiesとHTTP データを む)を する があるかどうかをクライアントに しても い.
な ではない は、 に を ります. に の を ります.
:node-expressフレームの で、サーバー のクロスドメイン
CORS はデフォルトではCookieとHTTP を しません.cookieを うことを りたいなら3 に してください. Client に されています. Serive に されています. Serive
の はクッキーを りたいです.
で なお いをしましたが、それこそ なお いですか?CORSの をトリガしない 、このような を「 な 」と びます.
は な です. HTTP Methodからなると、 のような の しかないです. GET POST HEAD HTTP Headers Acctept Acceept Language Connect-Language Last-Event-ID Conteen-Typeは、 のタイプ(フォーム )のみを んでいます. appication/x-wn-form-urlencoded multiipad/form-data text/playn : つの を に たす にのみ、 な です.そうでなければ、 な です.
CORS は ですか?
にこのように くの を いましたが、 を ったら ですか?もし がclient で を ったら、 えば:
server のHTTPヘッダ
その
を えてこれにとどまらない
に べた
のネット
MDN web docs CORS
ソースポリシー
同源は何ですか
ウェブブラウザでは、ソースポリシーは、同じソースからローディングされたドキュメントまたはスクリプトが、他のソースからのリソースとどのように相互作用するかを制限する.これは潜在的な悪意のある文書を隔離するための重要な安全機構である.
二つのページの場合
http://store.example.com/dir/page.html
の同ソース検出の例を示す.URL
結果
原因
http://store.example.com/index.html
成功http://store.example.com/dir/another.html
成功https://store.example.com/index.html
失敗異なるプロトコル(httpsとhttp)
http://store.example.com:81/index.html
失敗異なるポート(81と80)
http://news.example.com/index.html
失敗異なるドメイン名(newsとstore)
http://example.com/index.html
失敗異なるドメイン名(storeは単独のドメインです.)
どのようにソースにまたがりますか?
以下は4種類の出会いができるクロスソースです.
ソースの変更
ページはいくつかの制限のために彼のソースを変更することがあります.
document.domain
の値は、現在のドメインまたはその現在のドメインの親ドメインである.シーン
http://store.example.com/dir/page.html
ドキュメント内のスクリプトの一つは、以下の文を実行します.document.domain = "company.com"
は、同ソースによる検出が可能である.アクセス
同ソース戦略は異なるソース間の相互作用を制御した.
CORS
を使用して、ソースをまたぐアクセスを許可する.シーンはブラウザから発信されたクロスドメインHTTP要求(これはみんなが一番多く接触している)
ソース別スクリプトAPIアクセス
JavascriptのAPIでは、ドキュメント間の直接的な相互参照が可能です.しかし、二つのドキュメントのソースが異なる場合、いくつかの参照方法はAPIオブジェクトへのアクセスに制限を追加します.
window.postMessage
が使用できます.シーン使用
れ の 、 ページの クロスソースデータストアアクセス
ブラウザに されているデータは、 えば、local StrageとIndexedDBのようにソースで されます. ソースは、 のソースに するデータを
によって する の を している.シーンnull
CORSを する
CORSは ですか
MDNのウェブサイトは、この2つの を する.
CORS(Cross-Origin Resource Sharing、ドメイン リソース )は、 のトランスポートHTTPヘッダからなるシステムであり、これらのHTTPヘッダは、ブラウザがフロントエンドJavaScriptコードを するかどうかを する.CORSは、ウェブサーバにこのような を え、すなわちサーバは、ドメイン がそれらのリソースにアクセスできるように することができる.
ドメインをまたぐリソース (CORS)は、 のソースサーバから されたリソースへのアクセスを されるウェブアプリケーションを させるために のHTTPヘッダを するメカニズムである.リソースが、そのリソース が するサーバとは なるドメイン、プロトコルまたはポートからリソースを すると、リソースは、ドメインをまたぐHTTP を する.
は つの は じです.CORSはサービス ( に うバックエンド)に を え、 でどのブラウザをコントロールするかの はそのリソースにアクセスでき、ドメインをまたぐ を する.
:
HTTPヘッダ
CORS
されたリソースがどの に されるかを す.Access-Control-Allow-Origin
された がtrueであると された 、 は りますか?Access-Control-Allow-Credentials
に する では、 の にどのHTTPヘッダが されてもよいかを す.Access-Control-Allow-Headers
に する のうち、どのHTTP が のリソースにアクセスできるかを します.Access-Control-Allow-Methods
どのHTTPヘッダの が に されますか?Access-Control-Expose-Headers
め された がどれぐらいキャッシュされますか?Access-Control-Max-Age
の を するために、サーバの な がこれらのHTTPヘッダを することを らせる.Access-Control-Request-Headers
を するために、どのHTTP を するかをサーバに する.Access-Control-Request-Method
リソースの がどの から されるかを す.CORS
TLDR
サーバーデータに があるかもしれないHTTP ( にGET のHTTP 、またはいくつかのMIMEタイプのPOST を み わせる)に して、ブラウザはまずOPTTIONS を して を しなければなりません. って、サービス がクロスドメイン を するかどうかが かります.サーバーが を した 、 のHTTP を します. の において、サーバ は、アイデンティティ (CookiesとHTTP データを む)を する があるかどうかをクライアントに しても い.
な ではない は、 に を ります. に の を ります.
:node-expressフレームの で、サーバー のクロスドメイン
app.all('*', function (req, res, next) {
res.header('Access-Control-Allow-Origin', '*');
res.header('Access-Control-Allow-Headers', 'Content-Type');
res.header('Access-Control-Allow-Methods', '*');
next();
});
CORS CookieについてCORS はデフォルトではCookieとHTTP を しません.cookieを うことを りたいなら3 に してください.
Origin
にnew XMLHttpRequest()
がwithCredentials
true
HTTP
はAccess-Control-Allow-Credentials
true
HTTP
は に することができません. されたページと するドメイン を しなければなりません.の はクッキーを りたいです.
// service
`res.header('Access-Control-Allow-Credentials', true);`
`res.header('Access-Control-Allow-Origin', ' ');`
// client
Jquery `ajax()` `xhrFields: {withCredentials: true}`
Axios `axios.defaults.withCredentials = true`
CORSの な で なお いをしましたが、それこそ なお いですか?CORSの をトリガしない 、このような を「 な 」と びます.
は な です.
CORS は ですか?
にこのように くの を いましたが、 を ったら ですか?もし がclient で を ったら、 えば:
//
var invocation = new XMLHttpRequest();
invocation.setRequestHeader('X-EXAMPLE', 'xixihaha');
invocation.setRequestHeader('Content-Type', 'application/xml');
// axios
axios.defaults.headers['X-EXAMPLE'] = 'xixihaha';
axios.defaults.headers['Content-Type'] = 'application/xml';
POST は、カスタム ヘッダフィールド(X−EXAMPLE:xixiha)を むXMLドキュメントを する.また、この のContect-Typeは、appliation/xmlである.したがって、この は、まず「 」を する がある.server のHTTPヘッダ
Access-Control-Allow-Origin: ' '
Access-Control-Allow-Methods: POST, GET, OPTIONS //
Access-Control-Allow-Headers: X-PINGOTHER, Content-Type //
Access-Control-Max-Age: 86400
な と な ではなく、ブラウザの がサーバによって された 、 の を し、 け れられない は を する.その
を えてこれにとどまらない
Access-Control-Allow-Origin
scriptタグを に し、scriptのsrcを して、 じソースポリシーに されずにドメインを えてデータを する.function addScriptTag() {
var script = document.createElement("script");
script.src = "http://foo.example?callback=handleResponse";
document.body.appendChild(script);
}
function handleResponse() {
console.log(' ');
};
のクロスドメイン は すぎる をしない.に べた
JSONP
postMessage()
、すなわちサーバエージェントを する.nginx
のネット
MDN web docs CORS