精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

国产精品无码一区| 国产免费无遮挡吸奶头视频| 超级碰碰不卡在线视频| 成人精品鲁一区一区二区| 欧美激情精品久久久| 少妇精品一区二区三区| 国产精品久久久久久久久免费高清| **网站欧美大片在线观看| 99三级在线| 久久国产乱子伦精品| 性欧美欧美巨大69| 亚洲精品电影在线| 国产一级免费大片| 亚洲国产成人二区| 亚洲黄色尤物视频| 日韩区国产区| 少妇喷水在线观看| 激情图片小说一区| 国产99久久精品一区二区永久免费| 天天天天天天天天操| 欧美绝顶高潮抽搐喷水合集| 7799精品视频| 男女视频一区二区三区| 牛牛精品在线| 中文字幕在线一区二区三区| 老司机精品福利在线观看| 99免费在线视频| 丝袜美腿亚洲综合| 久久露脸国产精品| 日韩福利小视频| 精品久久影视| 日韩成人中文电影| 少妇性l交大片7724com| 国产69精品久久| 欧美午夜女人视频在线| 欧美一区二区视频在线播放| 国产三区视频在线观看| 国产视频一区二区三区在线观看| 国产精品久久久久久久天堂第1集| 亚洲综合网av| 免费欧美日韩国产三级电影| 欧美一级bbbbb性bbbb喷潮片| 一区二区三区免费高清视频| 亚洲欧美日韩高清在线| 日韩中文在线不卡| 国产网站无遮挡| 天堂√中文最新版在线| 五月天婷婷综合| 青青草国产精品视频| 欧美女同一区| 亚洲一区在线视频观看| 8x8x华人在线| 九七久久人人| 亚洲丝袜自拍清纯另类| 香蕉视频在线网址| 精品孕妇一区二区三区| 亚洲视频中文字幕| 男同互操gay射视频在线看| 黄色网页在线播放| 亚洲视频免费看| 三年中文高清在线观看第6集| 天堂中文а√在线| 亚洲欧美在线视频| www.亚洲一区二区| 日本高清成人vr专区| 一区二区国产视频| 黄色大片中文字幕| 性欧美18~19sex高清播放| 欧美性猛交xxxx乱大交3| 日本熟妇人妻xxxxx| 日本另类视频| 欧美精品乱码久久久久久| 国产又粗又长又爽又黄的视频| 国产成人免费av一区二区午夜| 欧美一区二区三区色| 影音先锋资源av| 免费福利视频一区| 国产亚洲人成网站在线观看| 天堂网av2018| 国产精品av一区二区| 992tv成人免费视频| 欧美一区二区三区不卡视频| 免费成人你懂的| 91亚洲精品在线| 日韩一级免费毛片| 久久免费视频一区| 中文字幕精品一区日韩| 国产区美女在线| 欧美性生交xxxxxdddd| 国产九九热视频| 日韩精品三级| 亚洲情综合五月天| 亚洲av无码一区二区三区在线| 亚洲激情网址| 色偷偷久久人人79超碰人人澡| aaaaaa亚洲| 国产精品中文| 亚洲另类激情图| 国产乱叫456| 国产精品对白久久久久粗| 亚洲日本成人女熟在线观看| 日本一级特级毛片视频| 在线亚洲自拍| 成人激情在线播放| 外国精品视频在线观看 | 在线不卡欧美| 国产欧美韩国高清| 水莓100国产免费av在线播放| 国产精品视频一区二区三区不卡| 国产免费一区二区视频| 成人免费一区| 亚洲精品美女在线| 国产福利视频网站| 视频一区国产视频| 国产精品xxx在线观看www| av电影在线网| 狠狠躁18三区二区一区| 中文字幕人妻熟女人妻a片| 国产成人精品免费视| 欧美—级高清免费播放| 亚洲中文一区二区三区| 久久亚洲二区三区| 69sex久久精品国产麻豆| 免费一区二区三区四区| 亚洲欧美日韩久久久久久| 久草视频在线资源站| 久久精品国产第一区二区三区| 欧美精品一区二区三区在线四季| 亚洲区欧洲区| 欧美日韩国产在线观看| 精品人妻一区二区三区视频| 红桃视频亚洲| 亚洲一区中文字幕| 天天在线视频色| 欧美影院一区二区三区| 欧美色图亚洲激情| 国产欧美成人| 韩日午夜在线资源一区二区| 欧美aaa免费| 日韩精品中文字幕在线一区| 日本黄色小说视频| 国产一区久久久| 小说区视频区图片区| 91亚洲精品在看在线观看高清| 国产亚洲成av人片在线观看桃| 区一区二在线观看| 久久综合给合久久狠狠狠97色69| 草草久久久无码国产专区| av自拍一区| 午夜精品久久17c| 女人18毛片水真多18精品| 亚洲va韩国va欧美va精品 | 中文字幕一区二区三区日韩精品| 成人444kkkk在线观看| 国产伦精品一区二区三区视频痴汉 | 欧美日韩国产一二| 另类图片综合电影| 精品一区二区电影| 日韩人妻精品中文字幕| 久久久久久免费网| 激情视频免费网站| 国产精品久久久久久久久妇女| 国产日韩中文字幕在线| 看女生喷水的网站在线观看| 日韩一级免费一区| 国产一级做a爰片在线看免费| 成人h动漫精品一区二| 国产免费毛卡片| 视频一区在线观看| 国产欧美 在线欧美| 18+视频在线观看| 精品99999| 在线永久看片免费的视频| 国产精品视频一二| 亚洲av无一区二区三区久久| 亚洲激情另类| 欧洲精品码一区二区三区免费看| 国产成人精品一区二区三区免费| 久久这里有精品视频| 亚洲精品一区二区三区新线路| 婷婷久久综合九色国产成人| 国产又大又粗又爽的毛片| 狠狠色狠狠色综合| 男人天堂av片| 日韩欧美伦理| 亚洲综合中文字幕在线| 精品三级久久| 日韩中文字幕网| 国模无码一区二区三区| 色婷婷激情久久| 一区二区成人免费视频| 91偷拍与自偷拍精品| 亚洲不卡一卡2卡三卡4卡5卡精品| 欧美成人ⅴideosxxxxx| 欧美插天视频在线播放| 美丽的姑娘在线观看免费动漫| 91精品国产综合久久香蕉的特点 | 男人操女人的视频网站| 99精品欧美一区二区蜜桃免费 | 国产xxx精品视频大全| 超碰97人人射妻| 欧美影视一区| 品久久久久久久久久96高清| 国产亚洲高清在线观看| 国产91色在线|免| 黑人精品视频| www国产精品com| 免费黄网站在线观看| 精品少妇一区二区三区在线播放| 中文字幕欧美人妻精品一区蜜臀| 午夜精品视频一区| 久久av红桃一区二区禁漫| 91蝌蚪porny九色| 成人啪啪18免费游戏链接| 日本aⅴ亚洲精品中文乱码| 超碰成人免费在线| 久久久久午夜电影| 日韩一二三区不卡在线视频| 红杏aⅴ成人免费视频| 91在线观看免费高清完整版在线观看 | 欧美禁忌电影| 极品校花啪啪激情久久| 精品视频一区二区三区在线观看| 国产福利视频一区二区| 麻豆视频在线看| 欧美激情视频网站| 麻豆传媒视频在线观看| 国产亚洲综合久久| 水中色av综合| 日韩精品极品在线观看| 国产 欧美 自拍| 日韩精品中文字幕在线一区| 97在线公开视频| 欧美日韩国产三级| 在线观看你懂的网站| 色一区在线观看| 好吊妞视频一区二区三区| 亚洲成人在线免费| 久草网视频在线观看| 一区二区三区精品在线观看| 永久免费看mv网站入口| 成人免费视频在线观看| 制服丨自拍丨欧美丨动漫丨| 国产精品美女久久久久久久网站| 欧美熟妇激情一区二区三区| 国产三级精品三级在线专区| 欧洲av一区二区三区| 国产欧美日韩激情| 奇米网一区二区| 国产精品卡一卡二卡三| 天天操夜夜操av| 日韩理论在线观看| 久操视频免费在线观看| 亚洲电影激情视频网站| 国产精品7777777| 欧美日韩午夜剧场| 日本久久综合网| 欧美在线免费观看亚洲| 一级久久久久久久| 欧美精品在线观看播放| www.五月婷| 亚洲高清av在线| 青青草在线免费观看| 亚洲精品在线不卡| 电影av一区| 美女扒开尿口让男人操亚洲视频网站 | 久久久精品天堂| 极品蜜桃臀肥臀-x88av| 中文字幕一区二区三中文字幕| 国产精品视频一区二区在线观看| 亚洲激情图片小说视频| 日韩免费不卡视频| 色婷婷一区二区三区四区| 亚洲av综合一区| 欧美刺激脚交jootjob| 亚洲欧美日本在线观看| 在线观看日韩视频| jizz性欧美| 久久久久久中文字幕| 一区二区电影免费观看| 国产日韩欧美在线视频观看| 亚洲视频精选| 日韩精品欧美专区| 欧美国产三级| 精品久久久久久久免费人妻| 蜜桃传媒麻豆第一区在线观看| 精品人妻一区二区三区免费| 99久久国产综合精品麻豆| 2019男人天堂| 亚洲综合男人的天堂| 日韩电影在线观看一区二区| 欧美一级二级三级乱码| 污视频在线免费观看| 色综久久综合桃花网| aa视频在线观看| 成人午夜激情网| 欧美电影免费网站| 免费观看黄色的网站| 另类亚洲自拍| 亚洲成人福利视频| 欧美激情一二三区| 日韩免费av片| 欧美一级生活片| 国产高清视频在线| 97国产精品久久| 欧美成年网站| 亚洲精品永久www嫩草| 亚洲人成久久| 在线观看日本www| 国产精品无人区| 秋霞精品一区二区三区| 日韩欧美黄色影院| 91露出在线| 国产99久久精品一区二区永久免费| 91精品国产自产在线丝袜啪| 影音先锋欧美在线| 视频一区国产视频| 欧美bbbbb性bbbbb视频| 一区二区三区免费在线观看| 亚洲熟女乱色一区二区三区久久久| 亚洲激情自拍图| 黑人极品ⅴideos精品欧美棵| 成人在线观看视频网站| 成人一区而且| 丁香婷婷激情网| 91毛片在线观看| 日本一区二区免费在线观看| 日韩欧美一区在线| 精品51国产黑色丝袜高跟鞋| 国产女人18毛片水18精品| 成人久久一区| 久久精品免费网站| 国产午夜精品理论片a级大结局 | 手机在线中文字幕| 在线观看国产一区二区| 毛片在线播放网址| 青青青国产精品一区二区| 老司机aⅴ在线精品导航| 久草免费福利在线| 成人性视频网站| 日韩精品成人一区| 亚洲国内精品在线| 日韩深夜视频| 久久资源av| 久久精品系列| 摸摸摸bbb毛毛毛片| 欧美唯美清纯偷拍| 中文字幕在线观看日本| 成人激情免费在线| 欧美1区视频| 日本性生活一级片| 午夜精品一区二区三区免费视频| 香港三日本三级少妇66| 国产不卡一区二区在线播放| 国产一区二区三区站长工具| www亚洲成人| 亚洲女与黑人做爰| 成人av无码一区二区三区| 久久全国免费视频| 羞羞答答一区二区| 色七七在线观看| 亚洲男帅同性gay1069| 亚洲欧美高清视频| 日本电影亚洲天堂| 日韩中文在线电影| 美女被艹视频网站| 天天影视网天天综合色在线播放 | 欧美激情a在线| 精品国内亚洲2022精品成人| 久久精品99国产| 亚洲欧洲99久久| 免费看国产片在线观看| 欧美亚洲激情在线| 色喇叭免费久久综合网| 欧美性猛交xx| 精品国产老师黑色丝袜高跟鞋| 欧美男男同志| 成人黄色免费看| 夜久久久久久| 成人性视频免费看| 精品国产成人在线影院| 激情亚洲影院在线观看| 少妇熟女一区二区| 久久伊人蜜桃av一区二区| 一级做a爱片久久毛片| 久久全国免费视频| 日本a口亚洲| 日韩成人av影院| 欧美性猛交xxxx黑人交| 久久亚洲资源| 天堂资源在线亚洲视频| 成人网男人的天堂| 中文字幕永久在线观看| 国产最新精品视频| 日韩欧美高清| 国产福利在线观看视频| 3751色影院一区二区三区| 日韩激情电影免费看| 欧美a级黄色大片| 欧美激情一区二区三区全黄|