一、同源策略 1. 什麼是同源策略? 同源策略是一種約定,它是瀏覽器最核心和最基本的安全功能,可以用於隔離潛在惡意文件,如果沒有了同源策略,瀏覽器的正常使用將受到影響。 瀏覽器採用同源策略,禁止頁面載入或執行與自身不同源的任何腳本。如果沒有同源策略,那麼惡意網頁可以讀取銀行網站、網上商城等裡面的用戶 ...
一、同源策略
1. 什麼是同源策略?
同源策略是一種約定,它是瀏覽器最核心和最基本的安全功能,可以用於隔離潛在惡意文件,如果沒有了同源策略,瀏覽器的正常使用將受到影響。
瀏覽器採用同源策略,禁止頁面載入或執行與自身不同源的任何腳本。如果沒有同源策略,那麼惡意網頁可以讀取銀行網站、網上商城等裡面的用戶信息,甚至篡改賬號密碼等。所以所有支持JavaScript的瀏覽器都採用了同源策略。
2. 同源:協議、功能變數名稱、埠相同。只要有一個不同就稱之為跨域。出現跨域瀏覽器就要報錯。
以下是相對於http://www.a.com/home.html的同源檢測
http://www.a.com/index.html | 同源 |
http://www.a.com:81/home.html | 不同源,埠號不同 |
https://www.a.com/home.html | 不同源,協議不同 |
http://www.b.com/home.html | 不同源,功能變數名稱不同 |
二、解決跨域問題
由於瀏覽器為了安全採用了同源策略,但在一些情況下,我們不得不進行跨域,所以在解決跨域問題時,要繞過同源策略的限制。
CORS方法
CORS是一種白名單機制 ,CORS的請求成功與否取決於伺服器是否同意當前域的請求,通過在伺服器設置同意當前域的請求來實現跨域訪問。在伺服器的響應頭部設置Access-Control-Allow-Origin:當前域或*
示例:
允許所有域都有訪問資源的許可權 Access-Control-Allow-Origin:* ; 允許http://www.abc.com有訪問資源的許可權 Access-Control-Allow-Origin:http://www.abc.com
JSONP方法
此方法利用了script標簽的src屬性,scr屬性具備跨域請求資源的能力。a.html請求b.js的數據,動態創建script標簽,向伺服器請求數據,請求地址後面的callback參數指定函數名。
a.html
function req(src){
let script = document.createElement("script");
script.src = src;
document.body.appendChild(script);
script.onload = function(){
document.body.removeChild(script);
}
}
function getData(data){
console.log(data); //從伺服器拿到的數據data
}
box.onclick = function(){
req("http://www.a.com/b.js?callback = getData");
}
b.js
function getData({name:"張三"}) //返回的數據作為參數
前後端聯合開發時,後端人員可以根據url里的callback參數確定函數名,從而將數據返回。