vue和springboot交互數據,使用axios【跨域問題】

vue和springboot交互數據,使用axios【跨域問題】

提示:幫幫志會陸續更新非常多的IT技術知識,希望分享的內容對您有用。本章分享的是node.js和vue的使用。前后每一小節的內容是存在的有:學習and理解的關聯性。【幫幫志系列文章】:每個知識點,都是寫出代碼和運行結果且前后關聯上的去分析和說明(能大量節約您的時間)。

所有文章都*不會*直接把代碼放那里,讓您自己去看去理解。我希望我的內容對您有用而努力~


文章目錄

  • vue和springboot交互數據,使用axios【跨域問題】
  • 前言
  • CORS
    • 簡單請求
    • 非簡單請求
  • 代碼編寫(解決方式)
  • 總結


本文章是系列文章,技術棧內容為:【springboot+vue】【前后分離】
【詳細圖文,實操步驟分享,節約時間版】。最終完成一個商業化項目。內容有:
springboot知識
mybatisPlus知識
vue知識
node.js知識

本小節的內容是
vue篇章 之 : vue和springboot交互數據,使用axios【解決跨域問題】



每一個文章小節都會把 標題 說的很清楚。前后關聯看,可以快速實現:前后分離。本質上,額外文章鏈接和文章自己標題內容關系不大。

前面小節文章已經實現springboot的創建,springboot關聯前端數據swagger和springboot通過mybatisplus操作數據庫
【2025年】基于電腦的jdk1.8通過idea創建springboot2.x版本(非常簡潔快速)
【上榜文章,一文搞定】現在springboot是3.x以上版本,jdk版本至少要求17.但是很多時候我們電腦是jdk1.8(求穩定性和安全性)。文本分享本機電腦1.8的jdk。idea如何非常簡潔快速的創建springboot
文章里面也有 為什么只能是jdk17起和地址指定為阿里云報錯的解決辦法




本文章是重點描述:跨域問題
本文章是重點描述:跨域問題:不是一個同源數據,不能訪問讀寫對方的資源
本文章是重點描述:同源策略是約定,是瀏覽器最核心最基本的安全問題

前面小節已經安裝好node.js和分享了一些vue語法,及RESTful風格及安裝配置swagger使用,和:
vue實現與后臺springboot傳遞數據【傳值/取值 Axios 】
這個文章是 Axios 詳細語法和實現步驟
里面算是總結當前系列的所有代碼匯總:有前端vue的,有后臺springboot的。包括實際axios的語法
【它也是上榜文章,可以一看:里面有axios的快速實現代碼】
在這里插入圖片描述
鏈接文章里面:直接是實現Axios的案例解決方案(代碼實例),代碼已經直接解決了跨域,當然也標注了注釋。沒有那些代碼的話,一直取不到數據。但是那個文章并沒有詳細去描述跨域問題。如果不解決跨域,就存在同源策略的問題:


前言

如果不解決跨域,就存在同源策略的問題
vue里面的axios 和 springboot里面的controller寫在多都沒有用。它不能交互數據

什么是同源策略:
所謂同源:即指向同一個域。就是兩個頁面具有相同的協議:主機(ip地址)端口號(port)

當一個請求url的協議(http)域名(ip地址),**端口(port)**三者之間有任何一個與當前頁面url不同,即為跨域
此時無法讀取非同源網頁的cookie和無法向非同源地址發送ajax請求。

目前我們的項目:
node啟動vue前端項目,端口是8080
idea啟動springboot自帶的tomcat,端口是8081
不管怎么樣,是多少。它們兩個端口都不是同一個,在程序和協議眼里,就是兩個項目,兩個地址。即為跨域

為了保證數據和瀏覽器的安全,全行業遵循:
不同源的客戶端和url地址,在-沒有-明確授權的情況下,不能讀寫對方的資源
很好理解和熟知:咱不能自己打開一個網站url,它就能把其他網站url的傳輸數據讀取了,不可能。行業對于安全之一最基礎的就是現在分享的同源策略


