Spring Boot設(shè)置支持跨域請求過程詳解
現(xiàn)代瀏覽器出于安全的考慮, HTTP 請求時必須遵守同源策略,否則就是跨域的 HTTP 請求,默認情況下是被禁止的,IP(域名)不同、或者端口不同、協(xié)議不同(比如 HTTP、HTTPS)都會造成跨域問題。
一般前端的解決方案有:
① 使用 JSONP 來支持跨域的請求,JSONP 實現(xiàn)跨域請求的原理簡單的說,就是動態(tài)創(chuàng)建<script>標簽,然后利用<script>的 SRC 不受同源策略約束來跨域獲取數(shù)據(jù)。缺點是需要后端配合輸出特定的返回信息。 ② 利用反應(yīng)代理的機制來解決跨域的問題,前端請求的時候先將請求發(fā)送到同源地址的后端,通過后端請求轉(zhuǎn)發(fā)來避免跨域的訪問。后來 HTML5 支持了 CORS 協(xié)議。CORS 是一個 W3C 標準,全稱是”跨域資源共享”(Cross-origin resource sharing),允許瀏覽器向跨源服務(wù)器,發(fā)出 XMLHttpRequest 請求,從而克服了 AJAX 只能同源使用的限制。它通過服務(wù)器增加一個特殊的 Header[Access-Control-Allow-Origin]來告訴客戶端跨域的限制,如果瀏覽器支持 CORS、并且判斷 Origin 通過的話,就會允許 XMLHttpRequest 發(fā)起跨域請求。
前端使用了 CORS 協(xié)議,就需要后端設(shè)置支持非同源的請求,Spring Boot 設(shè)置支持非同源的請求有兩種方式。
第一,配置 CorsFilter。
@Configurationpublic class GlobalCorsConfig { @Bean public CorsFilter corsFilter() { CorsConfiguration config = new CorsConfiguration(); config.addAllowedOrigin('*'); config.setAllowCredentials(true); config.addAllowedMethod('*'); config.addAllowedHeader('*'); config.addExposedHeader('*'); UrlBasedCorsConfigurationSource configSource = new UrlBasedCorsConfigurationSource(); configSource.registerCorsConfiguration('/**', config); return new CorsFilter(configSource); }}
需要配置上述的一段代碼。第二種方式稍微簡單一些。
第二,在啟動類上添加:
public class Application extends WebMvcConfigurerAdapter { @Override public void addCorsMappings(CorsRegistry registry) { registry.addMapping('/**') .allowCredentials(true) .allowedHeaders('*') .allowedOrigins('*') .allowedMethods('*'); } }
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持好吧啦網(wǎng)。
相關(guān)文章:
1. HTTP協(xié)議常用的請求頭和響應(yīng)頭響應(yīng)詳解說明(學(xué)習(xí))2. idea設(shè)置提示不區(qū)分大小寫的方法3. IntelliJ IDEA設(shè)置默認瀏覽器的方法4. CentOS郵件服務(wù)器搭建系列—— POP / IMAP 服務(wù)器的構(gòu)建( Dovecot )5. IntelliJ IDEA創(chuàng)建web項目的方法6. .NET SkiaSharp 生成二維碼驗證碼及指定區(qū)域截取方法實現(xiàn)7. VMware中如何安裝Ubuntu8. docker容器調(diào)用yum報錯的解決辦法9. 原生JS實現(xiàn)記憶翻牌游戲10. ASP.NET MVC通過勾選checkbox更改select的內(nèi)容
