SpringBoot跨域Jsonp和Cors的方法
有一次我的項目中采用了前后端分離的模式,引起了跨域問題,本文將介紹我所采用的跨域解決方法。
首先要了解產(chǎn)生跨域的本質,也就是同源策略的限制,源是指域名、端口號、協(xié)議,有一者不相同將被瀏覽器拒絕接受響應信息,(請求可以發(fā)送出去,但是瀏覽器不接受響應)。
解決方法:
1. jsonp
jsonp的原理的 src="" 屬性不受同源策略的限制,動態(tài)創(chuàng)建一個callback回調函數(shù),服務器調用回調函數(shù)把數(shù)據(jù)放進去,具體的細節(jié)打算以后做一個專門講解。
這里給一個模版:
$.ajax({ type: "get", //jsonp只能使用get async: false, url: "" dataType: "jsonp", jsonp: "callback", jsonpCallback:"message", //注意這里給回調函數(shù)起的名字 success: function(json){ } })
如果這里你的回調函數(shù)起名為message,那么你在后端返回json的時候,也要注意在最外面包一層message{}。
這里jsonp的確定也可以明顯的看出,只支持get請求,原因就是因為通過src=“”發(fā)送請求,所以可以知道是url傳參。
那么jsonp的好處是什么呢,兼容性,幾乎所有瀏覽器都支持(包括一些版本比較老的),不需要XMLHttpRequest或ActiveX的支持。
2. cors
又稱跨域訪問,瀏覽器將cors請求分為簡單請求和非簡單請求,因為本文主要講解具體的方法,所以關于細節(jié)部分有興趣可以去看其他博客或者我以后再做一篇具體的講解(和jsonp一起)。在springboot中,官方已經(jīng)提供了支持。直接貼代碼:
方式一:全局定義
@Configuration public class CorsConfig implements WebMvcConfigurer { private CorsConfiguration buildConfig() { CorsConfiguration corsConfiguration = new CorsConfiguration(); List<String> list = new ArrayList<>(); list.add("*"); corsConfiguration.setAllowedOrigins(list); /* // 請求常用的三種配置,*代表允許所有,當時你也可以自定義屬性 (比如header只能帶什么,只能是post方式等等) */ corsConfiguration.addAllowedOrigin("*"); //支持的源 corsConfiguration.addAllowedHeader("*"); //header限制 corsConfiguration.addAllowedMethod("*"); //支持方法 return corsConfiguration; } @Bean public CorsFilter corsFilter() { UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource(); source.registerCorsConfiguration("/**", buildConfig()); return new CorsFilter(source); } }
方式二:局部定義
@CrossOrigin(origins = "*",allowCredentials="true",allowedHeaders = "",methods = {})
直接在需要跨域的方法上添加注解,不過我沒試過,有興趣或者有這種方式需求的朋友可以嘗試一下。
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
- vue+springboot實現(xiàn)項目的CORS跨域請求
- 詳解springboot設置cors跨域請求的兩種方式
- Spring boot 和Vue開發(fā)中CORS跨域問題解決
- Springboot處理CORS跨域請求的三種方法
- 基于SpringBoot解決CORS跨域的問題(@CrossOrigin)
- 詳解springboot解決CORS跨域的三種方式
- Springboot處理配置CORS跨域請求時碰到的坑
- Springboot跨域CORS處理實現(xiàn)原理
- Spring Boot如何通過CORS處理跨域問題
- springboot跨域CORS處理代碼解析
- SpringBoot使用CORS實現(xiàn)無縫跨域的方法實現(xiàn)
相關文章
在MyBatis中實現(xiàn)一對多查詢和多對一查詢的方式詳解(各兩種方式)
今天通過兩種方法分別給大家介紹在MyBatis中實現(xiàn)一對多查詢和多對一查詢的方式,每種方式通過實例代碼給大家介紹的非常詳細,需要的朋友參考下吧2022-01-01Java import static及import原理區(qū)別解析
這篇文章主要介紹了Java import static及import原理區(qū)別解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2020-10-10