摘要:而前端跨域請(qǐng)求的需求不減,于是乎??缬蛞脖容^簡(jiǎn)單,只需添加以下配置即可。參考文檔,阿里云中文檔描述到也可通過(guò)配置文件跨域,不過(guò)筆者并未采用這種方式。瀏覽器設(shè)置跨域本身是可以通過(guò)配置支持跨域請(qǐng)求的??缬騾⒖嘉臋n跨域參考文檔
SpringBoot跨域配置
我們的后端使用Spring Boot。Spring Boot跨域非常簡(jiǎn)單,只需書(shū)寫(xiě)以下代碼即可。
@Configuration public class CustomCORSConfiguration { private CorsConfiguration buildConfig() { CorsConfiguration corsConfiguration = new CorsConfiguration(); corsConfiguration.addAllowedOrigin("*"); corsConfiguration.addAllowedHeader("*"); corsConfiguration.addAllowedMethod("*"); return corsConfiguration; } @Bean public CorsFilter corsFilter() { UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource(); source.registerCorsConfiguration("/**", buildConfig()); return new CorsFilter(source); } }Nginx跨域配置
某天,我們將Spring Boot應(yīng)用用Nginx反向代理。而前端跨域請(qǐng)求的需求不減,于是乎。
Nginx跨域也比較簡(jiǎn)單,只需添加以下配置即可。
location / { proxy_pass http://localhost:8080; if ($request_method = "OPTIONS") { add_header "Access-Control-Allow-Origin" "*"; add_header "Access-Control-Allow-Methods" "GET, POST, OPTIONS"; add_header "Access-Control-Allow-Headers" "DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Content-Range,Range,Token"; add_header "Access-Control-Max-Age" 1728000; add_header "Content-Type" "text/plain; charset=utf-8"; add_header "Content-Length" 0; return 204; } if ($request_method = "POST") { add_header "Access-Control-Allow-Origin" "*"; add_header "Access-Control-Allow-Methods" "GET, POST, OPTIONS"; add_header "Access-Control-Allow-Headers" "DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Content-Range,Range,Token"; add_header "Access-Control-Expose-Headers" "DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Content-Range,Range,Token"; } if ($request_method = "GET") { add_header "Access-Control-Allow-Origin" "*"; add_header "Access-Control-Allow-Methods" "GET, POST, OPTIONS"; add_header "Access-Control-Allow-Headers" "DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Content-Range,Range,Token"; add_header "Access-Control-Expose-Headers" "DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Content-Range,Range,Token"; } }
其中: add_header "Access-Control-Expose-Headers" 務(wù)必加上你請(qǐng)求時(shí)所帶的header。例如本例中的“Token”,其實(shí)是前端傳給后端過(guò)來(lái)的。如果記不得也沒(méi)有關(guān)系,瀏覽器的調(diào)試器會(huì)有詳細(xì)說(shuō)明。
參考文檔:https://enable-cors.org/serve...
B.T.W,阿里云中文檔描述到Nginx也可通過(guò)crossdomain.xml配置文件跨域:https://helpcdn.aliyun.com/kn... ,不過(guò)筆者并未采用這種方式。
CORS on NginxThe following Nginx configuration enables CORS, with support for preflight requests.
# # Wide-open CORS config for nginx # location / { if ($request_method = "OPTIONS") { add_header "Access-Control-Allow-Origin" "*"; add_header "Access-Control-Allow-Methods" "GET, POST, OPTIONS"; # # Custom headers and headers various browsers *should* be OK with but aren"t # add_header "Access-Control-Allow-Headers" "DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Content-Range,Range"; # # Tell client that this pre-flight info is valid for 20 days # add_header "Access-Control-Max-Age" 1728000; add_header "Content-Type" "text/plain; charset=utf-8"; add_header "Content-Length" 0; return 204; } if ($request_method = "POST") { add_header "Access-Control-Allow-Origin" "*"; add_header "Access-Control-Allow-Methods" "GET, POST, OPTIONS"; add_header "Access-Control-Allow-Headers" "DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Content-Range,Range"; add_header "Access-Control-Expose-Headers" "DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Content-Range,Range"; } if ($request_method = "GET") { add_header "Access-Control-Allow-Origin" "*"; add_header "Access-Control-Allow-Methods" "GET, POST, OPTIONS"; add_header "Access-Control-Allow-Headers" "DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Content-Range,Range"; add_header "Access-Control-Expose-Headers" "DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Content-Range,Range"; } }瀏覽器設(shè)置跨域
Chrome、Firefox本身是可以通過(guò)配置支持跨域請(qǐng)求的。
Chrome跨域:參考文檔:http://www.cnblogs.com/laden6...
Firefox跨域:參考文檔:https://segmentfault.com/q/10...
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/75857.html
摘要:在接觸前端開(kāi)發(fā)起,跨域這個(gè)詞就一直以很高的頻率在我們學(xué)習(xí)工作中重復(fù)出現(xiàn),最近在工作中遇到了跨域的相關(guān)問(wèn)題,這里我把它總結(jié)記錄一下。 在接觸前端開(kāi)發(fā)起,跨域這個(gè)詞就一直以很高的頻率在我們學(xué)習(xí)工作中重復(fù)出現(xiàn),最近在工作中遇到了跨域的相關(guān)問(wèn)題,這里我把它總結(jié)記錄一下。關(guān)于跨域,有N種類型,現(xiàn)在我只專注于ajax請(qǐng)求跨域(ajax跨域只是屬于瀏覽器同源策略中的一部分,其它的這里不做介紹),內(nèi)容...
摘要:關(guān)于,強(qiáng)烈推薦閱讀跨域資源共享詳解阮一峰另外,這里也整理了一個(gè)實(shí)現(xiàn)原理圖簡(jiǎn)化版如何判斷是否是簡(jiǎn)單請(qǐng)求瀏覽器將請(qǐng)求分成兩類簡(jiǎn)單請(qǐng)求和非簡(jiǎn)單請(qǐng)求。 前言 從剛接觸前端開(kāi)發(fā)起,跨域這個(gè)詞就一直以很高的頻率在身邊重復(fù)出現(xiàn),一直到現(xiàn)在,已經(jīng)調(diào)試過(guò)N個(gè)跨域相關(guān)的問(wèn)題了,16年時(shí)也整理過(guò)一篇相關(guān)文章,但是感覺(jué)還是差了點(diǎn)什么,于是現(xiàn)在重新梳理了一下。 個(gè)人見(jiàn)識(shí)有限,如有差錯(cuò),請(qǐng)多多見(jiàn)諒,歡迎提出iss...
摘要:跨域總結(jié)跨域思路跨域解決方案一般分為兩種前端解決,后端解決前端解決方案通過(guò)前端解決的思想就是,通過(guò)設(shè)置中間件把跨域的請(qǐng)求轉(zhuǎn)發(fā)一下,其實(shí)就是反向代理,比如想要訪問(wèn)豆瓣的接口很會(huì)有跨域問(wèn)題,但是如果請(qǐng)求的是就不存在跨域反向代理就是截取之后的請(qǐng)求 跨域總結(jié) 1.跨域思路 跨域解決方案一般分為兩種:前端解決,后端解決 1.1 前端解決方案 通過(guò)前端解決的思想就是,通過(guò)設(shè)置中間件把跨域的請(qǐng)求轉(zhuǎn)發(fā)...
摘要:本章目標(biāo)基于項(xiàng)目搭建可以站外請(qǐng)求訪問(wèn)的跨域資源服務(wù)器。允許所有的請(qǐng)求域名訪問(wèn)我們的跨域資源,可以固定單條或者多條內(nèi)容,如,只有百度可以訪問(wèn)我們的跨域資源。 CORS(Cross-Origin Resource Sharing)跨域資源共享,是一個(gè)W3C標(biāo)準(zhǔn),它允許瀏覽器向跨域服務(wù)器發(fā)送Ajax請(qǐng)求,打破了Ajax只能訪問(wèn)本站內(nèi)的資源限制,CORS在很多地方都有被使用,微信支付的JS支付...
摘要:前言最近在業(yè)務(wù)代碼中深受跨域問(wèn)題困擾,因此特別寫(xiě)一篇博客來(lái)記錄一下自己對(duì)跨域的理解以及使用到的參考資料。內(nèi)嵌式跨域通常也是允許的。而我使用時(shí)因?yàn)檫@個(gè)響應(yīng)報(bào)文最后被認(rèn)為是跨域問(wèn)題,無(wú)法從中獲得的狀態(tài)碼。它代表服務(wù)器支持跨域時(shí)攜帶認(rèn)證信息。 前言 最近在業(yè)務(wù)代碼中深受跨域問(wèn)題困擾,因此特別寫(xiě)一篇博客來(lái)記錄一下自己對(duì)跨域的理解以及使用到的參考資料。本文的項(xiàng)目背景基于vue+vuex+axio...
閱讀 1261·2023-04-26 02:38
閱讀 944·2023-04-25 20:13
閱讀 3599·2021-11-19 11:31
閱讀 2403·2019-08-30 15:55
閱讀 2731·2019-08-30 14:11
閱讀 3171·2019-08-30 13:45
閱讀 1385·2019-08-29 18:41
閱讀 1158·2019-08-29 16:18