Brower-same-origin-policy-and-cross-origin-http-request

brower-same-origin-policy-and-cross-origin-http-request

[toc]

同源策略

是一種約定,他是瀏覽器最核心也是最基本的安全功能。

兩個頁面擁有相同的協(xié)議、端口、和主機那么這兩個頁面就屬于同源,當然了IE有例外

  1. 兩個互相之間高度互信的域名,如公司域名(corporate domains),不遵守同源策略的限制
  2. 端口:IE未將端口號加入到同源策略的組成部分。

在同源策略中有一個例外,腳本可以設(shè)置 document.domain 的值為當前域的一個后綴,如果這樣做的話,短的域?qū)⒆鳛楹罄m(xù)同源檢測的依據(jù)。例如,假設(shè)在 http://store.company.com/dir/other.html 中的一個腳本執(zhí)行了下列語句:

document.domain = "company.com";

這條語句執(zhí)行之后,頁面將會成功地通過對 http://company.com/dir/page.html 的同源檢測。

使用document.domain是讓子域訪問其父域,需要同時將子域和父域的document.domain設(shè)置為相同的值。必須要這么做,即使是簡單的將父域設(shè)置為其原來的值。沒有這么做的話可能導致授權(quán)錯誤。

跨域內(nèi)嵌的資源

  1. script
  2. link
  3. img
  4. video和audio
  5. object,embed,applet
  6. @font-face
  7. frame和iframe

實現(xiàn)跨域訪問

使用CORS來實現(xiàn)跨域訪問

  1. 簡單請求,只需要設(shè)置 Access-Control-Allow-Origin: *
  2. 預請求
  3. 附帶憑證信息的請求xml.withCredentials = true;如果服務器端的響應中,如果沒有返回Access-Control-Allow-Credentials: true的響應頭,那么瀏覽器將不會把響應結(jié)果傳遞給發(fā)出請求的腳步程序,以保證信息的安

使用跨域內(nèi)嵌資源實現(xiàn)

  1. JSONP
  2. iframe
  3. window.name
  4. document.domain
  5. location.hash
  6. window.postMessage

參考資料

HTTP請求頭

  1. Origin
  2. Access-Control-Request-Method
  3. Access-Control-Request-Headers

HTTP響應頭

  1. Access-Control-Allow-Origin
  2. Access-Control-Expose-Headers
  3. Access-Control-Max-Age 預請求的結(jié)果有效期是多久
  4. Access-Control-Allow-Credentials
  5. Access-Control-Allow-Methods
  6. Access-Control-Allow-Headers

跨域腳本API和跨域數(shù)據(jù)存儲訪問

  1. iframe.contentWindow, window.parent, window.open, window.opener 允許文檔之間相互引用,當兩個文檔的源不同時,這些引用方式將受到影響。可使用 window.postMessage 作為替代方案。
  2. localStorageindexedDB 每個源擁有單獨空間,不能跨域做讀寫操作。
  3. window.name 屬性可以用來臨時存儲數(shù)據(jù),支持跨域訪問。
  4. Cookies使用不同的源定義方式。一個頁面可以為本域和任何父域設(shè)置cookie,只要是父域不是公共后綴(public suffix)即可。Firefox和Chrome使用Public Suffix List決定一個域是否是一個公共后綴(public suffix)。不管使用哪個協(xié)議(HTTP/HTTPS)或端口號,瀏覽器都允許給定的域以及其任何子域名(sub-domains)來訪問cookie。設(shè)置cookie時,你可以使用Domain,Path,Secure,和Http-Only標記來限定其訪問性。讀取cookie時,不會知曉它的出處。盡管使用安全的https連接,任何可見的cookie都是使用不安全的連接設(shè)置的。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容