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

Node应用带http/https前缀访问localhost:port报错,无前缀正常如何解决?

解决方案

核心原因

该问题通常由两类逻辑触发:一是浏览器的HSTS缓存强制localhost域名走HTTPS协议,但你的Node服务仅监听HTTP协议;二是手动指定的访问协议与Node服务实际启动的协议不匹配。

具体修复方案

方案1:确认Node服务的监听配置

  • 检查Node启动代码,确认使用的模块类型:
    • 若使用http.createServer()启动服务,说明仅支持HTTP协议,无法响应HTTPS请求
    • 若使用https.createServer()启动服务,需确认已正确配置SSL证书,本地自签证书需要手动加入系统信任列表才能正常访问
  • 确认服务监听的端口与访问时填写的port完全一致,无端口占用、端口映射错误问题

方案2:清理Chrome的localhost HSTS缓存

如果Node服务为HTTP协议,但Chrome强制跳转HTTPS导致报错,按以下步骤操作:

  1. 打开Chrome,地址栏输入chrome://net-internals/#hsts进入HSTS配置页
  2. 在「Delete domain security policies」模块的输入框填写localhost,点击「Delete」按钮清除对应缓存
  3. 重启Chrome后重新访问http://localhost:port即可

如果你之前在本地部署过开启HSTS的HTTPS服务,会触发Chrome强制localhost域名走HTTPS的逻辑,清除缓存即可恢复默认适配规则。

方案3:调整Chrome的本地访问规则

  • 高版本Chrome默认会将HTTP协议的localhost请求自动升级为HTTPS,你可以点击地址栏左侧的安全提示图标,进入「站点设置」页面,将「HTTPS优先」选项关闭,同时将「不安全内容」权限调整为允许
  • 也可以右键点击Chrome快捷方式,在「目标」字段末尾添加启动参数--allow-insecure-localhost,绕过本地HTTPS证书校验逻辑

方案4:Node服务适配双协议访问

如果需要同时支持HTTP、HTTPS协议访问,可以调整代码启动双端口服务,示例如下:

const http = require('http');
const https = require('https');
const fs = require('fs');

// 启动HTTP服务
http.createServer((req, res) => {
  res.writeHead(200, {'Content-Type': 'text/plain'});
  res.end('HTTP 服务访问正常');
}).listen(3000, () => console.log('HTTP 服务运行在 http://localhost:3000'));

// 启动HTTPS服务(需提前生成本地自签证书)
const sslOptions = {
  key: fs.readFileSync('./localhost-key.pem'),
  cert: fs.readFileSync('./localhost.pem')
};
https.createServer(sslOptions, (req, res) => {
  res.writeHead(200, {'Content-Type': 'text/plain'});
  res.end('HTTPS 服务访问正常');
}).listen(3001, () => console.log('HTTPS 服务运行在 https://localhost:3001'));

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.16 11:57:03