react中 ajax跨域請求
阿新 • • 發佈:2019-01-03
因為專案需要,目前需要通過react ajax請求,實現請求其它域的登入URL,將使用者寫入到其它域的cookie中,之後herf連線該網址的其他內容的時候,便可直接跳轉到對應內容,無需跳轉到登入頁面。
1、cors和jsonp
何為跨域,及當一個請求url的協議、域名、埠三者之間任意一與當前頁面地址不同即為跨域。在做跨域請求的時候,cors和jsonp我都嘗試過了。
1.1cors
cors(Cross-Origin Resource Sharing 跨源資源共享)。簡單請求時,瀏覽器會直接傳送跨域請求,並在請求頭中攜帶Origin 的header,表明這是一個跨域的請求。伺服器端接到請求後,會根據自己的跨域規則,通過Access-Control-Allow-Origin和Access-Control-Allow-Methods響應頭,來返回驗證結果。如果驗證成功,則會直接返回訪問的資源內容。1.2jsonp
舉一個案例來說明。
假設客戶期望返回JSON資料:["customername1","customername2"]。
如客戶想訪問 : http://localhost:3000?jsonp=callbackfunction。
真正返回到客戶端的資料顯示為: callbackFunction(["customername1","customername2"])。
最後還是採用的cors實現了,jsonp雖然請求成功了,但是針對callback函式,我這邊還沒有解決。
2、cors在後端的配置
2.1 nodejs的配置
//該程式碼所放置的位置需要靠前,如果後端有redirect跳轉連結,則需要將此程式碼放置在redirect前 app.use(function(req, res, next) { res.header("Access-Control-Allow-Origin", "*" );//若需要加入withCredentials,則需要將*改為具體域名 res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept"); next(); });
2.2 php的配置
<?php header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Headers: Origin, X-Requested-With, Content-Type, Accept');
//主要為跨域CORS配置的兩大基本資訊,Origin和headers
3、react 前端請求
前端若採用ajax請求,get或者post資料,按照正常的方式即可。 $.ajax({
//需要跨域的url
url:"****",
method: "POST",
crossDomain:true,
xhrFields:{withCredentials:true},
beforeSend:function(xhr){
xhr.withCredentials=true;
},
success: function (data) {
console.log(data);
}.bind(this),
error: function (xhr, status, err) {
console.log(err);
}.bind(this)
});