CORS

CORS(Cross-Origin Resource Sharing) 是由W3C制定的一種跨域資源共享技術標準,其目的就是為了解決當前的跨域請求
CORS可以在不破壞即有規則的情況下,去通過后端服務器實現CORS接口,從而實現跨域通信。
CORS將請求分為兩類:簡單請求和非簡單請求,分別對跨域通信提供了支持。

簡單請求

滿足以下條件就是簡單請求:
請求方法/提交方式:GET POST HEAD
除了以下請求頭字段之外,沒有自定義的請求頭:
Accept、Accept-Language、Content-Language、Last-Event-ID、Content-Type
Content-Type的值 -只有- 以下三種:
text/plain multipart/form-data application/x-www-form-urlencoded

簡單請求的服務器處理
對于簡單請求,CORS的策略是請求時在請求頭中添加一個Origin字段:

假設有一個網頁https://example.com
需要從API服務https://api.example.com/data獲取數據
由于這個請求滿足簡單請求的條件,瀏覽器會直接發送請求 (請求頭request head) :

GET /data HTTP/1.1 Host: api.example.com Origin: https://example.com
做項目的時候 網頁修改為ip地址一樣的

服務器接收到請求之后,根據該字段判斷是否允許這個請求的訪問,如果允許,就在HTTP頭中添加 Access-Control-Allow-Origin 字段
(相應response:)
HTTP/1.1 200 OK Access-Control-Allow-Origin: https://example.com Content-Type: application/json { “data”: “Sample data” }

非簡單請求

不滿足上述條件的請求即為非簡單請求。例如,使用PUT、DELETE等方法,或者POST方法包含除Content-Type和Accept之外的其他頭信息。
對于非簡單請求,瀏覽器會先發送一個OPTIONS請求(預檢請求)到服務器,以確認服務器是否允許跨域請求。
稱為預檢請求(preflight request)
預檢請求將真實信息:請求方法,自定義字段,源信息添加到HTTP頭信息中,詢問服務器是否允許這樣的操作。

?服務器響應預檢請求?:服務器需要在響應中包含以下信息:
Access-Control-Allow-Origin:指定哪些源可以訪問資源。
Access-Control-Allow-Methods:指定允許的方法。
Access-Control-Allow-Headers:指定允許的頭信息。

實際請求?:如果預檢請求成功,瀏覽器會發送實際的非簡單請求,服務器需要按照預檢響應中的設置進行處理。

代碼編寫(解決方式)

簡單請求和非簡單請求
是瀏覽器層面的處理方式(打開瀏覽器開發者工具,查詢network網絡,可以看到請求頭…和響應…)。
一般開發里面,我們去springboot后臺服務器添加對應的代碼:

springboot中配置CORS
編寫一個工具類:

