java中跨域問題及解決方案

1. 什么是跨域

從不同的地址訪問另外一個地址就是跨域

2.跨域一定會有異常嗎

跨域異常只會在前端發生,后端跨域不會產生異常
因為瀏覽器有一個叫做同源策略的東西,它發現不同域之間的訪問是不安全的行為,會禁止,所以會拋出異常

3.五種解決跨域的方式

1. 跨域請求JSONP

前端配置

$.agax({url:’http://localhost:8080/cors/jsonp/1’,dataType:"jsonp",//jsonp:'a',不指定默認callback//jsonpCallback:"cc",不指定自動生產type:'GET',success:function(){alert(result.data);}});

后端配置:

@GetMapp("cors/jsonp/{id}")
public JSONObject getUser(@PathVariable Integer id,String callback){User user=new User("xushu","jsonp");return new JSONPObject(callback,new Resule<>(200,"SUCCESS",user))
}

好處:兼容各種瀏覽器
弊端:前端端都需要配置-耦合度高

2. 跨域請求cors【單一】

注意:需要用到@CrossOrigin注解

前端配置

$.agax({url:’http://localhost:8080/cors/1’,type:'GET',success:function(){alert(result.data);}});

后端配置:

@GetMapp("cors/{id}")
@CrossOrigin("http://localhost:8081")
public JSONObject getUser(@PathVariable Integer id){User user=new User("xushu","jsonp");return new Resule<>(200,"SUCCESS",user)}

注解:只支持單一的接口

3. 跨域請求cors【批量】

注意:后端需要實現WebMvcConfigurer

后端配置:

public class MyWebMvcConfigurer implements WebMvcConfigurer{@Overridepublic void addCorsMappings(CorsRegistry registry){registry.addMapping("user/*")//配置那些接口可以跨域.allowedOrigins("http://localhost:8080")//配置那些來源有權跨域.allowedMethods("GET","POST","DELETE","PUT");//配置運行跨域訪問方法};
}

4. 跨域請求cors【所有】

注意:后端需要配置過濾器

后端配置:

@Configuration
public class MyCorsFilter{//@Beanpublic CorsFilter corsFilter(){//1.創建CORS配置對象CorsConfiguration config=new CorsConfiguration();//支持域名config.addAllowedOriginPattern("*");//是否發送cookieconfig.setAllowCredentials(true);//支持請求方式config.addAllowedMethod("*");//添加地址映射UrlBasedCorsConfigurationSource corsConfigurationSource=new UrlBasedCorsConfigurationSource ();corsConfigurationSource.registerCorsConfiguration("/**",config);//返回corsFilter對象return new CorsFilter(corsConfigurationSource);}
}

優缺點:

優點:前端不需要寫代碼就可以支持,主要靠服務器進行配置**
缺點:IE瀏覽器不能低于IE10,瀏覽器一旦發現AJAX請求跨域,就會自動添加一些附加的頭信息,有時還會多出一次附加的請求,但用戶不會有感覺【option請求】

5.nginx 反向代理

在這里插入圖片描述

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

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

相關文章

網絡層協議 IP 協議介紹 -- IP 協議,網段劃分,私有 IP 和 公網 IP,路由

目錄 1 IP 協議 1.1 IP 協議格式 2. 網段劃分 2.1 網絡號和主機號 2.2 傳統 IP 地址分類和 CIDR 技術 2.3 特殊的 IP 地址 2.4 IP 地址的數量限制 2.5 私有 IP 和公網 IP 3. 路由 網絡層主要作用是實現不同局域網之間的通信連接&#xff0c;并為數據在復雜網絡環境中的…

【案例分享】KMDA-7611-S001--高性能嵌入式電腦助力雙臂輪式人形機器人應用

智能制造時代&#xff0c;雙臂輪式機器人需求浮出水面 隨著制造業、物流業和電子商務的飛速發展&#xff0c;智能搬運機器人正成為行業降本增效的核心工具。它們不僅解決了傳統物流中效率低、成本高、安全性差等痛點&#xff0c;更通過智能化與可擴展性設計&#xff0c;通過自主…

iOS App上線前的安全防線:項目后期如何用Ipa Guard與其他工具完成高效混淆部署

對大多數iOS開發者來說&#xff0c;安全并不是開發早期就能解決的問題。尤其在項目逐步進入上線準備階段后&#xff0c;才開始集中考慮逆向破解、資源泄露等安全隱患的解決方案。這個階段往往時間緊張、結構復雜&#xff0c;再要重構源碼或引入大規模修改幾乎不現實。因此&…

技術佃農時代:當云計算成為新型地主經濟

技術佃農時代:當云計算成為新型地主經濟 導語:當算力成為生產資料,云賬單背后的「數字佃租」正悄然重塑IT生產關系——我們是否在用自己的代碼為云廠商開墾數字荒地? 一、揭開云計算的「佃租算法」面紗 // 云經濟體的核心收割邏輯 public class CloudLandlord {public sta…

23種設計模式圖解

《設計模式&#xff1a;可復用面向對象軟件的基礎》是軟件工程領域的經典著作&#xff0c;由四位頂尖專家&#xff08;Erich Gamma、Richard Helm、Ralph Johnson和John Vlissides&#xff0c;合稱GoF&#xff09;編寫&#xff0c;首次系統化提出了23種設計模式&#xff0c;分為…

git新建一個分支到gitlab項目目錄中

先向git確認身份 git config --global user.email "youexample.com"看一下當前在哪個分支上&#xff08;沒啥影響&#xff09; git status lculation$ git status 位于分支 my_new_branch 您的分支與上游分支 origin/main 一致。 用origin/main分支來新建一個分支 …

云原生時代配置中心全景解讀:從Spring Cloud Config到Nacos深度實踐

摘要&#xff1a;在分布式系統和云原生架構中&#xff0c;配置管理已從簡單的鍵值存儲演進為核心基礎設施組件。本文深入解析四大主流配置中心&#xff08;Spring Cloud Config、Apollo、Nacos、Consul&#xff09;的架構設計與實戰應用&#xff0c;并分享生產環境下的最佳實踐…

Vue3 defineModel 原理解析

1. 引言 在上一篇文章中探討了v-model的實現原理&#x1f517;。本文將聚焦于Vue3.4版本新增的defineModel語法糖&#xff0c;它顯著簡化了組件中v-model的實現方式。我們將詳細解析defineModel的工作原理&#xff0c;并與3.4版本之前實現組件v-model的方法進行對比。 2. Vue…

GRPO訓練布局感知的強化學習多模態文檔解析框架-Infinity-Parser

前期《文檔智能》專欄詳細中介紹了文檔智能解析詳細pipline鏈路技術方案&#xff0c;如下圖&#xff1a; 現在來看一個新思路&#xff0c;指出pipline鏈路依賴大量標注數據、并且會出現錯誤傳播問題&#xff0c;導致解析效果不佳&#xff0c;故提出一個基于布局強化學習&…

【超詳細】訊飛智能車PC電腦燒錄指南(高級系統部署與恢復)

本指南旨在詳細指導您如何使用PC電腦上的瑞芯微開發工具&#xff0c;對訊飛智能車進行固件燒錄、分區鏡像燒寫和設備擦除等高級操作。這些操作通常用于系統出現嚴重問題、需要全新部署固件或進行底層恢復時。 一、所需設備與工具 在開始操作之前&#xff0c;請確保您準備好以…

【親測可用】html+css3+ajax+php文件夾拖放上傳系統(保持文件結構上傳)

文件夾拖放上傳系統&#xff08;保持文件結構&#xff09; 下面是一個完整的HTML5CSS3AJAXPHP實現&#xff0c;支持拖放文件夾上傳并保持原有文件結構的解決方案。 前端部分 (index.html) <!DOCTYPE html> <html lang"zh-CN"> <head><meta c…

什么是數據清洗?數據清洗有哪些步驟?

目錄 一、數據清洗的定義和重要性 1. 數據清洗的定義 2. 數據清洗的重要性 二、數據清洗的前期準備 1. 明確清洗目標 2. 了解數據來源和背景 3. 制定清洗計劃 三、數據清洗的具體步驟 1. 數據審計 2. 處理缺失值 3. 處理重復值 4. 處理異常值 5. 數據標準化 6. 數…

Vue3+TypeScript中v-bind()的原理與用法

在 Vue 3 的單文件組件&#xff08;SFC&#xff09;中&#xff0c;v-bind() 用于在 <style> 塊中動態綁定 CSS 值到組件的響應式數據&#xff0c;實現了狀態驅動樣式的能力。下面詳細講解其原理和用法&#xff1a; 一、核心原理 CSS 變量注入 Vue 編譯器會將 v-bind() 轉…

2 geotools入門示例

1. 設置 Spring Boot 項目并集成 GeoTools 依賴 首先&#xff0c;你需要創建一個新的 Spring Boot 項目。你可以使用 Spring Initializr 來快速生成項目骨架。 選擇以下依賴&#xff1a; Web: Spring Web (用于創建 REST API)Developer Tools: Spring Boot DevTools (可選&a…

深度解析String不可變性:從Java底層到設計哲學

一、String不可變性的直觀理解 在Java中,String對象一旦創建,其內容就不可更改。任何看似"修改"String的操作,實際上都是創建了一個全新的String對象。這種設計是Java語言基礎架構的重要部分,理解其底層原理對編寫高效、安全的Java程序至關重要。 String str =…

C++并發編程-2.C++ 線程管控

參考&#xff1a;https://llfc.club/category?catid225RaiVNI8pFDD5L4m807g7ZwmF#!aid/2Tuk4RfvfBC788LlqnQrWiPiEGW 1. 簡歷 本節介紹C線程管控&#xff0c;包括移交線程的歸屬權&#xff0c;線程并發數量控制以及獲取線程id等基本操作。 2. 線程歸屬權 比如下面&#xff…

Qt面試常問

1.QT信號與槽的底層原理&#xff1f; 底層通過元對象系統和事件循環完成的&#xff0c;能夠在運行期間動態處理信號槽之間的連接與斷開&#xff0c;而不是像函數調用那樣在編譯期間就完全確定了。元對象系統包含&#xff1a;QObject類、Q_OBJECT宏定義、moc編譯器當發送一個信…

【git】錯誤

【成功解決】開代理 unable to access ‘https://github.com/laigeoffer/pmhub.git/’: Recv failure: Connection was reset

什么是狀態機?狀態機入門

狀態機&#xff1a;優雅管理復雜邏輯的Python實踐 在軟件開發中&#xff0c;狀態機&#xff08;Finite State Machine, FSM&#xff09; 是管理多狀態轉換的利器。它將行為分解為離散的狀態、事件和轉移規則&#xff0c;大幅提升代碼的可讀性與可維護性。本文通過Python示例解析…

【Python打卡Day41】簡單CNN@浙大疏錦行

可以看到即使在深度神經網絡情況下&#xff0c;準確率仍舊較差&#xff0c;這是因為特征沒有被有效提取----真正重要的是特征的提取和加工過程。MLP把所有的像素全部展平了&#xff08;這是全局的信息&#xff09;&#xff0c;無法布置到局部的信息&#xff0c;所以引入了卷積神…