Skip to content

Latest commit

 

History

History
63 lines (41 loc) · 3.46 KB

sop.md

File metadata and controls

63 lines (41 loc) · 3.46 KB

Same Origin Policy

Same Origin Policy とはある文書または Script が他の Protocol、Port、Host にある Resource を使用することを制限する Policy。

下記にてその例を述べる。

http://website.com/ex/ex.html
Resource request 成功
http://website.com/ex/
http://website.com/ex1/
http://website.com:81/ex/ex.html ❌ Port の違い
http://wwebsite.com/ex/ ❌ Host の違い
https://website.com/ex/ex.html ❌ Protocol の違い

上のように Host、Port、Protocol、いずれ一つも違う場合 Same Origin Policy の対象となり Request に失敗する。


解決方法

document.domain

臨機応変な方法として Domain の設定を変えることで SOP を避けることができる。現在 Domain がhttp://store.company.com/index.html だとすると、

document.domain = 'company.com'

上のようにして http://company.com/index.html に Request を送ることができる。ただし、該当 Script が複数の HTML に関連する場合は全部上のように設定すること、Firefox は支援してないこと、そしてこれは Server―Client の通信ではなく、Client 上で Origin が違う Frame に対して使用される方法である。 したがって、Server とはこの方法で通信することはできない。

CORS(Cross-Origin Resource Sharing)

HTTP Header を使って Client、Server にお互いの存在を認知させ、他の Origin の Resource を使うことを許可する方法。Client が Server に HTTP Request する時、HTTP Header の Origin Property に自動的に値が与えられる。

Origin: http://company.com

上の Domain から他の Origin の Resource を使うために AJAX Request をすると SOP により失敗する。 これを解決するために Server の HTTP Response Header に下記のように Request を許可する Domain を作成する。

Access-Control-Allow-Origin: http://company.com

Proxy Server

Proxy Server は Client と Server の間で Data の交換を手伝う Server である。Server 側のAccess-Control-Allow-OriginProperty を修正できない時に有効な方法である。Proxy Server が Server に Request し、Response を保管したのを Client がもらう方法である。

Apache や Nginx のような Server で Proxy Server 機能を活性化することができるし、CRA(Create-React-App)の場合 package.jsonproxy 値を使い Proxy Server 機能を使うことができる。ただし、これはもう一個の Server を置くことになるため、Request の速度が落ちる短所がある。


Reference