http proxy 對網(wǎng)絡(luò)請求進行代理使用詳解
正文
使用下面這段簡單的代碼對網(wǎng)絡(luò)請求進行代理:
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)建一個代理 HTTP 服務(wù)器,監(jiān)聽在端口 8089 上。
因此該代理服務(wù)器接收到任何發(fā)送到 8089 端口的 HTTP 請求,都會自動將其發(fā)送到 targetUrl 指定的 sap 網(wǎng)站上。
命令行啟動服務(wù)器
node server.js
遇到如下錯誤消息:

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ù)器時,服務(wù)器所做的第一件事就是提供一個證書,上面寫著 我是 api.dropbox.com。 證書有一個 主題,該主題有一個 CN(Common Name, 通用名稱的縮寫)。證書也可以有一個或多個 subjectAltNames。
當(dāng) node.js 連接到服務(wù)器時,node.js 會獲取此證書,然后驗證它認(rèn)為它正在連接的域名 (api.dropbox.com) 是否與主題的 CN 或其中一個替代名稱匹配。
請注意,在 node 0.10.x 中,如果使用 IP 連接,則 IP 地址必須在 altnames 中 - node.js 不會嘗試根據(jù) CN 驗證 IP。
雖然錯誤是關(guān)于 SSL 證書和域名不匹配,但是在 http-proxy 模塊中,當(dāng)您的服務(wù)器是 HTTP 并且目標(biāo)是 HTTPS 時,通常會出現(xiàn)這種錯誤。
到這個開發(fā)包的官網(wǎng) 查找原因。
捕捉錯誤
proxy.on('error', function(e) {
...
});
當(dāng)一個請求被代理時,它遵循兩個不同的管道,它們將轉(zhuǎn)換應(yīng)用于 req 和 res 對象。 第一個管道(傳入)負(fù)責(zé)創(chuàng)建和操作將客戶端連接到 target 的流。 第二個管道(傳出)負(fù)責(zé)創(chuàng)建和操作從 target 向客戶端返回數(shù)據(jù)的流。
在創(chuàng)建時添加 secure:false 選項,問題消失:

以上就是http proxy 對網(wǎng)絡(luò)請求進行代理使用詳解的詳細(xì)內(nèi)容,更多關(guān)于http proxy 網(wǎng)絡(luò)請求代理的資料請關(guān)注腳本之家其它相關(guān)文章!
- Node中使用http-proxy-middleware實現(xiàn)代理跨域的方法步驟
- Node 使用express-http-proxy 做api網(wǎng)關(guān)的實現(xiàn)
- node.js使用 http-proxy 創(chuàng)建代理服務(wù)器操作示例
- Vue使用vue-recoure + http-proxy-middleware + vuex配合promise實現(xiàn)基本的跨域請求封裝
- node跨域轉(zhuǎn)發(fā) express+http-proxy-middleware的使用
- 詳解nodejs通過代理(proxy)發(fā)送http請求(request)
相關(guān)文章
實現(xiàn)基于飛書webhook監(jiān)聽github代碼提交
這篇文章主要為大家介紹了實現(xiàn)基于飛書webhook監(jiān)聽github代碼提交示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-01-01

