瀏覽器同源策略

網站開發使用或寫Ajax 一定會遇到一個問題 同源策略

但為什麼和怎麼繞過他呢?  今天來和大家分享

 

1. 同源定義

同源政策限制了程式碼和不同網域資源間的互動。

  1. 協議相同
  2. 埠號(Port)相同
  3. 主機位置(URL)相同

 

下表提供了一些例子展示那些來源和http://store.company.com/dir/page.html屬於同源:

URL Outcome Reason
http://store.company.com/dir2/other.html 同源  
http://store.company.com/dir/inner/another.html 同源  
https://store.company.com/secure.html 不同源 協定不同
http://store.company.com:81/dir/etc.html 不同源 埠號不同
http://news.company.com/dir/other.html 不同源 主機位置不同

表格參考來源

 

2. 目的:

瀏覽起同源政策的目的,是為了保證用戶信息的安全,防止惡意的網站竊取數據。

假如A網站是一間銀行,登入後一些資訊存在clinet端Cookie去瀏覽其他網站,如果沒有同源策略其他網站可以讀取A網站的cookie或其他資訊,這是很不安全的信息就會洩漏。更可怕的是,Cookie往往用來保存用戶的登錄狀態,如果用戶沒有退出登錄,其他網站就可以冒充用戶,為所欲為。因為瀏覽器同時還規定,提交表單不受同源政策的限制。

 

3.非同源限制

如果非同源,行為受到限制。

  1. Cookie,LocalStorage和IndexDB無法讀取。
  2. 不能發送AJAX請求。

最常遇到的同源問題大部分是Ajax被封阻

 

 

同源政策規定,AJAX請求只能發給同源的網址,否則就報錯。

 

有三種方法迴避這個限制。

  1. JSONP
  2. WebSocket
  3. CORS

 

 

 

 

 

 


如果本文對您幫助很大,可街口支付斗內鼓勵石頭^^