同源策略
同源策略/SOP(Same origin policy)是一種約定郊尝,由Netscape公司1995年引入瀏覽器,它是瀏覽器最核心也最基本的安全功能,如果缺少了同源策略甘有,瀏覽器很容易受到XSS、CSFR等攻擊葡缰。所謂同源是指"協(xié)議+域名+端口"三者相同亏掀,即便兩個不同的域名指向同一個ip地址,也非同源泛释。
同源策略限制以下幾種行為
?Cookie滤愕、LocalStorage 和 IndexDB 無法讀取
?DOM 和 Js對象無法獲得
AJAX 請求不能發(fā)送
跨域解決方案
1、?nginx代理跨域?
2怜校、跨域資源共享(Cross-origin resource sharing-縮寫CORS)
? ??CORS需要瀏覽器和服務(wù)器同時支持间影,對于簡單請求,瀏覽器直接發(fā)出CORS請求茄茁。具體來說魂贬,就是在頭信息之中巩割,增加一個Origin字段。Origin字段用來說明付燥,本次請求來自哪個源(協(xié)議 + 域名 + 端口)宣谈。服務(wù)器根據(jù)這個值,決定是否同意這次請求键科。如果Origin指定的源闻丑,不在許可范圍內(nèi),服務(wù)器會返回一個正常的HTTP回應(yīng)勋颖。瀏覽器發(fā)現(xiàn)嗦嗡,這個回應(yīng)的頭信息沒有包含Access-Control-Allow-Origin字段,就知道出錯了饭玲,從而拋出一個錯誤侥祭。注意,這種錯誤無法通過狀態(tài)碼識別茄厘,因為HTTP回應(yīng)的狀態(tài)碼有可能是200卑硫。如果Origin指定的域名在許可范圍內(nèi),服務(wù)器返回的響應(yīng)蚕断,會多出幾個頭信息字段欢伏。
Access-Control-Allow-Origin????必須,它的值要么是請求時Origin字段的值亿乳,要么是一個*硝拧,表示接受任意域名的請求。
Access-Control-Allow-Methods?可選
Access-Control-Allow-Headers?可選
Access-Control-Allow-Credentials 可選?葛假。它的值是一個布爾值障陶,表示是否允許發(fā)送Cookie。默認情況下聊训,Cookie不包括在CORS請求之中抱究。設(shè)為true,即表示服務(wù)器明確許可带斑,Cookie可以包含在請求中鼓寺,一起發(fā)給服務(wù)器。這個值也只能設(shè)為true勋磕,如果服務(wù)器不要瀏覽器發(fā)送Cookie妈候,刪除該字段即可。
Access-Control-Expose-Headers ?可選
Content-Type ?可選
CORS與JSONP的使用目的相同挂滓,但是比JSONP更強大苦银。
JSONP只支持GET請求,CORS支持所有類型的HTTP請求。JSONP的優(yōu)勢在于支持老式瀏覽器幔虏,以及可以向不支持CORS的網(wǎng)站請求數(shù)據(jù)纺念。
3、通過jsonp跨域?
JSONP實現(xiàn)跨域請求的原理簡單的說想括,就是動態(tài)創(chuàng)建<script> 標簽柠辞,然后利用<srcipt>中 的src不受同源策略約束來跨域獲取數(shù)據(jù)。標簽標簽標簽主胧,然后利用的src 不受同源策略約束來跨域獲取數(shù)據(jù)。
JSONP 由兩部分組成:回調(diào)函數(shù)和數(shù)據(jù)习勤∽俣埃回調(diào)函數(shù)是當響應(yīng)到來時應(yīng)該在頁面中調(diào)用的函數(shù)⊥急希回調(diào)函數(shù)的名字一般是在請求中指定的夷都。而數(shù)據(jù)就是傳入回調(diào)函數(shù)中的 JSON 數(shù)據(jù)。
4予颤、 ?WebSocket協(xié)議跨域?
5囤官、 postMessage跨域
6、??document.domain + iframe跨域
7蛤虐、?location.hash + iframe
8党饮、 nodejs中間件代理跨域
9、window.name + iframe跨域