前端部分,簡單的封裝乙個promise版的ajax
let myajax = (function (), headers={}})else}}
xhr.open(method, path);
for(let [key, value] of object.entries(headers))
xhr.send(body)})}
}())
myajax(),
headers:
}).then(data=>, err=>)
後端用nodejs + express
const express = require("express");
const bodyparser = require("body-parser");
bodyparser.urlencoded()
); console.log("running");
}); res.header("access-control-allow-origin", "*");
res.header("access-control-allow-headers", "x-requested-withs,content-type");
res.header("access-control-allow-methods", "put,post,get,delete,options");
res.header("x-powered-by", " 3.2.1");
next();
}); console.log(req.body);
res.send(json.stringify());
});
主要就是設定這一部分
res.header("access-control-allow-origin", "*"); //指定那些**可以跨域資源共享, *代表所有,可以填具體的,如 代表這個**可以向你請求資源
res.header("access-control-allow-headers", "x-requested-withs,content-type"); //指定請求頭的型別,在前端我們設定的是content-type,這裡一定要加進來,多個請求頭型別以逗號分開
res.header("access-control-allow-methods", "put,post,get,delete,options");//指定請求型別,post,get等等
next(); //最後一定要next()一下才會生效
});
測試服務端執行在localhost:3000
客戶端則在本地檔案file:///i:/file/index.html
客戶端像服務端請求資料顯然是非同源的,需要跨域
常用請求頭和響應頭
jsonp跨域主要是利用script標籤自帶的跨域buff
前端**
後端**
var callback = req.query.callback;
var data = "jsonp 跨域成功";
res.send(callback + "('" + data + "')");
});
原理:
在服務端中先取得callback函式名,然後再返回資料中進行拼接callback + "(' " + data + " ')" 這樣一來就把資料data當做引數放在乙個函式呼叫裡面,最後的效果相當於
瀏覽器跨域
同源策略 同源策略是乙個重要的安全策略,它用於限制乙個origin的文件或者它載入的指令碼如何能與另乙個源的資源進行互動。它能幫助阻隔惡意文件,減少可能被攻擊的媒介。協議 網域名稱 埠號 http伺服器,預設的埠號為80 tcp 木馬executor開放此埠 https securely trans...
瀏覽器設定跨域
由於專案前端使用8001埠,後端使用的8080埠,因此前端呼叫後端介面時需要跨域,在瀏覽器中需要設定跨域,否則會由於跨域安全性導致請求失敗。比如chrome中,需要新建乙個chrome瀏覽器的快捷方式,右鍵選擇屬性 新增 disable web security user data dir c ch...
瀏覽器跨域問題
就是瀏覽器在執行js時,會看這個js檔案屬於哪個站點,它只能在指令碼操作本站點,比如從傳來的js檔案,它就只能向傳送請求,沒有為什麼,這是瀏覽器強制規定的,你要用瀏覽器就必須遵循 1.傳輸協議一樣,也就是http這裡 2.網域名稱一樣,也就是www.asd.com,注意localhost和127.0...