http proxy 對(duì)網(wǎng)絡(luò)請(qǐng)求進(jìn)行代理使用詳解
正文
使用下面這段簡(jiǎn)單的代碼對(duì)網(wǎng)絡(luò)請(qǐng)求進(jìn)行代理:
const http = require('http'); const httpProxy = require('http-proxy'); const targetUrl = 'https://www.sap.cn/index.html'; const proxy = httpProxy.createProxyServer({ target: targetUrl, }); http.createServer(function (req, res) { proxy.web(req, res); }).listen(8089); console.log('Proxy listens in 8089');
這段代碼的語義是,創(chuàng)建一個(gè)代理 HTTP 服務(wù)器,監(jiān)聽在端口 8089 上。
因此該代理服務(wù)器接收到任何發(fā)送到 8089 端口的 HTTP 請(qǐng)求,都會(huì)自動(dòng)將其發(fā)送到 targetUrl
指定的 sap 網(wǎng)站上。
命令行啟動(dòng)服務(wù)器
node server.js
遇到如下錯(cuò)誤消息:
Error [ERR_TLS_CERT_ALTNAME_INVALID]: Hostname/IP does not match certificate's altnames: Host: localhost. is not in the cert's altnames:
詳細(xì)的調(diào)用棧
at Object.checkServerIdentity (tls.js:297:12) at TLSSocket.onConnectSecure (_tls_wrap.js:1507:27) at TLSSocket.emit (events.js:315:20) at TLSSocket._finishInit (_tls_wrap.js:932:8) at TLSWrap.ssl.onhandshakedone (_tls_wrap.js:706:12) { reason: "Host: localhost. is not in the cert's altnames: DNS:www.sap.cn", host: 'localhost', cert: { subject: [Object: null prototype] { C: 'DE', L: 'Walldorf', O: 'SAP SE', CN: 'www.sap.cn' },
當(dāng)我們使用 SSL 連接到服務(wù)器時(shí),服務(wù)器所做的第一件事就是提供一個(gè)證書,上面寫著 我是 api.dropbox.com。 證書有一個(gè) 主題,該主題有一個(gè) CN
(Common Name, 通用名稱的縮寫)。證書也可以有一個(gè)或多個(gè) subjectAltNames
。
當(dāng) node.js 連接到服務(wù)器時(shí),node.js 會(huì)獲取此證書,然后驗(yàn)證它認(rèn)為它正在連接的域名 (api.dropbox.com) 是否與主題的 CN 或其中一個(gè)替代名稱匹配。
請(qǐng)注意,在 node 0.10.x 中,如果使用 IP 連接,則 IP 地址必須在 altnames 中 - node.js 不會(huì)嘗試根據(jù) CN 驗(yàn)證 IP。
雖然錯(cuò)誤是關(guān)于 SSL 證書和域名不匹配,但是在 http-proxy 模塊中,當(dāng)您的服務(wù)器是 HTTP 并且目標(biāo)是 HTTPS 時(shí),通常會(huì)出現(xiàn)這種錯(cuò)誤。
到這個(gè)開發(fā)包的官網(wǎng) 查找原因。
捕捉錯(cuò)誤
proxy.on('error', function(e) { ... });
當(dāng)一個(gè)請(qǐng)求被代理時(shí),它遵循兩個(gè)不同的管道,它們將轉(zhuǎn)換應(yīng)用于 req 和 res 對(duì)象。 第一個(gè)管道(傳入)負(fù)責(zé)創(chuàng)建和操作將客戶端連接到 target 的流。 第二個(gè)管道(傳出)負(fù)責(zé)創(chuàng)建和操作從 target 向客戶端返回?cái)?shù)據(jù)的流。
在創(chuàng)建時(shí)添加 secure:false
選項(xiàng),問題消失:
以上就是http proxy 對(duì)網(wǎng)絡(luò)請(qǐng)求進(jìn)行代理使用詳解的詳細(xì)內(nèi)容,更多關(guān)于http proxy 網(wǎng)絡(luò)請(qǐng)求代理的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
- Node中使用http-proxy-middleware實(shí)現(xiàn)代理跨域的方法步驟
- Node 使用express-http-proxy 做api網(wǎng)關(guān)的實(shí)現(xiàn)
- node.js使用 http-proxy 創(chuàng)建代理服務(wù)器操作示例
- Vue使用vue-recoure + http-proxy-middleware + vuex配合promise實(shí)現(xiàn)基本的跨域請(qǐng)求封裝
- node跨域轉(zhuǎn)發(fā) express+http-proxy-middleware的使用
- 詳解nodejs通過代理(proxy)發(fā)送http請(qǐng)求(request)
相關(guān)文章
JS圖形編輯器實(shí)現(xiàn)標(biāo)尺功能示例詳解
這篇文章主要為大家介紹了JS圖形編輯器實(shí)現(xiàn)標(biāo)尺功能示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-01-01實(shí)現(xiàn)基于飛書webhook監(jiān)聽github代碼提交
這篇文章主要為大家介紹了實(shí)現(xiàn)基于飛書webhook監(jiān)聽github代碼提交示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-01-01