摘要:同源策略的控制者是瀏覽器,瀏覽器可以控制不同域之間的資源的訪問或相互操作,但不控制自己對不同域之間的資源的操作和訪問。
同源與跨域
一般情況下,禁止一個域從另一個域讀取數據,卻可以使用某些從其他域拿到的資源。比如說,允許一個域執行、渲染、應用從其他域獲取到的腳本、圖片、樣式;同樣,一個域可以展示從其他域獲取的內容,比如在frame中顯示html文檔。網絡資源也可以選擇性的讓其他域來讀取自己的信息,比如使用Cross-Origin Resource Sharing,這種情況下訪問權是針對單個域授權的。同源策略的控制者是瀏覽器,瀏覽器可以控制不同域之間的資源的訪問或相互操作,但不控制自己對不同域之間的資源的操作和訪問。
同源策略源:由協議【https、http】+域名【a.com】+端口【80、443】組成,(ie中略有不同),同源策略是瀏覽器的核心安全策略,目的是將來自不同源的資源進行隔離,并控制不同源資源間的通信,從而減少安全威脅,增強安全性。
跨域中的一些限制以及不限制內容如下:
不限制內容:
腳本文件 js
圖片資源
樣式資源css
iframe展示其他的的資源
a鏈接訪問其他資源
多媒體等資源
form表單提交
限制內容:
跨域的方法【get、post可以】
跨域請求頭不可以添加自定義頭部
本地文件系統讀寫
iframe可以訪問iframe整體,不能訪問內容
cookie的限制,使用CORS需要withCredentials=true才可以帶上cookie
跨域方法使用反向代理,避免跨域,通過后端來完成跨域部分
JSONP方式,利用js文件的跨域允許,并且js文件請求到了,就會執行該js腳本,如此可以在前端定義好function callback(data){};這樣去請求后端的js文件,文件的內容包括了需要的數據,但是返回的是一個函數callback(data);這樣就會調用前端腳本寫好的callback方法,把data當做參數使用
CORS(Cross Origin Resource Sharing),通過協商HTTP Header讓瀏覽器和服務端進行通信,來決定請求或者響應是否有效,默認情況下,瀏覽器發送跨域請求不帶認證信息(比如cookie,證書,代理認證信息等),withCredentials屬性值為false,后端響應設置Access-Control-Allow-Origin允許該域,或者為*,如果需要cookie認證信息跨域需要withCredentials=true,同時服務端允許Access-Control-Allow-Credentials:true,同時Access-Control-Allow-Origin 值不能為*;使用CORS瀏覽器將CORS請求分成兩類:簡單請求(simple request)和非簡單請求(not-so-simple request),只要同時滿足以下兩大條件,就屬于簡單請求。
1) 請求方法是以下三種方法之一:
HEAD
GET
POST
(2)HTTP的頭信息不超出以下幾種字段:
Accept
Accept-Language
Content-Language
Last-Event-ID
Content-Type:只限于三個值application/x-www-form-urlencoded、multipart/form-data、text/plain
對于非簡單請求、會發起預檢請求Options來確認是否允許跨域,這種方法老的瀏覽器不一定支持。fetch方法在移動端使用較多,也可以配合CORS來完成跨域。
form表單提交,這樣可以提交數據,但是進行交互有點困難;
window.name + iframe的使用,可以使用iframe定義一個窗口window,通過后端或者頁面iframe的src頁面的js腳本配合,把數據放在這個window.name上,最大可以存儲2M的數據,然后主域可以把這個iframe的src設置為何主域同域的中間頁,而此時iframe的window.name并不會變,這樣主頁就可以獲取該iframe的window.name來獲取數據。參考鏈接
document.domain可以完成兩個頂級域名下的子域名之間的通信
postMessage是H5中的window之間的通信方式。
WebSocket可以隨便玩
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/83995.html
摘要:同源策略在這之前需要先熟悉一下這個概念,同源指請求協議相同,主機名相同,端口相同,涉及安全的策略。同源策略主要限制的是不同源之間的交互操作,對于跨域內嵌的資源不受該策略限制。 問題起因是在使用weibo api的時候,發現有一個報錯。weibo api是https協議,我本地是模擬的回調域名,然后進行數據通信,本地http協議,于是乎就報錯了。出于對postMessage的不是很熟悉,...
摘要:存在跨域的情況網絡協議不同,如協議訪問協議。域名和域名對應如訪問跨域請求資源的方法代理定義和用法代理用于將請求發送給后臺服務器,通過服務器來發送請求,然后將請求的結果傳遞給前端。定義和用法是現代瀏覽器支持跨域資源請求的一種最常用的方式。 1、什么是跨域? 由于瀏覽器同源策略,凡是發送請求url的協議、域名、端口三者之間任意一與當前頁面地址不同即為跨域。存在跨域的情況: 網絡協議不同,...
閱讀 3492·2023-04-26 02:44
閱讀 1629·2021-11-25 09:43
閱讀 1519·2021-11-08 13:27
閱讀 1885·2021-09-09 09:33
閱讀 903·2019-08-30 15:53
閱讀 1765·2019-08-30 15:53
閱讀 2778·2019-08-30 15:53
閱讀 3109·2019-08-30 15:44