瀏覽器的同源策略:協議相同、功能變數名稱相同、埠相同。所有瀏覽器廠商遵循這種策略。 非同源(跨域)共有三種行為受到限制: cookie、localstorage、和IndexDB無法獲取 DOM無法獲取 ATAX請求不能發送 這種同源性會有效的阻止CSRF(跨站請求)攻擊。 瀏覽器請求分為兩種:(CORS ...
瀏覽器的同源策略:協議相同、功能變數名稱相同、埠相同。所有瀏覽器廠商遵循這種策略。
非同源(跨域)共有三種行為受到限制:
- cookie、localstorage、和IndexDB無法獲取
- DOM無法獲取
- ATAX請求不能發送
這種同源性會有效的阻止CSRF(跨站請求)攻擊。
瀏覽器請求分為兩種:(CORS請求)
- 簡單請求:只要滿足一下方式中的兩種,視為簡單
- 請求方式是GET、POST、HEAD
- HTTP請求頭不超過如下欄位: ACCEPT、ACCEPT-LANGUAGE、Last-Event-ID、Content-langage、content-type
- 請求中的任意XHR對象均沒有註冊事件反射器
- XHR對象可以使用XHR.upload屬性訪問,請求中沒有使用ReadableStream對象
對於簡單請求瀏覽器會直接發送請求,伺服器返迴響應給瀏覽器,併在響應體中攜帶相關信息供瀏覽器判斷是否跨站
2. 非簡單請求
例如PUT、DELETE、CONTENT-TYPE:aplication/Json
非簡單請求會在正式通信之前,使用options方法發起一個預檢請求到伺服器,瀏覽器先詢問伺服器當前網頁所在的功能變數名稱是否在伺服器的許可名單中,以及可以使用那些HTTP方法和頭信息欄位,只有得到肯定答覆,瀏覽器才會發出正式的XHR請求,否則報錯。
跨域手段
- AJAX請求跨域
由瀏覽器和伺服器根據HTTP頭域或Access-control開頭相關欄位協商處理
2. JSONP跨域
利用script或img等標簽能夠跨域載入來實現,瀏覽器通過GET方法載入這些標簽(業務對於一些重要的請求,不能夠使用get方法提交數據,必須使用post方法,這樣就無法利用JSONP進行跨域請求)
3. 伺服器轉發