精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

用 Node.js 處理 CORS

開發 前端
在本文中,我們將研究怎樣用 Express 配置 CORS 以及根據需要定制 CORS 中間件。

在本文中,我們將研究怎樣用 Express 配置 CORS 以及根據需要定制 CORS 中間件。

什么是CORS

CORS 是“跨域資源共享”的簡寫。它是一種允許或限制向 Web 服務器上請求資源的機制,具體取決于進行 HTTP 請求的位置。

這種策略用于保護特定 Web 服務器免受其他網站或域的訪問。只有允許的域才能訪問服務器中的文件,例如樣式表、圖像或腳本等。

假設你當前使用的是 http://example.com/page1,并且你引用的是來自 http://image.com/myimage.jpg 的圖片,那么除非 http://image.com 允許與 http://example.com 進行跨域共享,否則將無法獲取該圖像。

每個 HTTP 請求頭中都有一個名為 origin 的頭。它定義了域請求的來源。可以用這個頭的信息來限制引用你服務器上的資源。

默認來自任何其他來源的請求都會受到瀏覽器的限制。

例如當開發時如果用的是 React 或 Vue 這類的前端庫,則前端應用將運行在 http://localhost:3000 上,同時,你的 Express 服務器可能正在其他端口上運行,例如 http://localhost:2020。這時就需要在這些服務器之間允許 CORS。

如果你在瀏覽器控制臺中看到下圖這類的錯誤。問題可能出在 CORS 限制上:

chrome cors

如果我們需要提供公共 API 并希望控制對某些資源的訪問和使用方式時,CORS 能夠發揮很大的作用。

另外,如果想在其他網頁上使用自己的 API 或文件,也可以簡單地將 CORS 配置為允許自己引用,同時把其他人拒之門外。

用 Express 配置 CORS

首先創建一個新的項目,并創建目錄結構,然后使用默認設置運行 npm init:

  1. $ mkdir myapp 
  2. $ cd myapp 
  3. $ npm init -y 

接下來安裝所需的模塊。我們將使用 express 和 cors 中間件:

  1. $ npm i --save express 
  2. $ npm i --save cors 

然后,開始創建一個簡單的有兩個路由的 Web 程序,用來演示 CORS 的工作原理。

首先創建一個名為 index.js 的文件,用來充當 Web 服務器,并實現幾個請求處理函數:

  1. const express = require('express'); 
  2. const cors = require('cors'); 
  3.  
  4. const app = express(); 
  5.  
  6. app.get('/', (req, res) => { 
  7.     res.json({ 
  8.         message: 'Hello World' 
  9.     }); 
  10. }); 
  11.  
  12. app.get('/:name', (req, res) => { 
  13.     let name = req.params.name; 
  14.  
  15.     res.json({ 
  16.         message: `Hello ${name}` 
  17.     }); 
  18. }); 
  19.  
  20. app.listen(2020, () => { 
  21.     console.log('server is listening on port 2020'); 
  22. }); 

運行服務器:

  1. $ node index.js 

訪問 http://localhost:2020/ 服務器應該返回 JSON 消息:

  1.   "message": "Hello World" 

訪問 http://localhost:2020/something 應該能夠看到:

  1.   "message": "Hello something" 

啟用所有CORS請求

如果想為所有的請求啟用 CORS,可以在配置路由之前簡單地使用 cors 中間件:

  1. const express = require('express'); 
  2. const cors = require('cors'); 
  3.  
  4. const app = express(); 
  5.  
  6. app.use(cors()) 
  7.  
  8. ...... 

如果需要,這會允許在網絡上的任何位置訪問所有路由。所以在本例中,每個域都可以訪問兩條路由。

例如,如果我們的服務器在 http://www.example.com 上運行并提供諸如圖片之類的內容,則我們允許 http://www.differentdomain.com 之類的其他域從 http://www.example.com 進行引。

