前端筆記:同源策略、跨域問題

只有前端才會有跨域問題后端不受限制

一、什么是“同源策略”(Same-Origin Policy)

? 定義:

瀏覽器的 同源策略 是一種 安全機制限制一個源的 JavaScript 訪問另一個源的資源,以防止惡意網站竊取用戶敏感信息。

? “同源” 的判斷標準(協議 + 域名 + 端口)必須都相同:

條件是否同源
http://a.com 與 http://a.com? 是同源
http://a.com 與 https://a.com? 協議不同
http://a.com 與 http://b.com? 域名不同
http://a.com:8080 與 http://a.com:8081? 端口不同


二、什么是“跨域”

跨域(Cross-Origin) 指的是前端 JavaScript 在瀏覽器中訪問“非同源”的接口資源。

舉例:

假設你的前端頁面地址是:

http://localhost:8080

而你訪問的后端接口是:

http://localhost:8081/api/user

因為 端口不同,所以就是跨域請求,瀏覽器就會限制 JS 獲取響應內容。


三、同源策略限制什么?

操作類型是否受同源策略限制
<img src=""> 加載圖片? 不受限制(可跨域)
<link> 加載 CSS? 不受限制(可跨域)
<script> 加載 JS? 不受限制(可跨域)
AJAX(XHR、fetch)請求接口? 受限制(必須同源)
頁面間的 Cookie 共享? 受限制(必須同源)
iframe 操作其它頁面 DOM? 受限制(必須同源)


四、為什么存在同源策略?

為了解決以下安全問題:

  • 防止 A 網站通過 JS 惡意讀取 B 網站的用戶信息(如 Cookie、localStorage、接口返回數據)

  • 避免 CSRF 攻擊等跨站請求攻擊

  • 瀏覽器不限制,用戶信息可能被任意網站竊取


五、跨域請求報錯長這樣

Access to XMLHttpRequest at 'http://localhost:8081/api/user' 
from origin 'http://localhost:8080' has been blocked by CORS policy:
No 'Access-Control-Allow-Origin' header is present on the requested resource.

六、跨域的常見解決方案

? 方式一:服務端配置 CORS(推薦方式)

什么是 CORS?

CORS(Cross-Origin Resource Sharing)是瀏覽器與服務端約定的 跨域資源共享協議

不允許不是瀏覽器的一種安全限制么?為啥要后端配置允許跨域(CORS)?

🌐 瀏覽器的跨域請求是否被允許,是瀏覽器根據后端響應頭是否包含 CORS 信息來決定的!

換句話說:

  • 不是瀏覽器自己說了算。

  • 是瀏覽器問后端:“你同不同意這個域名訪問你?”

  • 如果后端沒明確說“我允許”,那瀏覽器就攔截響應,不讓 JS 拿到。

原理:
  • 瀏覽器在跨域請求時,會自動帶上 Origin 請求頭

  • 服務端需要在響應頭中明確允許的來源:

Access-Control-Allow-Origin: http://localhost:8080
  • 瀏覽器收到后,才會允許 JavaScript 讀取響應

Spring Boot 中配置 CORS:
@Configuration
public class CorsConfig implements WebMvcConfigurer {@Overridepublic void addCorsMappings(CorsRegistry registry) {registry.addMapping("/**") // 允許所有路徑.allowedOrigins("http://localhost:8080") // 允許訪問的域.allowedMethods("GET", "POST", "PUT", "DELETE").allowCredentials(true); // 允許攜帶 Cookie}
}

? 方式二:前端開發時使用代理(只適合開發環境)

  • Vue/React 項目中,前端配置 devServer.proxy,把請求“偽裝”轉發到后端

// vue.config.js
module.exports = {devServer: {proxy: {'/api': {target: 'http://localhost:8081',changeOrigin: true}}}
}

? 方式三:JSONP(只能用 GET,已淘汰)

  • 原理:利用 <script src=""> 不受同源策略限制,將數據包成 JS 函數調用

  • 只能解決 GET 請求

