2023年10月31日 星期二

cors

 

報錯問題如下

Access to XMLHttpRequest at 'http://localhost:63110/system/dictionary/all' from origin 'http://localhost:8601' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.

從http://localhost:8601訪問http://localhost:63110/system/dictionary/all被CORS policy阻止,因為沒有Access-Control-Allow-Origin 頭信息。CORS全稱是 cross origin resource share 表示跨域資源共享。

出這個提示的原因是基於瀏覽器的同源策略,去判斷是否跨域請求,同源策略是瀏覽器的一種安全機制,從一個地址請求另一個地址,如果協議、主機、端口三者全部一致則不屬於跨域,否則有一個不一致就是跨域請求。

比如:

從http://localhost:8601  到   http://localhost:8602  由於端口不同,是跨域。

從http://192.168.101.10:8601  到   http://192.168.101.11:8601  由於主機不同,是跨域。

從http://192.168.101.10:8601  到   https://192.168.101.10:8601  由於協議不同,是跨域。


註意:服務器之間不存在跨域請求。

瀏覽器判斷是跨域請求會在請求頭上添加origin,表示這個請求來源哪裏。

比如:

GET / HTTP/1.1
Origin: http://localhost:8601


服務器收到請求判斷這個Origin是否允許跨域,如果允許則在響應頭中說明允許該來源的跨域請求,如下:
Access-Control-Allow-Originhttp://localhost:8601

如果允許任何域名來源的跨域請求,則響應如下:
Access-Control-Allow-Origin*

目前~簡易解法就是在所有的響應頭上加

 Access-Control-Allow-Origin*




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: 跨域過慮器
 * @author: Ian Wang
 * @date: 2023/10/31 上午 10:38
 * @version: 1.0
 */
@Configuration
public class GlobalCorsConfig {
    /**
     * 允許跨域調用的過濾器
     */
    @Bean
    public CorsFilter corsFilter() {
        CorsConfiguration config = new CorsConfiguration();
        //允許白名單域名進行跨域調用
        config.addAllowedOrigin("*");
        //允許跨越發送cookie
        config.setAllowCredentials(true);
        //放行全部原始頭信息
        config.addAllowedHeader("*");
        //允許所有請求方法跨域調用
        config.addAllowedMethod("*");
        UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
        source.registerCorsConfiguration("/**", config);
        return new CorsFilter(source);
    }
}

沒有留言:

張貼留言

進修6個月後, 找到工作了

這次找工作有一些感想 我是覺得, 邊準備邊找還是有點差勁的方式 這等同我前面幾家會有機會被直接浪費掉 但是面試會問的問題, 真的涵蓋的太廣, 要每個都準備熟悉,  (突然想到一個靈感, 寫一個網頁來隨機出題, 然後自己考自己, 或許寫成app) 大約準備上, 是可以看黑馬程序員出...