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

无法通过局域网IP访问Next.js应用,请求被重定向至HTTPS

问题原因分析与解决办法

一、本地IP/localhost请求被重定向到HTTPS的常见原因

  1. Next.js配置强制HTTPS
    你的项目next.config.js中可能配置了forceSSL选项,或者自定义了重定向规则强制跳转HTTPS。比如:

    module.exports = {
      forceSSL: true, // 该配置会强制所有请求跳转到HTTPS
      async redirects() {
        return [
          {
            source: '/:path*',
            destination: 'https://your-local-ip:3000/:path*',
            permanent: true,
          },
        ]
      },
    }
    

    这类配置会让dev服务器自动把HTTP请求重定向到HTTPS,导致资源加载失败。

  2. 浏览器HSTS缓存
    如果你之前曾用HTTPS访问过localhost或本地IP,浏览器会缓存HSTS(HTTP Strict Transport Security)规则,强制后续请求使用HTTPS。Mac的Chrome和iPhone模拟器的Safari都会继承这个缓存。

  3. 代理工具或系统网络设置干扰
    若Mac上运行了Charles、Proxyman这类代理工具,或者系统网络设置里开启了自动代理、SSL过滤,这些工具可能会把HTTP请求强制转换成HTTPS请求,导致资源加载异常。

  4. 误设生产环境变量
    如果环境变量NODE_ENV被设置为production,Next.js在dev模式下也可能触发生产环境的安全策略,强制使用HTTPS。

二、iPhone模拟器请求localhost被代理到HTTPS的原因

iPhone模拟器的网络栈直接复用Mac的网络配置,所以:

  • 模拟器里的Safari会继承Mac浏览器的HSTS缓存,自动把localhost请求转成HTTPS;
  • 如果Mac上有代理工具在运行,模拟器的所有网络请求都会走这个代理,被强制转成HTTPS;
  • 若Next.js dev服务器被意外配置为启用HTTPS(比如加了--experimental-https参数),模拟器请求时会自动使用HTTPS协议。

三、解决步骤

  1. 检查并修改Next.js配置
    打开next.config.js,删除或注释掉forceSSL选项,以及任何强制HTTPS的重定向规则。保存后重启next dev服务。

  2. 清除浏览器HSTS缓存

    • Mac Chrome:打开chrome://net-internals/#hsts,在“Delete domain security policies”输入框中分别输入localhost和你的本地IP(比如192.168.1.100),点击删除;
    • iPhone模拟器:打开设置→Safari浏览器→清除历史记录与网站数据,重启模拟器。
  3. 正确启动dev服务器
    使用以下命令启动服务,明确允许所有IP访问并禁用HTTPS:

    next dev -H 0.0.0.0 -p 3000
    

    注意不要添加--experimental-https参数,该参数会让dev服务器启用HTTPS。

  4. 关闭代理工具与系统代理
    暂时关闭Charles、Proxyman等代理工具,同时检查Mac系统设置→网络→高级→代理,确保所有代理选项都处于关闭状态。

  5. 检查环境变量
    在终端中执行echo $NODE_ENV,确认输出是development。如果是production,执行export NODE_ENV=development后重启dev服务。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 17:35:15