首頁 > 軟體

http proxy 對網路請求進行代理使用詳解

2022-09-02 18:02:47

正文

使用下面這段簡單的程式碼對網路請求進行代理:

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');

這段程式碼的語意是,建立一個代理 HTTP 伺服器,監聽在埠 8089 上。

因此該代理伺服器接收到任何傳送到 8089 埠的 HTTP 請求,都會自動將其傳送到 targetUrl 指定的 sap 網站上。

命令列啟動伺服器

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: 

詳細的呼叫棧

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'
    },

當我們使用 SSL 連線到伺服器時,伺服器所做的第一件事就是提供一個證書,上面寫著 我是 api.dropbox.com。 證書有一個 主題,該主題有一個 CN(Common Name, 通用名稱的縮寫)。證書也可以有一個或多個 subjectAltNames

當 node.js 連線到伺服器時,node.js 會獲取此證書,然後驗證它認為它正在連線的域名 (api.dropbox.com) 是否與主題的 CN 或其中一個替代名稱匹配。

請注意,在 node 0.10.x 中,如果使用 IP 連線,則 IP 地址必須在 altnames 中 - node.js 不會嘗試根據 CN 驗證 IP。

雖然錯誤是關於 SSL 證書和域名不匹配,但是在 http-proxy 模組中,當您的伺服器是 HTTP 並且目標是 HTTPS 時,通常會出現這種錯誤。

到這個開發包的官網 查詢原因。

捕捉錯誤

proxy.on('error', function(e) {
  ...
});

當一個請求被代理時,它遵循兩個不同的管道,它們將轉換應用於 req 和 res 物件。 第一個管道(傳入)負責建立和操作將使用者端連線到 target 的流。 第二個管道(傳出)負責建立和操作從 target 向用戶端返回資料的流。

在建立時新增 secure:false 選項,問題消失:

以上就是http proxy 對網路請求進行代理使用詳解的詳細內容,更多關於http proxy 網路請求代理的資料請關注it145.com其它相關文章!


IT145.com E-mail:sddin#qq.com