跨域問題一般都在后臺程序解決,將自己的程序通過配置文件或者代碼將其允許跨域,
創(chuàng)新互聯(lián)是一家朝氣蓬勃的網(wǎng)站建設(shè)公司。公司專注于為企業(yè)提供信息化建設(shè)解決方案。從事網(wǎng)站開發(fā),網(wǎng)站制作,網(wǎng)站設(shè)計,網(wǎng)站模板,微信公眾號開發(fā),軟件開發(fā),微信小程序,10年建站對成都地磅秤等多個方面,擁有多年的營銷推廣經(jīng)驗。
在有跨域安全的時候,所有前端post請求時,會發(fā)送一個與其請求名字一樣的OPTIONS
此請求沒有任何參數(shù),此機(jī)制為post不知道是否有權(quán)限請求接口,發(fā)送了一個探知請求,探知
請求確認(rèn)后,允許訪問后調(diào)用正常Post接口。 不允許就會出現(xiàn)你現(xiàn)在的問題跨域異常。
萌新,java是開源的,比NET好多了,多看看底層
1、通過后端代理的方式。即前端訪問的域名不變,根據(jù)域名后的資源路徑由后端服務(wù)器進(jìn)行訪問獲取數(shù)據(jù)后再返回給前端。
2、jsonp的方式,這個我個人比較推薦,尤其是一些對外開放的數(shù)據(jù)。但是主要應(yīng)用于get請求,其他請求方式不起效果。
3、跨域資源共享。Java后端的話可以在RequstMapping括號請求路徑上添加@CrossOrigin這個方式去實現(xiàn)允許接口跨域訪問,通過返回請求頭。這樣就可以is跨域處理方式。
這個問題的回答很多的吧。。
一個是用jsonp的方式
另一種就是在java代碼里接口那里加上
response.addHeader("Access-Control-Allow-Origin", "*");
response.addHeader("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS");
response.setHeader("Access-Control-Allow-Headers", "x-requested-with");
前言
相信大家在寫前端腳本的時候經(jīng)常會遇到發(fā)送數(shù)據(jù)到后臺的情況,但是由于瀏覽器的限制,不同域名之間的數(shù)據(jù)是不能互相訪問的,那前端怎么和后端如何進(jìn)行數(shù)據(jù)之間的交換呢?
JavaScript由于安全性方面的考慮,不允許頁面跨域調(diào)用其他頁面的對象,那么問題來了,什么是跨域問題?
答:這是由于瀏覽器同源策略的限制,現(xiàn)在所有支持JavaScript的瀏覽器都使用了這個策略。那么什么是同源呢?所謂的同源是指三個方面“相同”:
域名相同
協(xié)議相同
端口相同
下面就舉幾個例子來幫助更好的理解同源策略。
URL
說明
是否允許通信
同一域名 ? ?允許 ?
不同域名 ? ?不允許 ?
同一域名不同端口 ? ?不允許 ?
同一域名不同協(xié)議 ? ?不允許 ?
在JAVA中處理跨域問題,通常有以下兩種常用的解決方法。
第一種解決方法
后臺代碼在被請求的Servlet中添加Header設(shè)置:
response.setHeader("Access-Control-Allow-Origin", "*");
PrintWriter out =null;
try
{
out = response.getWriter();
} catch (IOException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
out.print("{'status':'ok'}");
out.flush();
out.close();
Access-Control-Allow-Origin這個Header在W3C標(biāo)準(zhǔn)里用來檢查該跨域請求是否可以被通過,如果值為*則表明當(dāng)前頁面可以跨域訪問。默認(rèn)的情況下是不允許的。
在前端JS中需要向Servlet發(fā)出請求,請求代碼如下所示:
$.ajax({
url: "your url",
type:"get or post",
dataType:"json",
data:{
....
},
success:function(data){
...
}
第二種解決方法
通過jsonp跨域請求的方式。JSONP和JSON雖然只有一個字母的區(qū)別,但是他們完全就是兩回事,很多人很容易把他們搞混。JSON是一種數(shù)據(jù)交換的格式,而JSONP則是一種非官方跨域數(shù)據(jù)交互協(xié)議。
首先來說一下前端JS是怎么發(fā)送請求。代碼如下所示:
$.ajax({
url:"your url",
type:"get or post",
async:false,
dataType : "jsonp",
//服務(wù)端用于接收callback調(diào)用的function名的參數(shù)
jsonp:"callbackparam",
//callback的function名稱
jsonpCallback:"success_jsonpCallback",
success:function(data){
console.log(data);
},
error:function(data){
console.log(data);
}
});
這里的callbackparam和success_jsonpCallback可以理解為發(fā)送的data數(shù)據(jù)的鍵值對,可以自定義,但是callbackparam需要和后臺約定好參數(shù)名稱,因為后臺需要獲取到這個參數(shù)里面的值(即success_jsonpCallback)。
下面,最重要的來了,后臺怎么樣獲取和返回數(shù)據(jù)呢。代碼如下所示:
PrintWriter out =null;
String callback=req.getParameter("callbackparam");
String json=callback+"({'status':'ok'})";
try
{
out = resp.getWriter();
} catch (IOException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
out.print(json);
out.flush();
out.close();
首先需要獲取參數(shù)名為callbackparam的值,這里獲取到的值就是“success_jsonpCallback”。然后將這個值加上一對小括號。小括號里放入你需要返回的數(shù)據(jù)內(nèi)容,比如這里我返回一個JSON對象。當(dāng)然你也可以返回其他對象,比如只返回一個字符串類型數(shù)據(jù)也可以。最后前端JS返回的數(shù)據(jù)就是這樣的:
success_jsonpCallback({'status':'ok'})
瀏覽器會自動解析為json對象,這時候你只需要在success回調(diào)函數(shù)中直接用data.status就可以了。
新聞名稱:java代碼解決跨域問題,java跨域產(chǎn)生的原因和解決方法
網(wǎng)頁網(wǎng)址:http://aaarwkj.com/article46/dsisjeg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供建站公司、網(wǎng)站設(shè)計公司、企業(yè)網(wǎng)站制作、定制開發(fā)、企業(yè)建站、標(biāo)簽優(yōu)化
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)