  • 安全性差,功能弱,幾乎淘汰


七、注意:跨域問題是瀏覽器行為,服務端或后端代碼無此限制

場景是否受同源策略限制
瀏覽器 + JS + Ajax? 限制
后端發 Http 請求? 不限制
Postman 發請求? 不限制
curl 命令? 不限制


八、CORS 的核心意義總結一句話:

🌐 同源策略是瀏覽器為安全設定的限制機制,CORS 是服務端響應中聲明“我允許誰來訪問我”的機制。

如果服務端不顯式聲明允許,瀏覽器就自動屏蔽響應結果。


九、Vue + SpringBoot 是否跨域?

是跨域的,典型表現:

Vue 地址Spring Boot 地址是否跨域
http://localhost:8080http://localhost:8081? 是
http://localhost:8080http://localhost:8080? 否
http://frontend.example.comhttp://api.example.com? 是

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/90322.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/90322.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/90322.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

java通過com進行pdf轉換docx丟失

使用&#xff0c;通過com調用&#xff0c;發現pdf轉換成docx后&#xff0c;沒有看到docx輸出到指定目錄。直接說解決方案:關閉的保護模式即可&#xff0c;打開工具&#xff0c;編輯->首選項 找到安全性(增強)&#xff0c;關閉啟動時啟用保護模式關閉后&#xff0c;docx正常輸…

SQL基礎? | 視圖篇

0 序言 本文將系統講解數據庫中視圖的相關知識&#xff0c;包括視圖的定義、作用、創建&#xff08;單表、多表、基于視圖創建&#xff09;、查看、更新、修改與刪除操作&#xff0c;以及視圖的優缺點。 通過學習&#xff0c;你能夠掌握視圖的基本概念&#xff0c;理解何時及如…

移動云×華為昇騰:“大EP+PD分離”架構實現單卡吞吐量跨越式提升!

在面向下一代AI基礎設施的關鍵技術攻關中&#xff0c;移動云與華為昇騰計算團隊深度協同&#xff0c;實現了大模型推理引擎的架構級突破。雙方基于昇騰AI基礎軟硬件平臺&#xff0c;針對DeepSeek大模型完成了大規模專家并行&#xff08;Expert Parallelism&#xff0c;簡稱“大…

配電自動化終端中電源模塊的設計

配電自動化終端中電源模塊的設計 引言 配電終端設備的可靠性和自動化程度,直接影響到整個配電自動化系統的可靠性和自動化水平。由于配電終端設備一般安裝于戶外或比較偏僻的地方,不可能有直流電源提供,因此,配電網終端設備的直流供電方式成為各配網自動化改造中必須要研究…

性能測試-groovy語言1

課程&#xff1a;B站大學 記錄軟件測試-性能測試學習歷程、掌握前端性能測試、后端性能測試、服務端性能測試的你才是一個專業的軟件測試工程師 Jmeter之Groovy語言Groovy簡介為何性能測試中選擇Groovywindows下載Groovy進入官網配置環境變量Groovy的數據類型groovy的保留字字符…

天邑TY1613_S905L3SB_安卓9-高安非-高安版-通刷-TTL線刷固件包

天邑TY1613_S905L3SB_安卓9-高安非-高安版-通刷-TTL線刷固件包刷機說明&#xff1a;本固件為TTL刷機方式&#xff0c;需要準備如下工具&#xff1b;電烙鐵TTL線刷機優盤TTL接觸點位于處理器左側&#xff0c;從上往下數第二腳GND、3TXD、4RXD跑碼工具-【工具大全】-putty跑碼工具…

【硬件-筆試面試題】硬件/電子工程師,筆試面試題-7,(知識點:晶體管放大倍數計算)

目錄 1、題目 2、解答 3、相關知識點 晶體管的電流分配關系 直流電流放大系數\(\overline{\beta}\) 交流電流放大系數\(\beta\) 晶體管的放大條件 總結 【硬件-筆試面試題】硬件/電子工程師&#xff0c;筆試面試題匯總版&#xff0c;持續更新學習&#xff0c;加油&…

力扣-152.乘積最大子數組

題目鏈接 152.乘積最大子數組 class Solution {public int maxProduct(int[] nums) {int[] dpMax new int[nums.length]; //包括nums[i]的乘積最大值int[] dpMin new int[nums.length]; //包括nums[i]的乘積最小值int res nums[0];dpMax[0] nums[0];dpMin[0] nums[0];fo…

HTTP/1.0、HTTP/1.1 和 HTTP/2.0 主要區別

一句話總結 HTTP/1.0: 短連接&#xff0c;每次請求都需要建立一個新的 TCP 連接&#xff0c;性能較差。HTTP/1.1: 長連接&#xff0c;默認開啟 Keep-Alive&#xff0c;連接可復用&#xff0c;解決了 1.0 的大部分問題&#xff0c;是目前使用最廣泛的版本。HTTP/2.0: 二進制、多…

Navicat 17.3 正式發布 | 現已支持達夢、金倉和 IvorySQL 數據庫

&#x1f680;&#x1f680;&#x1f680; Navicat 很高興地宣布&#xff1a;Navicat 17.3 版本正式發布。此次更新包含多項突破性功能&#xff0c;包括新增對達夢、金倉和 IvorySQL 等數據庫的支持&#xff0c;全面強化 AI 功能并新增阿里通義千問等 AI 大模型&#xff0c;同…

前端性能新紀元:Rust + WebAssembly 如何在瀏覽器中實現10倍性能提升(以視頻處理為例)

前端性能新紀元&#xff1a;Rust WebAssembly 如何在瀏覽器中實現10倍性能提升&#xff08;以視頻處理為例&#xff09; JavaScript&#xff0c;作為 Web 開發的基石&#xff0c;是動態的、靈活的&#xff0c;但在性能上&#xff0c;它也存在著天生的“軟肋”。對于那些計算密…

Web前端:JavaScript find()函數內判斷

&#x1f3af; find是什么&#xff1f;find() 是 JavaScript 數組&#xff08;Array&#xff09;提供的一個內置方法&#xff0c;用于在數組中查找第一個滿足條件的元素。簡單來說&#xff1a;它像偵探一樣遍歷數組&#xff0c;找到第一個符合條件的成員就返回它。?? 核心作用…

MySQL詳解三

MySQL詳解三事務ACID特性原子性一致性隔離性持久性事務的隔離級別讀未提交(Read Uncommitted)讀已提交&#xff08;Read Committed&#xff09;可重復讀&#xff08;Repeatable Read&#xff09;串行化&#xff08;serializable&#xff09;MVCC聚集索引的隱藏列read view鎖全局…

ABQ-LLM:用于大語言模型的任意比特量化推理加速

溫馨提示&#xff1a; 本篇文章已同步至"AI專題精講" ABQ-LLM&#xff1a;用于大語言模型的任意比特量化推理加速 摘要 大語言模型&#xff08;LLMs&#xff09;在自然語言處理任務中取得了革命性的進展。然而&#xff0c;其實際應用受到巨大的內存與計算開銷的限制…

kafka的shell操作

Kafka 提供了豐富的 shell 命令工具&#xff0c;位于 Kafka 安裝目錄的 bin/ 目錄下&#xff08;Windows 系統為 bin/windows/&#xff09;。這些命令用于管理主題、生產者、消費者、分區等核心組件。以下是常用的 Kafka shell 操作大全&#xff1a;一、主題&#xff08;Topic&…

client-go: k8s選主

快速上手 下面這個代碼就是一個選主的大概邏輯 package mainimport ("context""flag""fmt"_ "net/http/pprof""os""path/filepath""time""golang.org/x/exp/rand"v1 "k8s.io/api/core/v…

為什么Java的String不可變?

為什么Java的String不可變&#xff1f; 場景&#xff1a; 你在開發多線程用戶系統時&#xff0c;發現用戶密碼作為String傳遞后&#xff0c;竟被其他線程修改。這種安全隱患源于對String可變性的誤解。Java將String設計為不可變類&#xff0c;正是為了解決這類核心問題。 1??…

在Ubuntu上使用QEMU學習RISC-V程序(1)起步第一個程序

文章目錄一、 引言二、 環境準備三、編寫簡單的RISC-V程序四、 編譯步驟詳解五、使用QEMU運行程序六、程序詳解七、退出QEMU八、總結附錄&#xff1a;QEMU中通過UTRA顯示字符工作原理1、內存映射I/O原理2、add.s程序工作流程3、關鍵指令解析4、QEMU模擬的UART控制器5、為什么不…

R擬合 | 一個分布能看到三個峰,怎么擬合出這三個正態分布的參數? | 高斯混合模型 與 EM算法

1. 效果已知數據符合上圖分布&#xff0c;怎么求下圖的三個分布的參數mu, sigma&#xff0c;及每個分布的權重 lambda&#xff1f; 2. 代碼: 高斯混合模型&#xff08;Gaussian Mixture Model&#xff0c;簡稱GMM&#xff09; library(mixtools) set.seed(123) # 確保結果可重復…

Excel自動分列開票工具推薦

軟件介紹 本文介紹一款基于Excel VBA開發的自動分列開票工具&#xff0c;可高效處理客戶對賬單并生成符合要求的發票清單。 軟件功能概述 該工具能夠將客戶對賬單按照訂單號自動拆分為獨立文件&#xff0c;并生成可直接導入發票清單系統的標準化格式。 軟件特點 這是一款體…