1、什麼是跨域問題? 跨域問題是瀏覽器對於ajax請求的一種安全限制:一個頁面發起的ajax請求,只能是用當前頁同功能變數名稱同埠的路徑,這能有效的阻止跨站攻擊。 2、跨域問題出現的條件: 1、跨域問題是ajax請求特有的問題。 2、前後端的功能變數名稱、埠不一致。 3、CORS跨域解決原理簡單分析: CORS ...
1、什麼是跨域問題?
跨域問題是瀏覽器對於ajax請求的一種安全限制:一個頁面發起的ajax請求,只能是用當前頁同功能變數名稱同埠的路徑,這能有效的阻止跨站攻擊。
2、跨域問題出現的條件:
1、跨域問題是ajax請求特有的問題。
2、前後端的功能變數名稱、埠不一致。
3、CORS跨域解決原理簡單分析:
CORS需要瀏覽器和伺服器的同時支持。
瀏覽器端(瀏覽器自動完成):
發送兩次請求,第一次發送option請求 --詢問伺服器端是否可以跨域;
第二次才發送正式請求。
伺服器端:
通過攔截器/過濾器統一實現,過濾器過濾所有的請求,匹配對應的ip+埠,如果符合條件,則在響應頭中添加允許跨域訪問的信息。
4、CORS跨域解決方案:
1、 在網關中配置一個CORS的跨域過濾器:SpringMVC已經幫我們寫好了CORS的跨域過濾器,直接使用即可。
2、 在網關中創建一個配置文件告訴過濾器允許通過的功能變數名稱和埠即可。
在網關中添加如下配置文件即可(springMVC環境下)
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; @Configuration public class GlobalCorsConfig { @Bean public CorsFilter corsFilter() { //1.添加CORS配置信息 CorsConfiguration config = new CorsConfiguration(); //1) 允許通過的域,不要寫*,否則cookie就無法使用了 config.addAllowedOrigin("http://127.0.0.1:7001"); config.addAllowedOrigin("http://localhost:7001"); //2) 是否發送Cookie信息 config.setAllowCredentials(true); //3) 允許的請求方式 config.addAllowedMethod("OPTIONS"); config.addAllowedMethod("HEAD"); config.addAllowedMethod("GET"); config.addAllowedMethod("PUT"); config.addAllowedMethod("POST"); config.addAllowedMethod("DELETE"); config.addAllowedMethod("PATCH"); // 4)允許的頭信息 config.addAllowedHeader("*"); //2.添加映射路徑,我們攔截一切請求 UrlBasedCorsConfigurationSource configSource = new UrlBasedCorsConfigurationSource(); configSource.registerCorsConfiguration("/**", config); //3.返回新的CorsFilter. return new CorsFilter(configSource); } }