更新時(shí)間:2023-03-15 來(lái)源:黑馬程序員 瀏覽量:
瀏覽器判斷是跨域請(qǐng)求會(huì)在請(qǐng)求頭上添加origin,表示這個(gè)請(qǐng)求來(lái)源哪里。比如:
Plaintext GET / HTTP/1.1 Origin: http://localhost:8601
服務(wù)器收到請(qǐng)求判斷這個(gè)Origin是否允許跨域,如果允許則在響應(yīng)頭中說(shuō)明允許該來(lái)源的跨域請(qǐng)求,如下:
Plaintext Access-Control-Allow-Origin:http://localhost:8601
如果允許任何域名來(lái)源的跨域請(qǐng)求,則響應(yīng)如下:
Plaintext Access-Control-Allow-Origin:*
解決跨域的方法:
1、JSONP
通過(guò)script標(biāo)簽的src屬性進(jìn)行跨域請(qǐng)求,如果服務(wù)端要響應(yīng)內(nèi)容則首先讀取請(qǐng)求參數(shù)callback的值,callback是一個(gè)回調(diào)函數(shù)的名稱,服務(wù)端讀取callback的值后將響應(yīng)內(nèi)容通過(guò)調(diào)用callback函數(shù)的方式告訴請(qǐng)求方。如下圖:
2、添加響應(yīng)頭
服務(wù)端在響應(yīng)頭添加 Access-Control-Allow-Origin:
3、通過(guò)nginx代理跨域
由于服務(wù)端之間沒(méi)有跨域,瀏覽器通過(guò)nginx去訪問(wèn)跨域地址。

1)瀏覽器先訪問(wèn)http://192.168.101.10:8601 nginx提供的地址,進(jìn)入頁(yè)面
2)此頁(yè)面要跨域訪問(wèn)http://192.168.101.11:8601 ,不能直接跨域訪問(wèn)http://www.baidu.com:8601 ,而是訪問(wèn)nginx的一個(gè)同源地址,比如:http://192.168.101.11:8601/api ,通過(guò)http://192.168.101.11:8601/api 的代理去訪問(wèn)http://www.baidu.com:8601。
這樣就實(shí)現(xiàn)了跨域訪問(wèn)。
瀏覽器到http://192.168.101.11:8601/api 沒(méi)有跨域
nginx到http://www.baidu.com:8601通過(guò)服務(wù)端通信,沒(méi)有跨域。
我們準(zhǔn)備使用方案2解決跨域問(wèn)題。在內(nèi)容管理的api工程config包下編寫GlobalCorsConfig.java,
或直接從課程資料/項(xiàng)目工程下拷貝,
代碼如下:
Java
package com.xuecheng.system.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.cors.CorsConfiguration;
import org.springframework.web.cors.UrlBasedCorsConfigurationSource;
import org.springframework.web.filter.CorsFilter;
/**
* @description 跨域過(guò)慮器
* @author Mr.M
* @date 2022/9/7 11:04
* @version 1.0
*/
@Configuration
public class GlobalCorsConfig {
/**
* 允許跨域調(diào)用的過(guò)濾器
*/
@Bean
public CorsFilter corsFilter() {
CorsConfiguration config = new CorsConfiguration();
//允許白名單域名進(jìn)行跨域調(diào)用
config.addAllowedOrigin("*");
//允許跨越發(fā)送cookie
config.setAllowCredentials(true);
//放行全部原始頭信息
config.addAllowedHeader("*");
//允許所有請(qǐng)求方法跨域調(diào)用
config.addAllowedMethod("*");
UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
source.registerCorsConfiguration("/**", config);
return new CorsFilter(source);
}
}此配置類實(shí)現(xiàn)了跨域過(guò)慮器,在響應(yīng)頭添加Access-Control-Allow-Origin。
重啟系統(tǒng)管理服務(wù),前端工程可以正常進(jìn)入http://localhost:8601,觀察瀏覽器記錄,成功解決跨域。

1024首播|39歲程序員逆襲記:不被年齡定義,AI浪潮里再迎春天
2025-10-241024程序員節(jié)丨10年同行,致敬用代碼改變世界的你
2025-10-24【AI設(shè)計(jì)】北京143期畢業(yè)僅36天,全員拿下高薪offer!黑馬AI設(shè)計(jì)連續(xù)6期100%高薪就業(yè)
2025-09-19【跨境電商運(yùn)營(yíng)】深圳跨境電商運(yùn)營(yíng)畢業(yè)22個(gè)工作日,就業(yè)率91%+,最高薪資達(dá)13500元
2025-09-19【AI運(yùn)維】鄭州運(yùn)維1期就業(yè)班,畢業(yè)14個(gè)工作日,班級(jí)93%同學(xué)已拿到Offer, 一線均薪資 1W+
2025-09-19【AI鴻蒙開(kāi)發(fā)】上海校區(qū)AI鴻蒙開(kāi)發(fā)4期5期,距離畢業(yè)21天,就業(yè)率91%,平均薪資14046元
2025-09-19