@Configuration
public class CorsConfig implements WebMvcConfigurer {@Overridepublic void addCorsMappings(CorsRegistry registry) {registry.addMapping("*/**") //允許跨域訪問的路徑.allowedOrigins("*") //允許跨域訪問的源.allowedMethods("GET","POST","PUT","OPTIONS","DELETE") //允許請求的方式.maxAge(1000000)    //預檢的時間.allowedHeaders("*") //允許頭部設置.allowCredentials(true); //是否發送cookie}
}// 工具類   可以配置的很細節 
// 目前是基本全部權限都放開了:(如果您感覺前后分離,有跨域問題,可以直接復制)

不想使用工具類,在對應的某一個controller類上面,加@CrossOrigin:
表示:這個類里面的方法路徑,都允許跨域訪問,沒有配置類里面寫的那么細節

@RestController
@CrossOrigin
public class UserController {}

總結

說明一下:整個這個系列實現前后分離的springboot+vue項目。序號文章一共也就10幾篇,只有核心圖文重點操作步驟來實現這個目標(基本上您邊看邊寫:一個小時或者一上午就能跟著一起手搓一個前后分離項目,然后您可以自行添加功能和內容在您項目里面)

(會陸續更新非常多的IT技術知識及泛IT的電商知識,可以點個關注,共同交流。?( ′・?・` )比心)
(也歡迎評論,提問。 我會依次回答~)

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

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

相關文章

FFMPEG 與 mp4

1. FFmpeg 中的 start_time 與 time_base start_time 流的起始時間戳(單位:time_base),表示第一幀的呈現時間(Presentation Time)。通常用于同步多個流(如音頻和視頻)。 time_base …

AI世界的崩塌:當人類思考枯竭引發數據生態鏈斷裂

AI世界的崩塌:當人類思考枯竭引發數據生態鏈斷裂 ——論過度依賴AI創作對技術進化的反噬 一、數據生態的惡性循環:AI的“自噬危機” 當前AI模型的訓練依賴于人類創造的原始數據——書籍、論文、藝術作品、社交媒體動態等。據統計,2025年全球…

C++【STL】(2)string

C【STL】string用法擴展 1. assign:為字符串賦新值 用于替換字符串內容,支持多種參數形式。 常用形式: // 用另一個字符串賦值 str.assign("Hello World");// 用另一個字符串的子串(從第6個字符開始,取5…

樹莓派4基于Debian GNU/Linux 12 (Bookworm)開啟VNC,使用MobaXterm連接VNC出現黑屏/灰屏問題

1. 開啟樹莓派的VNC服務 啟用VNC服務:通過raspi-config開啟 # 1. 通過 raspi-config 工具開啟 sudo raspi-config選擇 Interface Options → VNC → Yes退出時會自動啟動服務 檢查服務狀態: sudo systemctl status vncserver-x11-serviced正常輸出應顯示…

MongoDB使用x.509證書認證

文章目錄 自定義證書生成CA證書生成服務器之間的證書生成集群證書生成用戶證書 MongoDB配置java使用x.509證書連接MongoDBMongoShell使用證書連接 8.0版本的mongodb開啟復制集,配置證書認證 自定義證書 生成CA證書 生成ca私鑰: openssl genrsa -out ca…

Python爬蟲實戰:研究js混淆加密

一、引言 在當今數字化時代,數據已成為推動各行業發展的核心驅動力。網絡爬蟲作為一種高效的數據采集工具,能夠從互聯網上自動獲取大量有價值的信息。然而,隨著互聯網技術的不斷發展,許多網站為了保護自身數據安全和知識產權,采用了 JavaScript 混淆加密技術來防止數據被…

Java項目層級介紹 java 層級 層次

java 層級 層次 實體層 控制器層 數據連接層 Service : 業務處理類 Repository :數據庫訪問類 Java項目層級介紹 https://blog.csdn.net/m0_67574906/article/details/145811846 在Java項目中,層級結構(Layered Architecture&#xf…

網絡安全頂會——SP 2025 論文清單與摘要

1、"Check-Before-you-Solve": Verifiable Time-lock Puzzles 時間鎖謎題是一種密碼學原語,它向生成者保證該謎題無法在少于T個順序計算步驟內被破解。近年來,該技術已在公平合約簽署和密封投標拍賣等場景中得到廣泛應用。然而,求解…

《100天精通Python——基礎篇 2025 第18天:正則表達式入門實戰,解鎖字符串處理的魔法力量》

目錄 一、認識正則表達式二、正則表達式基本語法2.1 行界定符2.2 單詞定界符2.3 字符類2.4 選擇符2.5 范圍符2.6 排除符2.7 限定符2.8 任意字符2.9 轉義字符2.10 反斜杠2.11 小括號2.11.1 定義獨立單元2.11.2 分組 2.12 反向引用2.13 特殊構造2.14 匹配模式 三、re模塊3.1 comp…

思邁特軟件攜手天陽科技,打造ChatBI金融智能分析新標桿

5月10日,廣州思邁特軟件有限公司(以下簡稱“思邁特軟件”)與天陽宏業科技股份有限公司(以下簡稱“天陽科技”)在北京正式簽署戰略合作協議。思邁特軟件董事長吳華夫、CEO姚詩成,天陽科技董事長兼總裁歐陽建…

OPENSSL-1.1.1的使用及注意事項

下載鏈接: OpenSSL1.1.1一個廣泛使用的開源加密庫資源-CSDN文庫 OpenSSL 1.1.1 是一個廣泛使用的開源加密庫,以下是其使用方法及注意事項: 使用方法 安裝: Linux系統: 從源碼編譯安裝:訪問 OpenSSL 官網…

數據庫優化

一、慢 SQL 排查全流程 1. 開啟慢查詢日志:精準定位問題 SQL 慢查詢日志是定位性能問題的首要工具,通過記錄執行超時或未使用索引的 SQL,為優化提供依據。 配置步驟: ① 臨時啟用(生效至服務重啟) sql …

GO語言-導入自定義包

文章目錄 1. 項目目錄結構2. 創建自定義包3. 初始化模塊4. 導入自定義包5. 相對路徑導入 在Go語言中導入自定義包需要遵循一定的目錄結構和導入規則。以下是詳細指南(包含兩種方式): 1. 項目目錄結構 方法1:適用于Go 1.11 &#…

記錄算法筆記(2025.5.11) 二叉樹的中序遍歷

給定一個二叉樹的根節點 root ,返回 它的 中序 遍歷 。 示例 1: 輸入:root [1,null,2,3] 輸出:[1,3,2] 示例 2: 輸入:root [] 輸出:[] 示例 3: 輸入:root [1] …

【iptables防火墻】 -- DDos防御

最近有客戶要定制路由器的默認防火墻等級,然后涉及到了DDos規則,對比客戶提供的規則發現我們現有的規則存在明顯的錯誤,在此記錄一下如何使用iptables防護DDoS攻擊 直接貼一下規則 #開啟TCP SYN Cookies 機制 sysctl -w net.ipv4.tcp_synco…

[Java][Leetcode simple]26. 刪除有序數組中的重復項

思路 第一個元素不動從第二個元素開始&#xff1a;只要跟上一個元素不一樣就放入數組中 public int removeDuplicates(int[] nums) {int cnt1;for(int i 1; i < nums.length; i) {if(nums[i] ! nums[i-1]) {nums[cnt] nums[i];}}return cnt;}

微服務!!

1.Nacos注冊中心 2.服務注冊 3.服務發現 4.負載均衡 5.OpenFeign 6.OpenFeign連接池 啟動程序 7.路由 8.微服務保護 1.雪崩問題 2.解決方案 1.請求限流 2.線程隔離 3.服務熔斷 3.Sentinel 1.鏈路 2.請求限流 3.線程隔離 4.Fallback 5.服務熔斷 4.分布式事務 1.Seata 2.部…

代碼隨想錄算法訓練營 Day44 動態規劃 ⅩⅠ 子序列問題

動態規劃 題目 1143. 最長公共子序列 - 力扣&#xff08;LeetCode&#xff09; 公共子序列&#xff0c;類似于最長重復子數組&#xff0c;但是不要求連續 (子序列) 1. 定義 dp&#xff0c;dp[i][j] 表示以 i-1 與 j-1 結尾的最長公共子序列的長度 2. 定義遞推公式 如果字符相…

聊一聊接口測試依賴第三方服務變更時如何處理?

目錄 一、依賴隔離與模擬 二、契約測試 三、版本控制與兼容性 四、變更監控與告警 五、容錯設計 六、自動化測試維護 七、協作機制與文檔自動化 第三方API突然改了參數或者返回結構&#xff0c;導致我們的測試用例失敗&#xff0c;這時候該怎么辦呢&#xff1f;首先想到…

Python程序,輸入IP,掃描該IP哪些端口對外是開放的,輸出端口列表

#!/usr/bin/env python # -*- coding: utf-8 -*-""" IP端口掃描程序 輸入IP地址&#xff0c;掃描該IP哪些端口對外是開放的&#xff0c;輸出端口列表 """import socket import sys import concurrent.futures import ipaddress from tabulate im…