首页 > 解决方案 > 删除 NodeJS http2 默认标头/以正确的顺序获取它们

问题描述

我正在尝试执行 http2 请求,并且正在使用 nodejs 中的 http2 库。

var body = {
      query: 'query',
      variables: null,
      operationName: "",
    };

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

    const req = client.request({
      ":method": "POST",
      ":authority": "host",
      ":scheme": "https",
      ":path": "/path/",
    });

    var headers =
      "accept: application/json";

    const buffer = new Buffer(JSON.stringify(body));
    var payload = Buffer.concat([Buffer.from(headers, "utf8"), buffer]);

    req.setEncoding("utf8");
    let data = [];
    req.on("data", (chunk) => {
      data.push(chunk);
    });
    req.write(payload);

    req.end();
    req.on("end", () => {
      console.log(data.join());
    });
  });

这是我的测试请求。我用 Charles Proxy 检查了请求,发现它可能失败了,因为目标服务器检查了标头的顺序。在我的标头对象中,它们的顺序正确,但它们以不同的顺序发送。这是与原始请求的唯一区别,它有效。

有什么方法可以 a) 禁用它们并将它们与其余标题一起手动发送,或者 b) 以正确的顺序发送它们?

如果我只是不在头对象中定义它们,它们默认为“:path”:“/”和“:method”:“get”。

标签: node.js

解决方案


推荐阅读