前端面試題(三)—— 跨域

一、什麼是跨域

1、跨域的產生

在Web開發中,一個網頁請求另一個域(域名、協議、端口號任一不同)的資源,就會發生跨域。

2、跨域請求

跨域請求是指在瀏覽器中執行的請求,其目標資源的域名、協議或端口與當前頁面不同。

3、跨域資源共享(CORS)

跨域資源共享(CORS)是一種機制,它允許在一個源(域名、協議、端口)上的網頁應用程序訪問另一個源上的部分資源。

二、跨域資源共享(CORS)的工作原理

 1、客戶端發起跨域請求

當瀏覽器的前端代碼中發起了一個跨域請求時,瀏覽器會首先發送 OPTIONS 預檢請求(Preflight Request)給目標服務器,以確定是否允許進行跨域請求。

2、服務器響應預檢請求

目標服務器接收到 OPTIONS 請求後,會進行預檢查,檢查是否允許當前域名的請求。服務器會在響應中包含一些 CORS 相關的頭部信息,如 Access-Control-Allow-Origin、Access-Control-Allow-Methods 等。

3、瀏覽器檢查響應頭部

瀏覽器接收到服務器的響應後,會檢查響應頭部中的 CORS 相關信息,如果允許跨域請求,則瀏覽器會發送實際的請求給服務器,否則會阻止請求。

簡單說👀

瀏覽器先發送 OPTIONS 預檢請求給服務器

服務器在 header 加上 CORS 相關信息返給瀏覽器

瀏覽器看看能不能跨域,能就發實際請求,不能就拉倒

三、前端如何處理跨域請求

1、JSONP(僅限 GET 請求)

JSONP 是一種通過動態創建 <script> 標籤實現跨域請求的方法。服務器返回的數據被包裹在一個 JavaScript 函數調用中,前端通過指定回調函數來獲取數據。JSONP 的缺點是僅支持 GET 請求,並且容易受到安全漏洞的影響。

2、CORS

使用 CORS 可以實現跨域資源共享,通過在服務器端設置響應頭部來允許特定域名的跨域請求。前端無需額外處理,瀏覽器會自動處理 CORS 相關的預檢請求和實際請求。

3、代理

前端通過自己的服務器端建立一個代理服務器來轉發請求,實現跨域訪問。前端發送請求給自己的服務器,服務器再將請求轉發給目標服務器,並將響應返回給前端。這種方式可以繞過瀏覽器的同源策略限制,但會增加服務器的負擔和延遲。

4、WebSocket

WebSocket 是一種全雙工通信協議,可以在客戶端和服務器之間建立持久的連接,實現跨域通信。由於 WebSocket 不受同源策略的限制,可以直接在前端代碼中使用 WebSocket 進行跨域通信。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章