因此 http://www.differentdomain.com 上的網頁可以將我們的域用作圖像的來源:

  1. <img src="http://www.example.com/img/cat.jpg"> 

為單個路由啟用 CORS

如果只需要其中某一個路由,可以在某個路由中將 cors 配置為中間件:

  1. app.get('/', cors(), (req, res) => { 
  2.     res.json({ 
  3.         message: 'Hello World' 
  4.     }); 
  5. }); 

這會允許任何域訪問特定的路由。在當前的情況下,其他域都只能訪問 / 路由。僅在與 API(在本例中為http://localhost:2020)的相同域中發起的請求才能訪問 /:name 路由。

如果嘗試另一個來源發送請求到 / 路徑將會成功,并且會收到 Hello World 作為響應:

  1. fetch('http://localhost:2020/') 
  2.     .then(response => response.json()) 
  3.     .then(data => console.log(data)) 
  4.     .catch(err => console.error(err)); 

運行上面的代碼,會看到來自服務器的響應已成功輸出到控制臺:

  1.     message: 'Hello World' 

如果訪問除根路徑以外的其他路徑,例如 http://localhost:2020/name 或 http://localhost:2020/img/cat.png,則此請求將會被瀏覽器阻止:

  1. fetch('http://localhost:2020/name/janith') 
  2.   .then(response => response.json()) 
  3.   .then(data => console.log(data)) 
  4.   .catch(err => console.error(err)); 

如果在其他 Web 應用中運行代碼,應該看到以下錯誤:

控制臺錯誤

1. 用選項配置CORS

還可以用自定義選項來配置 CORS。可以根據需要配置允許的 HTTP 方法,例如 GET 和 POST。

下面是通過 CORS 選項允許單個域訪問的方法:

  1. var corsOptions = { 
  2.     origin: 'http://localhost:8080', 
  3.     optionsSuccessStatus: 200 // For legacy browser support 
  4.  
  5. app.use(cors(corsOptions)); 

如果你在源中配置域名-服務器將允許來自已配置域的CORS。因此,在我們的例子中,可以從 http://localhost:8080 訪問該API,并禁止其他域使用。

如果發送一個 GET 請求,則任何路徑都應該可以訪問,因為這些選項是在應用在程序級別上的。

運行下面的代碼將請求從 http://localhost:8080 發送到 http://localhost:2020:

  1. // 
  2. fetch('http://localhost:2020/') 
  3.   .then(response => response.json()) 
  4.   .then(data => console.log(data)) 
  5.   .catch(err => console.error(err)); 
  6.  
  7. // 
  8. fetch('http://localhost:2020/name/janith') 
  9.   .then(response => response.json()) 
  10.   .then(data => console.log(data)) 
  11.   .catch(err => console.error(err)); 

可以看到被允許從該程序和域中獲取信息。

還可以根據需要配置允許的 HTTP 方法:

  1. var corsOptions = { 
  2.     origin: 'http://localhost:8080', 
  3.     optionsSuccessStatus: 200 // 對于舊版瀏覽器的支持 
  4.     methods: "GET, PUT" 
  5.  
  6. app.use(cors(corsOptions)); 

如果從 http://localhost:8080 發送POST請求,則瀏覽器將會阻止它,因為僅支持 GET 和 PUT:

  1. fetch('http://localhost:2020', { 
  2.   method: 'POST', 
  3.   body: JSON.stringify({name: "janith"}), 
  4. }) 
  5. .then(response => response.json()) 
  6. .then(data => console.log(data)) 
  7. .catch(err => console.error(err)); 

用函數配置動態 CORS 源

如果配置不滿足你的要求,也可以創建函數來定制 CORS。

例如假設要允許 http://something.com 和 http://example.com 對 .jpg 文件進行CORS共享:

  1. const allowlist = ['http://something.com', 'http://example.com']; 
  2.  
  3.     const corsOptionsDelegate = (req, callback) => { 
  4.     let corsOptions; 
  5.  
  6.     let isDomainAllowed = whitelist.indexOf(req.header('Origin')) !== -1; 
  7.     let isExtensionAllowed = req.path.endsWith('.jpg'); 
  8.  
  9.     if (isDomainAllowed && isExtensionAllowed) { 
  10.         // 為此請求啟用 CORS 
  11.         corsOptions = { origin: true } 
  12.     } else { 
  13.         // 為此請求禁用 CORS 
  14.         corsOptions = { origin: false } 
  15.     } 
  16.     callback(null, corsOptions) 
  17.  
  18. app.use(cors(corsOptionsDelegate)); 

回調函數接受兩個參數,第一個是傳遞 null 的錯誤,第二個是傳遞 { origin: false } 的選項。第二個參數可以是用 Express 的 request 對象構造的更多選項。

所以 http://something.com 或 http://example.com 上的 Web 應用將能夠按照自定義配置從服務器引用擴展名為 .jpg 的圖片。

這樣可以成功引用資源文件:

  1. <img src="http://yourdomain.com/img/cat.jpg"> 

但是下面的文件將會被阻止:

  1. <img src="http://yourdomain.com/img/cat.png"> 

從數據源加載允許的來源列表作

還可以用保存在數據庫中的白名單列表或任何一種數據源來允許 CORS:

  1. var corsOptions = { 
  2.     origin: function (origin, callback) { 
  3.         // 從數據庫加載允許的來源列表 
  4.         // 例如:origins = ['http://example.com', 'http//something.com'] 
  5.         database.loadOrigins((error, origins) => { 
  6.             callback(error, origins); 
  7.         }); 
  8.     } 
  9.  
  10. app.use(cors(corsOptions)); 

 

責任編輯:趙寧寧 來源: 前端先鋒
相關推薦

2021-12-25 22:29:57

Node.js 微任務處理事件循環

2012-02-02 15:14:29

Node.js

2013-11-01 09:34:56

Node.js技術

2015-03-10 10:59:18

Node.js開發指南基礎介紹

2023-10-04 07:35:03

2014-07-11 14:16:15

AbsurdJSExpress

2011-11-01 10:30:36

Node.js

2011-09-08 13:46:14

node.js

2011-09-02 14:47:48

Node

2011-09-09 14:23:13

Node.js

2012-10-24 14:56:30

IBMdw

2011-11-10 08:55:00

Node.js

2021-06-02 00:29:08

Node.jsAcceptEmfile

2021-12-13 11:21:46

NodePython開發

2020-05-29 15:33:28

Node.js框架JavaScript

2015-06-23 15:27:53

HproseNode.js

2012-02-03 09:25:39

Node.js

2024-07-08 08:53:52

2021-02-01 15:42:45

Node.jsSQL應用程序

2021-04-06 10:15:29

Node.jsHooks前端
點贊
收藏

51CTO技術棧公眾號

1313精品午夜理伦电影| 久一区二区三区| 国产精品99久久久久久董美香 | 亚洲综合专区| 亚洲国产精品成人av| 国产欧美高清在线| www免费视频观看在线| 91丨porny丨国产入口| 国产欧美日韩91| 国产成人精品av久久| 成人综合专区| 日韩极品精品视频免费观看| 欧美激情第3页| 毛片电影在线| 一区二区三区四区亚洲| 五月天亚洲综合情| 天天干天天摸天天操| 激情文学综合插| 日韩免费观看av| 国产一二三四在线| 久久中文亚洲字幕| 亚洲人成网站999久久久综合| 亚洲精品一二三四| 国产成人77亚洲精品www| 五月婷婷另类国产| 永久免费网站视频在线观看| 98在线视频| 国产午夜亚洲精品午夜鲁丝片 | 亚洲色图一区二区三区| 欧美一区二区三区在线播放 | 欧美日韩综合一区二区三区| 欧美日韩综合| 久久夜色撩人精品| 国产jizz18女人高潮| 国产日韩视频在线| 日韩精品在线私人| 国产麻豆剧传媒精品国产av| 九九九九九九精品任你躁 | 亚洲国产精品suv| 精品在线一区二区三区| 国产精品狼人色视频一区| 国语对白永久免费| 亚洲女同在线| 人人澡人人澡人人看欧美| 日韩久久精品视频| 亚洲精选成人| 性欧美xxxx| 亚洲黄色一区二区| 日韩视频中文| 97精品国产97久久久久久| 日本一级淫片免费放| 亚洲国产清纯| 国产69精品久久久久久| 国产九色在线播放九色| 黄色亚洲在线| 91国产精品视频在线| 日韩av片在线播放| 性欧美videos另类喷潮| 青青在线视频一区二区三区| 麻豆成人免费视频| 日本亚洲一区二区| 成人福利在线观看| 99视频国产精品免费观看a| 国产一区二区三区观看| 福利视频一区二区三区| 国精产品乱码一区一区三区四区| 高清视频一区二区| 精品国产第一页| 久草视频视频在线播放| 欧美激情综合网| 亚洲精品在线视频观看| 国产cdts系列另类在线观看| 亚洲黄色性网站| 亚洲人成无码网站久久99热国产 | 91精品国产自产| 韩国av免费在线观看| 国产91精品一区二区麻豆亚洲| 999国产视频| 欧美性受xxxx狂喷水| 99国产麻豆精品| 久久精品中文字幕一区二区三区| 免费看男男www网站入口在线| 国产农村妇女毛片精品久久麻豆| 影音先锋亚洲视频| 色操视频在线| 精品日韩视频在线观看| 亚洲综合欧美激情| 国产精品香蕉| 色哟哟网站入口亚洲精品| 日本一级二级视频| 久久精品亚洲| 亚洲va久久久噜噜噜久久天堂| 天天干免费视频| 中文字幕一区在线| 日韩伦理在线免费观看| 欧美一区二区三区婷婷| 亚洲国产欧美日韩精品| 久草福利资源在线| 亚洲欧美日韩视频二区| 91免费国产网站| 日本在线视频1区| 亚洲女与黑人做爰| 成人一级片网站| 精品国产伦一区二区三区观看说明 | 日韩有码在线电影| www成人在线| 国产一区美女在线| 日韩色妇久久av| 成年女人在线看片| 91精品福利在线一区二区三区| 成人免费看aa片| 欧美激情偷拍自拍| 欧洲精品毛片网站| 亚洲国产精品久久久久久6q| 国产精品水嫩水嫩| 免费高清在线观看免费| 色悠久久久久综合先锋影音下载| 亚洲天堂av高清| 亚欧视频在线观看| 国产一区二区三区在线观看免费| 日本a级片久久久| a级片在线免费| 日韩午夜在线观看| www.涩涩爱| 老司机精品导航| 久久精品国产精品国产精品污| caoporm免费视频在线| 欧美日韩国产天堂| 国产中年熟女高潮大集合| 亚洲神马久久| 精品国产免费人成电影在线观...| 中文字幕有码在线视频| 欧美日韩成人综合在线一区二区| 国产又粗又猛又爽又黄av| 国产一区二区三区成人欧美日韩在线观看| 亚洲一区二区三区毛片 | 久久人人爽人人爽人人片av高清| 国产欧美一级片| 日韩一区欧美一区| 午夜国产福利在线观看| 日韩欧美三级| 国产综合在线观看视频| 日本高清视频在线观看| 欧美日韩在线亚洲一区蜜芽| 在线免费看视频| 美洲天堂一区二卡三卡四卡视频| 欧美一区激情视频在线观看| 韩国三级一区| 一区二区三区天堂av| 日韩不卡高清视频| 国产精品乱码一区二三区小蝌蚪| 另类小说第一页| 天天做天天爱综合| 亚洲精品欧美一区二区三区| 91精品久久| 亚洲成人久久网| 中文字幕亚洲乱码熟女1区2区| 久久久久国产精品免费免费搜索| 茄子视频成人免费观看| 国产videos久久| 国产精品视频自在线| 黄色在线论坛| 欧美xxxxx牲另类人与| 久青草免费视频| 91麻豆6部合集magnet| 动漫av免费观看| 成人短片线上看| 亚洲a区在线视频| sm在线观看| 亚洲人成在线电影| 国产精品久久久久久久成人午夜| 一区二区三区四区中文字幕| 国产在线不卡av| 性色一区二区| 在线无限看免费粉色视频| 一本一道久久a久久| 97超级碰在线看视频免费在线看| 美女欧美视频在线观看免费| 欧美乱妇20p| 日韩成人在线免费视频| 国产欧美一区二区精品秋霞影院 | 中文字幕在线精品| 国模无码一区二区三区| 在线精品国精品国产尤物884a| 性生交大片免费全黄| 99麻豆久久久国产精品免费| 亚洲国产精品三区| 激情婷婷久久| 日韩一区二区三区资源| 亚洲小说春色综合另类电影| 日韩免费在线看| www在线观看播放免费视频日本| 日韩精品免费观看| 国产一区二区在线播放视频| 精品成人av一区| 污色网站在线观看| 午夜日韩福利| 视频一区二区三区免费观看| 99re热精品视频| 国产欧美va欧美va香蕉在| a√中文在线观看| www.欧美免费| 欧美香蕉爽爽人人爽| 欧美一级国产精品| 免费看av在线| 五月激情综合色| 老湿机69福利| 国产精品久久久久久久浪潮网站| 国产精品入口麻豆| 国内成人自拍视频| av片中文字幕| 国产精品外国| www.国产在线播放| 亚洲精品a级片| 日韩av图片| 欧美男人操女人视频| 亚洲自拍另类欧美丝袜| 成人在线高清| 欧美做爰性生交视频| 国产精品yjizz视频网| 久久中文字幕国产| 欧美13一16娇小xxxx| 在线日韩欧美视频| 噜噜噜噜噜在线视频| 亚洲精品国产精品乱码不99按摩| 国产99久一区二区三区a片| 欧美图片一区二区三区| 无码人妻丰满熟妇区五十路| 激情成人在线视频| 成人午夜视频精品一区| 亚洲一区欧美一区| 黄色一级视频在线观看| 亚洲精品你懂的| 国产精品一区二区亚洲| 国产欧美日韩一区二区三区在线观看| 亚洲欧美色图视频| 99精品一区二区| 香港三级日本三级| 972aa.com艺术欧美| 亚洲久久久久久| av男人天堂一区| 国产中文字幕一区二区| av一区二区三区黑人| 国产亚洲色婷婷久久99精品91| 高潮精品一区videoshd| 日本一级大毛片a一| 国产成人亚洲精品狼色在线| 亚洲 自拍 另类 欧美 丝袜| 国产精品538一区二区在线| 久久久精品视频国产| 国产成人精品午夜视频免费| 国产亚洲精品成人a| 成人激情小说网站| 国产三级国产精品| 中文字幕乱码亚洲精品一区| 北条麻妃在线观看视频| 亚洲天堂精品视频| 国产中文字字幕乱码无限| 亚洲成av人片一区二区三区| 亚洲黄色小说图片| 欧美天天综合网| 国产精品无码久久av| 欧美一区二区三区在线观看视频 | 日韩伦理在线一区| 国产91热爆ts人妖在线| 精品九九久久| 不卡视频一区二区三区| 天天做夜夜做人人爱精品 | 综合久久一区| 秋霞无码一区二区| 丝瓜av网站精品一区二区| 性欧美videossex精品| 国产精品自拍三区| 成人h动漫精品一区| 国产欧美日本一区视频| 91麻豆免费视频网站| 成人av网址在线| mm131美女视频| 亚洲婷婷国产精品电影人久久| 九九久久免费视频| 欧美午夜精品伦理| 国产美女明星三级做爰| 日韩av资源在线播放| 午夜视频在线免费观看| 欧美黄色三级网站| 99欧美精品| 国产在线视频欧美一区二区三区| 国模精品一区| 中国丰满熟妇xxxx性| 美女性感视频久久| 欧类av怡春院| 亚洲色图.com| 天天干天天干天天操| 日韩一区二区三区在线| 国产一区精品| 久久久久久尹人网香蕉| 欧美成人高清视频在线观看| 国精产品一区二区| 国产精品久久久久9999赢消| 国产精品宾馆在线精品酒店| 精品一区二区日韩| 免费看污片网站| 亚洲一区中文日韩| 国产精品久久久久精| 国产一区二区三区网站| 超碰在线99| 97神马电影| 香蕉久久网站| 嫩草影院国产精品| 97久久超碰精品国产| 1024手机在线视频| 欧美日韩国产首页| www日韩tube| 欧美在线视频播放| 精品久久ai| 性一交一乱一伧国产女士spa| 九九九久久久精品| 男人的天堂官网| 色婷婷亚洲综合| 天堂av中文字幕| 欧美大片免费观看| 亚洲精品在线播放| 麻豆中文字幕在线观看| 美女网站一区二区| 亚洲a∨无码无在线观看| 日本韩国一区二区三区| 日韩欧美在线番号| 777午夜精品福利在线观看| 国产精品中文字幕制服诱惑| 欧美久久在线观看| 粉嫩av一区二区三区| 欧美三级在线免费观看| 欧美一区二区三区在线观看| 久久日韩视频| 91在线观看欧美日韩| 午夜精品久久久久久久四虎美女版| 四季av一区二区| 国产亚洲综合在线| 99久久久无码国产精品免费蜜柚| 日韩电影在线观看中文字幕 | 国产精品久久久久久久久久ktv | 99在线精品观看| 日本亚洲色大成网站www久久| 精品sm捆绑视频| 大桥未久在线视频| 久久精品女人的天堂av| 久久综合九色| 久久午夜福利电影| 欧美日韩国产另类不卡| 成人在线影视| 国产精品夜夜夜一区二区三区尤| 黄色精品网站| 国产男女猛烈无遮挡a片漫画| 色综合欧美在线| 91精品专区| 亚洲自拍欧美色图| 99国产一区| 中文字幕xxx| 欧美午夜视频网站| 国产福利在线播放麻豆| 操一操视频一区| 国产色综合网| 国产毛片欧美毛片久久久| 欧美疯狂做受xxxx富婆| 青草av在线| 欧美一区少妇| 九九**精品视频免费播放| 国产在线综合网| 亚洲欧洲日本专区| 国产欧美视频在线| 波多野结衣乳巨码无在线| 国产婷婷精品av在线| 国产又大又黄又爽| 91精品国产99| 日韩av在线播放网址| 国产调教打屁股xxxx网站| 欧美性色视频在线| 国产激情小视频在线| 欧美精品二区三区四区免费看视频 | 欧美性xxxx在线播放| 在线播放麻豆| 国产视频不卡| 久久精品国产亚洲高清剧情介绍 | 亚洲欧美卡通动漫| 精品久久久久久最新网址| 新片速递亚洲合集欧美合集| 看一级黄色录像| 久久久一区二区| aaaa一级片| 国产精品久久久久久av福利| 欧美不卡在线| 少妇视频在线播放| 亚洲国产成人精品一区二区| 色成人综合网| 国产99久久九九精品无码| 亚洲欧美一区二区三区极速播放 | 国产91免费在线观看| 国产日韩在线观看av| 国产亚洲综合精品| 免费日韩在线视频|