script標簽crossorigin屬性及同源策略和跨域方法


首先介紹(同源策略)

同源策略是瀏覽器最核心且基本的安全約定,要求協議、域名、端口都相同為同源,如果非同源時請求數據瀏覽器會在控制台拋出跨域異常錯誤,同源策略是瀏覽器的行為,即使客戶端請求發送了,服務端也響應了,但是會攔截,瀏覽器無法接收到響應數據,保證了數據的安全,避免XSS攻擊

跨域的解決辦法:

一:document.domain設置

兩個不同的源(子域等情況)可以通過設置document.domain告訴瀏覽器它們是同一個源,想要實現它們兩個之間的通信兩個都需要設置相同的document.domain

缺點:

用於父域和子域的情況;存在安全性問題,如果其中一個被攻擊,另一個也會引起安全問題;適用范圍為cookie共享或iframe使用(獲取DOM等);

二:JSONP

原理:動態創建script標簽,向服務器發送請求,設置script標簽src屬性后接callback=回調函數,回調函數名與響應一致,響應成功觸發回調函數獲取響應的數據

缺點:

存在安全問題,需要進一步做安全驗證如token等信息;請求方式只能為get請求;

三:CORS

跨域資源共享,設置響應頭,允許某個域或全部向服務器發送請求(Access-Control-Allow-Origin: '*')無請求方法限制

四:HTML5新增的window.postMessage API

允許跨窗口通信,無同源限制,postMessage(data, origin)參數一為通信內容,參數二為接收通信的窗口可以為*(所有),然后通過window.addEventListener('message', function(e){})監聽message事件,e有三個屬性值e.source:發送信息的窗口,e.origin:接收信息的窗口,e.data:通信的內容

五:window.name

只要在同一個窗口,無同源限制,可以通過window.name通信,window.name值長無限制,但須監聽window.name值變化,影響應用性能

六:location.hash

即url#后面的片段,可以通過window.onhashchange方法監聽獲取通信內容

七:websocket

websocket通信協議采用ws://(非加密)wss://(加密)作為協議前綴,無同源限制,服務器可以通過驗證請求頭的origin實現通信

 

前端使用window.onerror事件捕獲js腳本錯誤信息,當前端通過script標簽加載跨域資源時window.onerror無法獲取這些資源中的報錯信息,會得到script error,無法知道具體錯誤,通過設置script標簽的crossorigin屬性就可以捕獲到跨域資源的具體報錯信息,對於通過CDN引入js時很有幫助

也需要請求的跨域資源設置Access-Control-Allow-Origin的響應頭,不然無法訪問該資源


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM