带有远程代理的节点HTTP2请求 [英] Node HTTP2 request with remote proxy

查看:83
本文介绍了带有远程代理的节点HTTP2请求的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试在Node中运行以下示例.它可以在HTTP/1.1上正常运行,但在HTTP2上失败:

I'm trying to run the following example in Node. It runs properly with HTTP/1.1 but fails with HTTP2:

// Get an HTTP/1.1 tunnel:
const req = http.request({
  method: 'CONNECT',
  host: proxy.host, // This is a remote proxy which works properly with http/1.1
  port: proxy.port,
  path: 'example.com'
});
req.end();

const tunnelledSocket = await new Promise((resolve) => {
  req.on('connect', (_res, socket) => resolve(socket));
});

// We can now read/write to our raw TCP socket to example.com:
const client = http2.connect('https://example.com', {
  // Tunnel this request through the HTTP/1.1 tunnel:
  createConnection: () => tunnelledSocket
});

// Until here all is good, the problem comes when trying to load the url.
const proxiedRequest = client.request({
  ':path': '/test'
});

我从节点收到以下无用的错误:

I'm getting the following unhelpful error from node:

Error [ERR_HTTP2_ERROR]: Protocol error
    at new NghttpError (node:internal/http2/util:550:5)
    at Http2Session.onSessionInternalError (node:internal/http2/core:776:26) {
  code: 'ERR_HTTP2_ERROR',
  errno: -505
}

我找不到解决方法的明确答案.

I couldn't find any clear answer on how to solve it.

推荐答案

所以我找到了可能的答案.

So I found a possible answer.

在创建连接时,您需要将tls连接到HTTP2,因为它是HTTPS请求,但是您需要忽略证书错误,否则tls会抱怨您正在连接到您不拥有证书的域.至少那是我设法做到的唯一方法.

When creating the connection, you need to connect HTTP2 with tls as it's an HTTPS request, but you need to ignore the certificate errors as otherwise, tls will complain that you are connecting to a domain where you don't own a certificate. At least that is the only way I managed to do it.

我愿意听到更好的解决方案.

I'm open to hear better solutions.

const client = http2.connect('https://example.com', {
  createConnection: () =>
    tls.connect({
      socket: tunnelledSocket,
      rejectUnauthorized: false,
      ALPNProtocols: ['h2'],
    }),
});

这篇关于带有远程代理的节点HTTP2请求的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