總結下跨域問題及解決辦法

跨域

引用知乎上寫的比較好的一個定義:跨域是指從一個域名的網頁去請求另一個域名的資源。比如從http://www.baidu.com/ 頁面去請求 http://www.google.com 的資源。跨域的嚴格一點的定義是:只要 協議,域名,端口有任何一個的不同,就被當作是跨域。

跨域問題

1.出於安全考慮,一般瀏覽器默認不支持跨域請求,必須要求請求的接口端明確支持跨域纔可以。
2.前端跨域請求默認不會攜帶cookie信息,這樣會導致一些信息丟失,比如sessionId。

解決跨域

後端:
服務端給http頭部設置( “Access-Control-Allow-Origin”:"*" )屬性

前端:
爲了解決跨域時不能攜帶cookie問題,前端需要設置
xhrFields: {
withCredentials: true
}

服務端配置

常用的springboot跨域配置:

  1. @CrossOrigin註解 ,對方法進行註解,說明該方法支持跨域,對類進行註解,說明該類所有方法支持跨域;
  2. WebMvcConfigurer接口,實現接口方法addCorsMappings;
  3. WebSecurityConfigurerAdapter ,繼承該類,實現configure接口;

測試案例

跨域測試思路如下:
1:springboot在方法或類上配置@CrossOrigin註解或採用實現WebMvcConfigurer接口或繼承WebSecurityConfigurerAdapter類
2:本地修改hosts文件,配置127.0.0.1域名映射兩個域名(localhost、lcoalhost1)
3:在前端界面以一個不同的域名去調用接口方法(比如以localhost訪問靜態頁面,然後通過localhost1去調用服務端接口,這樣就模擬了跨域)

案例代碼

https://github.com/ingorewho/do-test/tree/master/crosorigin-test

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