You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何强制浏览器在无TLS场景下使用HTTP/2协议?

问题解答

主流的桌面/移动端浏览器(Chrome、Firefox、Edge、Safari等)均未支持明文HTTP/2(h2c)协议,没有办法直接在不使用HTTPS的前提下通过普通浏览器模式正常访问HTTP/2服务。

你遇到的ERR_INVALID_HTTP_RESPONSE报错,本质是因为你启动的是未加密的h2c模式HTTP/2服务:浏览器向3000端口发送的是HTTP/1.1标准的请求报文,而服务端返回的是HTTP/2的二进制帧,浏览器无法解析该格式的返回内容,所以抛出无效响应错误。

你可以根据使用场景选择以下解决方式:

方案1:使用带TLS加密的HTTP/2服务(推荐)

这是最符合浏览器标准要求的方案,Node.js中可通过http2.createSecureServer方法创建带TLS的HTTP/2服务,本地调试可使用自签证书:

  • 本地生成自签证书可使用mkcert工具,执行mkcert localhost即可生成适配本地域名的可信证书
  • 服务端参考代码如下:
const http2 = require('http2');
const fs = require('fs');

const server = http2.createSecureServer({
  // 替换为你的证书文件路径
  key: fs.readFileSync('./localhost-key.pem'),
  cert: fs.readFileSync('./localhost.pem')
});

// 处理请求逻辑
server.on('stream', (stream, headers) => {
  stream.respond({
    'content-type': 'text/html; charset=utf-8',
    ':status': 200
  });
  stream.end('<h1>HTTP/2 服务访问正常</h1>');
});

server.listen(3000, () => {
  console.log(`HTTP/2 server is listening on port 3000. PID: ${process.pid}`);
});

配置完成后通过https://localhost:3000访问即可正常加载内容。

方案2:使用支持h2c的工具调试

如果仅做接口逻辑调试不需要浏览器展示,可使用支持明文HTTP/2的工具访问:

  • curl工具:执行命令 curl --http2-prior-knowledge http://localhost:3000 即可获取响应
  • Postman、Apifox等API调试工具:在请求设置中开启HTTP/2支持,即可直接访问h2c模式的服务

内容的提问来源于stack exchange,提问作者Alex Gusev

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.11 01:48:02