javaweb服務端跨域支援

2021-08-03 06:32:08 字數 2267 閱讀 7201

專案開發為了支援web瀏覽器ajax的直接請求,涉及到了跨域的需求,通過學習對跨域有了更深入的認識,現在總結一下:

跨域指請求和服務的域不一致,瀏覽器和h5的ajax請求有影響,而對服務端之間的http請求沒有限制。

跨域是瀏覽器攔截了伺服器端返回的相應,不是攔截了請求。

服務端的跨域支援主要包括兩種方式:

1.設定response的header屬性

response.setheader("access-control-allow-origin", "*");//允許跨域訪問的域,可以是萬用字元」*」;

response.setheader("access-control-allow-methods", "post, get");

response.setheader("access-control-max-age", "1800");

response.setheader("access-control-allow-headers", "x-requested-with");

response.setheader("access-control-allow-credentials", "true");

注:access-control-allow-origin剛開始認為可以維護乙個域的列表,用逗號分隔,後期測試中發現不行,後來在一篇文章中看到此處只允許配置乙個域,如果要實現多個域,可以維護乙個域列表,與請求中的域進行匹配,匹配成功,則設定跨域為當前域。

2.通過jsonp來實現跨域

使用jsonp來實現跨域可以解決ie下不能跨域的問題,僅僅支援get請求

服務端多加乙個引數callback,在返回資料時用callback把具體的資料報裹起來,傳回前端。

例:請求中callback的引數值為jsonpcallback,返回資料為

返回到前端的資料應該是jsonpcallback()

1.springboot實現(較新的版本支援)

1.1 方法級別

註解@crossorigin支援方法級別的跨域,支援多個不同的域,沒有測試過

@crossorigin(origins="",allowcredentials="false",maxage=3600)
1.2 應用級別
@configuration

public

class

extends

webmvcconfigureradapter

}

2.直接使用response來做處理
response.setheader("access-control-allow-origin", "*");//允許跨域訪問的域,可以是萬用字元」*」;

response.setheader("access-control-allow-methods", "post, get");

response.setheader("access-control-max-age", "1800");

response.setheader("access-control-allow-headers", "x-requested-with");

response.setheader("access-control-allow-credentials", "true");

1.客戶端傳送ajax請求時,設定datatype為jsonp

2.服務端處理

(1)寫乙個方法實現介面methodinterceptor,重寫invoke方法

string callback = request.getparameter("callback");

if(stringutils.isnotblank(callback))else

(2)使用fastjson的jsonpobject 來實現

jsonpobject ret =

new jsonpobject(callback);

ret.addparameter(data);

//callback就是引數callback的值

//addparameter就是要返回的資料

//呼叫tojsonstring即可看到結果

備註:第一次寫技術部落格,如果有錯誤,請指正,一塊學習,共同進步。

java web服務端CORS跨域配置

cors crossorigin resource sharing,即跨域資源共享,它定義了一種伺服器和瀏覽器的互動方式來確定是否允許跨域請求。cors簡單靈活,但有風險性,能實現ajax跨域訪問。cors是乙個由瀏覽器共同遵循的一套策略,通過http的header來進行互動。當瀏覽器識別到傳送的請...

java 服務端設定跨域

自 setheader name,value 如果header中沒有定義則新增,如果已定義則用新的value覆蓋原用value值。addheader name,value 如果header中沒有定義則新增,如果已定義則保持原有value不改變。最簡單的處理方式 response.setheader ...

設定nginx允許服務端跨域

目前專案大多使用前後端分離的模式進行開發,跨域請求當然就是必不可少了,很多時候我們會使用在客戶端的ajax 請求中設定跨域請求,也有的在服務端設定跨域。但是有時候會遇到不使用ajax也沒有使用後端服務的情況 如 openlayers 載入本地的arcgis 瓦片資料 我們只需要進行一些靜態資源的獲取...