只有 Web 才有跨域 CORS绕沈,移動端 iOS 與 Android 就沒有瞧甩,誰讓 Web 能看源代碼呢哪怔,沙盒機制也不如移動端健全。
- 同源策略的限制:XmlHttpRequest 只允許請求當(dāng)前源(域名该编、協(xié)議迄本、端口)的資源,所以AJAX是不允許跨域的课竣。
- 相反就是跨域:如果想讓XmlHttpRequest 按照自己意愿(域名嘉赎、協(xié)議置媳、端口)請求數(shù)據(jù),那就需要跨域
那為什么有同源策略限制公条?
沒有同源策略的話拇囊,資源(如HTTP頭、Cookie靶橱、DOM寥袭、localStorage等)就能相互隨意訪問,那就沒有安全了关霸。同源策略就是把每個網(wǎng)站都關(guān)在一個籠子里传黄,每個網(wǎng)站互相訪問不到數(shù)據(jù),只有用戶和網(wǎng)站開發(fā)者可以訪問數(shù)據(jù)队寇,這樣就安全了膘掰。
-
下面是 Node 如何跨域的兩種方法,均是在服務(wù)器設(shè)置佳遣,并不是JSOP這樣不優(yōu)雅的方式识埋。
__ 方法一: __
app.use('*',function (req, res, next) {
res.header('Access-Control-Allow-Origin', '*'); //這個表示任意域名都可以訪問,這樣寫不能攜帶cookie了苍日。
//res.header('Access-Control-Allow-Origin', 'http://www.baidu.com'); //這樣寫惭聂,只有www.baidu.com 可以訪問。
res.header('Access-Control-Allow-Headers', 'Content-Type, Content-Length, Authorization, Accept, X-Requested-With , yourHeaderFeild');
res.header('Access-Control-Allow-Methods', 'PUT, POST, GET, DELETE, OPTIONS');//設(shè)置方法
if (req.method == 'OPTIONS') {
res.send(200); // 意思是相恃,在正常的請求之前,會發(fā)送一個驗證笨觅,是否可以請求拦耐。
}
else {
next();
}
});
__ 方法二:__
$ npm install cors
var express = require('express')
var cors = require('cors')
var app = express()
var corsOptions = {
origin: 'http://www.baidu.com', //只有百度可以訪問
optionsSuccessStatus: 200
}
app.get('/products/:id', cors(corsOptions), function (req, res, next) {
res.json({msg: '只有百度可以訪問'})
})
app.listen(80, function () {
console.log('CORS-enabled web server listening on port 80')
})
個人網(wǎng)頁http://www.liangtongzhuo.com 梁同桌