http proxy 对网络请求进行代理使用详解

 更新时间:2022年09月01日 10:47:00   作者:JerryWang_sap  
这篇文章主要为大家介绍了http proxy 对网络请求进行代理使用详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

正文

使用下面这段简单的代码对网络请求进行代理:

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 网络请求代理的资料请关注脚本之家其它相关文章!

相关文章

  • JavaScript Dom对象的操作

    JavaScript Dom对象的操作

    这篇文章主要介绍了JavaScript Dom对象的操作,文张以浏览器网页就是一个Dom树形结构做为核心,然后根据核心进行更新Dom节点、获得Dom节点、删除一个Dom节点、添加一个新的节点操作,下面文章是详细内容,需要的朋友可以参考以下
    2021-11-11
  • 微信小程序的分类页面制作

    微信小程序的分类页面制作

    这篇文章主要介绍了微信小程序实的分类页面制作的相关资料,需要的朋友可以参考下
    2017-06-06
  • 微信小程序 Tab页切换更新数据

    微信小程序 Tab页切换更新数据

    这篇文章主要介绍了微信小程序 Tab页切换更新数据的相关资料,需要的朋友可以参考下
    2017-01-01
  • 微信小程序 Canvas增强组件实例详解及源码分享

    微信小程序 Canvas增强组件实例详解及源码分享

    这篇文章主要介绍了微信小程序 Canvas增强组件实例详解及源码分享的相关资料,WeZRender是一个微信小程序Canvas增强组件,这里详细介绍,需要的朋友可以参考下
    2017-01-01
  • ECMAScript 6对象的扩展实现示例

    ECMAScript 6对象的扩展实现示例

    这篇文章主要为大家介绍了ECMAScript 6对象的扩展实现示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-08-08
  • 无UI 组件Headless框架逻辑原理用法示例详解

    无UI 组件Headless框架逻辑原理用法示例详解

    这篇文章主要为大家介绍了无UI 组件Headless框架逻辑原理用法示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-10-10
  • 利用js实现简单开关灯代码

    利用js实现简单开关灯代码

    这篇文章主要分享的是如何利用js实现简单开关灯代码,下面文字围绕js实现简单开关灯的相关资料展开具体内容,需要的朋友可以参考以下,希望对大家又所帮助
    2021-11-11
  • 微信小程序 视图层(xx.xml)和逻辑层(xx.js)详细介绍

    微信小程序 视图层(xx.xml)和逻辑层(xx.js)详细介绍

    这篇文章主要介绍了微信小程序 视图层(xx.xml)和逻辑层(xx.js)详细介绍的相关资料,需要的朋友可以参考下
    2016-10-10
  • await-to-js源码深入理解处理异步任务用法示例

    await-to-js源码深入理解处理异步任务用法示例

    这篇文章主要为大家介绍了await-to-js源码更完美处理异步任务示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-08-08
  • Google Maps基础及实例解析

    Google Maps基础及实例解析

    本文主要介绍Google Maps基础,这里对Google Maps的知识做了详细解析,并提供代码示例作为学习参考,有兴趣的朋友可以看一下
    2016-08-08

最新评论