一、什麼是跨域
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 進行跨域通信。