瀏覽器同源策略詳解

一、同源定義

同源即指兩個URL協議,域名和端口號都相同,這樣才可以互相訪問彼此的資源。如果兩個URL不滿足以上條件,那麼就是跨域請求。

例如:a.com和b.com之間的請求就是跨域請求,但是a.com和a.com:8080之間的請求就是同源請求。

二、同源策略的作用

瀏覽器的同源策略是為了防止惡意的網站竊取用戶的隱私信息而設計的。如果沒有同源策略,那麼一個網頁可以通過一些惡意的腳本來獲取另一個網頁中用戶的敏感信息,例如Cookie。

同源策略可以保護用戶的隱私信息,但也會限制網站與外部資源的交互,這就需要設計跨域解決方案。

三、同源策略的限制

1、Cookie、LocalStorage和IndexedDB無法讀取。同源A網頁下,無法讀取同源B網頁的Cookie、LocalStorage和IndexedDB。

<script>
let cookie = document.cookie; // 無法獲得
let localStorage = window.localStorage; // 無法獲得
let indexedDB = window.indexedDB; // 無法獲得
</script>

2、DOM無法獲取。同源A網頁無法獲取同源B網頁中的DOM元素。

<iframe src="http://b.com"></iframe>
<script>
let iframe = document.getElementsByTagName('iframe')[0];
let bDom = iframe.contentWindow.document.getElementsByTagName('body')[0]; // 無法獲得
</script>

3、AJAX請求無法發送。同源A網頁無法向同源B網頁發送AJAX請求。

fetch('http://b.com', {
  method: 'get'  // 無法請求
})

四、跨域解決方案

1、JSONP

JSONP利用script標籤不存在跨域限制的特性,可以通過動態創建script標籤,向另一個服務器請求數據,將響應結果放到回調函數中返回到網頁中。

<script>
function handleData(res) {
  console.log(res);
}
let script = document.createElement('script');
script.src = "http://b.com/api?callback=handleData"; // 動態創建script標籤
document.head.appendChild(script);
</script>

2、CORS

CORS實現了前後端的協商機制,由後端設置Access-Control-Allow-Origin響應頭來允許跨域請求。

具體地,當瀏覽器發現請求不符合同源策略時,會進行一次CORS預檢請求,即向另一個服務器發起OPTIONS請求,詢問是否允許跨域,如果得到響應,則可以進行跨域請求。

後端需要設置Access-Control-Allow-Origin、Access-Control-Allow-Credentials等響應頭,前端需要在AJAX請求中加上withCredentials和設置xhr的請求頭。

// 後端設置響應頭
Access-Control-Allow-Origin: http://a.com
Access-Control-Allow-Credentials: true

// 前端AJAX請求
let xhr = new XMLHttpRequest();
xhr.withCredentials = true; // 允許跨域帶Cookie
xhr.open("GET", "http://b.com/api");
xhr.setRequestHeader("Content-Type", "application/json");
xhr.send();

3、WebSocket

WebSocket是一種可以在單個TCP連接上進行全雙工通信的網絡協議,在進行跨域通信時,WebSocket可以直接連接到另一個服務器並發送數據,不再需要通過CORS等方式解決跨域問題。

let socket = new WebSocket('ws://b.com');
socket.onopen = function() {
  socket.send('hello, b');
}
socket.onmessage = function(event) {
  console.log(event.data);
}

五、小結

瀏覽器的同源策略可以保護用戶的隱私信息,但也會限制網站與外部資源的交互,需要設計跨域解決方案。常用的跨域解決方案有JSONP、CORS、WebSocket等。在使用跨域解決方案時,需要注意安全性和對瀏覽器的性能影響。

原創文章,作者:MYLVX,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/369240.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
MYLVX的頭像MYLVX
上一篇 2025-04-12 13:00
下一篇 2025-04-12 13:00

相關推薦

  • 如何解決web瀏覽器雙擊事件時差

    本文將從以下幾個方面對web瀏覽器雙擊事件時差進行詳細闡述,並提供解決方法。 一、雙擊事件延時設置 1、問題描述:在web瀏覽器中,雙擊事件默認會延時一定的時間才能觸發該事件,這個…

    編程 2025-04-29
  • Python量化策略代碼用法介紹

    Python量化策略是一種金融投資策略,在金融領域中得到越來越廣泛的應用。下面將從數據準備、策略制定、回測和優化等方面介紹Python量化策略的詳細實現。 一、數據準備 在量化策略…

    編程 2025-04-29
  • 使用Python模擬手機瀏覽器的方法

    解答如何使用Python模擬手機瀏覽器,並且給出示例代碼。 一、安裝Selenium庫 使用Python模擬手機瀏覽器需要使用Selenium庫。 首先,使用pip命令進行安裝: …

    編程 2025-04-28
  • 谷歌瀏覽器窗口大小調整

    谷歌瀏覽器是當今最流行的網絡瀏覽器之一,它的窗口大小調整是用戶操作其中的一個重要部分。本文將從多個方面對谷歌瀏覽器窗口大小調整做詳細的闡述。 一、窗口大小調整的基礎操作 谷歌瀏覽器…

    編程 2025-04-28
  • 如何在電腦上下載安裝谷歌瀏覽器?

    想要在電腦上使用谷歌瀏覽器,我們需要先進行下載和安裝。下面,本文將從多個方面詳細闡述如何在電腦上下載安裝谷歌瀏覽器。 一、到谷歌瀏覽器官方網站下載 谷歌瀏覽器官方網站是我們下載谷歌…

    編程 2025-04-28
  • 如何解決Fiddler抓不到谷歌瀏覽器的包問題

    當使用Fiddler工具抓取網絡數據包時,由於谷歌瀏覽器的加密機制,使得Fiddler無法直接抓取到谷歌瀏覽器發送的網絡數據包。下面將從幾個方面闡述如何解決這個問題。 一、關閉谷歌…

    編程 2025-04-27
  • 機制與策略分離

    了解機制與策略分離的解決方法與優勢 一、概述 機制與策略分離是一種軟件設計理念,它將複雜的系統、組件等模塊化,通過分離機制與策略,把模塊實現的方式與具體使用方式分開。 機制是實現某…

    編程 2025-04-27
  • Linux sync詳解

    一、sync概述 sync是Linux中一個非常重要的命令,它可以將文件系統緩存中的內容,強制寫入磁盤中。在執行sync之前,所有的文件系統更新將不會立即寫入磁盤,而是先緩存在內存…

    編程 2025-04-25
  • 神經網絡代碼詳解

    神經網絡作為一種人工智能技術,被廣泛應用於語音識別、圖像識別、自然語言處理等領域。而神經網絡的模型編寫,離不開代碼。本文將從多個方面詳細闡述神經網絡模型編寫的代碼技術。 一、神經網…

    編程 2025-04-25
  • git config user.name的詳解

    一、為什麼要使用git config user.name? git是一個非常流行的分布式版本控制系統,很多程序員都會用到它。在使用git commit提交代碼時,需要記錄commi…

    編程 2025-04-25

發表回復

登錄後才能評論