xxx has been blocked by CORS policy;跨域資源共享策略

1、現象描述

寫好的接口部署到了公司內網環境上,交給前端聯調時卻出現了下面的問題:

Access to XMLHttpRequest at 'xxx' from origin 'xxx' has been blocked by CORS policy: No
 'Access-Control-Allow-Origin' header is present on the requested resource.

在這裏插入圖片描述

2、問題分析

與前端人員溝通後,發現前端人員是在他本機啓了一個vue前端工程,運行地址爲localhost:8080,而接口所在服務器地址爲192.168.xx.xx,此時前端調用接口就屬於跨域的HTTP請求(cross-origin HTTP requests),而默認情況下瀏覽器出於安全性考慮會限制這種請求,這也是報錯中出現“xxx has been blocked by CORS policy”的原因。
CORS,全稱爲Corss-Origin Resource Sharing,即跨域資源共享,它是這樣一種機制,該機制使用額外的HTTP頭部信息告訴瀏覽器在一個域中運行的web應用可以訪問來自不同域的資源,但是這種頭部信息默認是沒有添加的,也就是說默認情況下不允許跨域訪問。
當web application請求一個不同於自身域(包括域名、協議和端口上的不同)的資源時,會執行cross-origin請求。

3、問題解決

清楚了問題發生的根源後,我們只需添加這樣一條響應頭信息即可,詳見下面代碼:

@GetMapping("nodeWarn")
    public JSONObject selectNodeWarning(HttpServletRequest request, HttpServletResponse response,
                                        @RequestParam(value = "period", required = false) String period,
                                        @RequestParam(value = "caseType", required = false) String caseType) {
        response.setHeader("Access-Control-Allow-Origin", "*");
        JSONObject jsonObject = new JSONObject();
        jsonObject.put("name", "Peter");
        return jsonObject;
    }

Access-Control-Allow-Origin爲*表示該資源能被任何域訪問。

4、總結

當然上面只是在Java接口中的解決辦法,還有在其他地方解決該問題的辦法,等遇到再進行整理。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章