brower-same-origin-policy-and-cross-origin-http-request
[toc]
同源策略
是一種約定橙凳,他是瀏覽器最核心也是最基本的安全功能。
兩個頁面擁有相同的協(xié)議、端口、和主機那么這兩個頁面就屬于同源,當然了IE有例外
- 兩個互相之間高度互信的域名,如公司域名(corporate domains),不遵守同源策略的限制
- 端口:IE未將端口號加入到同源策略的組成部分嫌松。
在同源策略中有一個例外,腳本可以設置 document.domain
的值為當前域的一個后綴奕污,如果這樣做的話萎羔,短的域將作為后續(xù)同源檢測的依據(jù)。例如碳默,假設在 http://store.company.com/dir/other.html
中的一個腳本執(zhí)行了下列語句:
document.domain = "company.com";
這條語句執(zhí)行之后贾陷,頁面將會成功地通過對 http://company.com/dir/page.html
的同源檢測。
使用document.domain是讓子域訪問其父域嘱根,需要同時將子域和父域的document.domain設置為相同的值髓废。必須要這么做,即使是簡單的將父域設置為其原來的值该抒。沒有這么做的話可能導致授權錯誤慌洪。
跨域內嵌的資源
- script
- link
- img
- video和audio
- object,embed凑保,applet
- @font-face
- frame和iframe
實現(xiàn)跨域訪問
使用CORS來實現(xiàn)跨域訪問
- 簡單請求冈爹,只需要設置
Access-Control-Allow-Origin: *
- 預請求
- 附帶憑證信息的請求
xml.withCredentials = true;
如果服務器端的響應中,如果沒有返回Access-Control-Allow-Credentials: true
的響應頭愉适,那么瀏覽器將不會把響應結果傳遞給發(fā)出請求的腳步程序犯助,以保證信息的安
使用跨域內嵌資源實現(xiàn)
- JSONP
- iframe
- window.name
- document.domain
- location.hash
- window.postMessage
HTTP請求頭
Origin
Access-Control-Request-Method
Access-Control-Request-Headers
HTTP響應頭
Access-Control-Allow-Origin
Access-Control-Expose-Headers
-
Access-Control-Max-Age
預請求的結果有效期是多久 Access-Control-Allow-Credentials
Access-Control-Allow-Methods
Access-Control-Allow-Headers
跨域腳本API和跨域數(shù)據(jù)存儲訪問
-
iframe.contentWindow
,window.parent
,window.open
,window.opener
允許文檔之間相互引用癣漆,當兩個文檔的源不同時维咸,這些引用方式將受到影響』菟可使用window.postMessage
作為替代方案癌蓖。 -
localStorage
和indexedDB
每個源擁有單獨空間,不能跨域做讀寫操作婚肆。 -
window.name
屬性可以用來臨時存儲數(shù)據(jù)租副,支持跨域訪問。 -
Cookies
使用不同的源定義方式较性。一個頁面可以為本域和任何父域設置cookie用僧,只要是父域不是公共后綴(public suffix)即可结胀。Firefox和Chrome使用Public Suffix List決定一個域是否是一個公共后綴(public suffix)。不管使用哪個協(xié)議(HTTP/HTTPS)或端口號责循,瀏覽器都允許給定的域以及其任何子域名(sub-domains)來訪問cookie糟港。設置cookie時,你可以使用Domain院仿,Path秸抚,Secure,和Http-Only標記來限定其訪問性歹垫。讀取cookie時剥汤,不會知曉它的出處。盡管使用安全的https連接排惨,任何可見的cookie都是使用不安全的連接設置的吭敢。