Express: 啟用 cors

我的自建博客上的文章原地址:Express: 啟用 cors

什么是 CORS

CORS ([Cross-Origin Resource Sharing]{.i}) 是一種跨域資源共享的機制。所謂跨域請求是指向不同域名的服務器的請求。

跨域請求非常常見无切,例如一般的網(wǎng)站都會使用單獨的靜態(tài)文件服務器提供如圖片、CSS 樣式以及 JavaScript 腳本等靜態(tài)文件資源折汞,訪問這些資源的請求一般都是跨域的。

不過處于安全性的考慮楣黍,現(xiàn)代瀏覽器都會對由前端腳本發(fā)起的跨域請求進行限制吱韭。CORS 機制是允許 Web 應用腳本進行跨域訪問的一種機制。現(xiàn)代瀏覽器支持在 API 容器中(例如 XMLHttpRequestFetch )使用 CORS鳍刷,以降低跨域 HTTP 請求所帶來的風險占遥。

關于 CORS 的具體講解可以參考阮一峰的博文:跨域資源共享 CORS 詳解

在 Express 上啟用 CORS

注意输瓜,在生產(chǎn)環(huán)節(jié)中如果有前置的反向代理瓦胎,如 Nginx 的存在,那么 CORS 的相關配置需要放置在 Nginx 上尤揣。如果需要對 CORS 進行非常詳細的配置搔啊,可以放在后面的 Express 上。不過在 Nginx 上的 CORS 實現(xiàn)的效率會更高北戏。

Express 上的 CORS 通過使用 cors 這個中間件來實現(xiàn)负芋。

首先安裝 cors

$ npm install cors

使用方法如下:

全局簡單配置

為所有的請求啟用 CORS

var express = require('express')
var cors = require('cors')
var app = express()

app.use(cors())

app.get('/products/:id', function (req, res, next) {
  res.json({msg: 'This is CORS-enabled for all origins!'})
})

app.listen(80, function () {
  console.log('CORS-enabled web server listening on port 80')
})

為某個單獨的請求啟用

var express = require('express')
var cors = require('cors')
var app = express()

app.get('/products/:id', cors(), function (req, res, next) {
  res.json({msg: 'This is CORS-enabled for a Single Route'})
})

app.listen(80, function () {
  console.log('CORS-enabled web server listening on port 80')
})

配置 CORS

下面是一個例子,配置了 CORS 只對特定的 Origin 有效

var express = require('express')
var cors = require('cors')
var app = express()

var corsOptions = {
  origin: 'http://example.com',
  optionsSuccessStatus: 200 // some legacy browsers (IE11, various SmartTVs) choke on 204
}

app.get('/products/:id', cors(corsOptions), function (req, res, next) {
  res.json({msg: 'This is CORS-enabled for only example.com.'})
})

app.listen(80, function () {
  console.log('CORS-enabled web server listening on port 80')
})

更詳細的配置方法參見 cors文檔嗜愈。

?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末旧蛾,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子蠕嫁,更是在濱河造成了極大的恐慌锨天,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,657評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件剃毒,死亡現(xiàn)場離奇詭異病袄,居然都是意外死亡,警方通過查閱死者的電腦和手機赘阀,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,889評論 3 394
  • 文/潘曉璐 我一進店門益缠,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人纤壁,你說我怎么就攤上這事左刽。” “怎么了酌媒?”我有些...
    開封第一講書人閱讀 164,057評論 0 354
  • 文/不壞的土叔 我叫張陵欠痴,是天一觀的道長迄靠。 經(jīng)常有香客問我,道長喇辽,這世上最難降的妖魔是什么掌挚? 我笑而不...
    開封第一講書人閱讀 58,509評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮菩咨,結果婚禮上吠式,老公的妹妹穿的比我還像新娘。我一直安慰自己抽米,他們只是感情好特占,可當我...
    茶點故事閱讀 67,562評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著云茸,像睡著了一般是目。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上标捺,一...
    開封第一講書人閱讀 51,443評論 1 302
  • 那天懊纳,我揣著相機與錄音,去河邊找鬼亡容。 笑死嗤疯,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的闺兢。 我是一名探鬼主播茂缚,決...
    沈念sama閱讀 40,251評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼列敲!你這毒婦竟也來了阱佛?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,129評論 0 276
  • 序言:老撾萬榮一對情侶失蹤戴而,失蹤者是張志新(化名)和其女友劉穎凑术,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體所意,經(jīng)...
    沈念sama閱讀 45,561評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡淮逊,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,779評論 3 335
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了扶踊。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片泄鹏。...
    茶點故事閱讀 39,902評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖秧耗,靈堂內(nèi)的尸體忽然破棺而出备籽,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 35,621評論 5 345
  • 正文 年R本政府宣布车猬,位于F島的核電站霉猛,受9級特大地震影響,放射性物質發(fā)生泄漏珠闰。R本人自食惡果不足惜惜浅,卻給世界環(huán)境...
    茶點故事閱讀 41,220評論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望伏嗜。 院中可真熱鬧坛悉,春花似錦、人聲如沸承绸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,838評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽八酒。三九已至空民,卻和暖如春刃唐,著一層夾襖步出監(jiān)牢的瞬間羞迷,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,971評論 1 269
  • 我被黑心中介騙來泰國打工画饥, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留衔瓮,地道東北人。 一個月前我還...
    沈念sama閱讀 48,025評論 2 370
  • 正文 我出身青樓抖甘,卻偏偏與公主長得像热鞍,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子衔彻,可洞房花燭夜當晚...
    茶點故事閱讀 44,843評論 2 354