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

Next.js fetch请求自动将HTTP转为HTTPS的问题解决咨询

Next.js fetch请求自动将HTTP转为HTTPS的问题解决咨询

看起来你遇到了个挺闹心的问题——Next.js应用里发起的HTTP请求被自动转成了HTTPS,导致出现307内部重定向错误,但手动在无痕窗口访问那个HTTP地址却完全正常。我来帮你梳理几个可能的解决方向:

1. 先核对基础配置是否正确

首先得确认publicRuntimeConfig里的API_BASE_URL_MAIN是不是实打实的HTTP开头?有时候可能环境变量配置错了,或者不小心把地址写成了HTTPS,先把这个最基础的点排查掉。

另外,检查你的next.config.js里有没有开启HTTPS相关的强制配置,比如https: true这类设置,如果有的话,先注释掉再试试——开发环境下Next.js默认不会强制HTTPS,可能是这个配置在搞鬼。

2. 调整fetch请求的重定向处理逻辑

你已经尝试了redirect: 'error',可以再进一步明确设置follow: false来阻止自动跟随重定向,这样能更清楚地看到是哪里触发了地址转换。修改你的fetch代码试试:

fetch(`${baseUrl}${endpoint}`, {
  redirect: 'manual', // 也可以保留'error',手动处理重定向能更直观排查问题
  follow: false
})

这样如果有重定向发生,你能直接在response里看到状态码,方便排查是Next.js内部、浏览器还是API服务端发起的重定向。

3. 检查中间件或代理的影响

如果你用了Next.js的Middleware(中间件),得看看middleware.ts/middleware.js里有没有强制把所有HTTP请求转成HTTPS的逻辑,比如类似这样的代码:

if (request.nextUrl.protocol !== 'https') {
  return NextResponse.redirect(new URL(`https://${request.nextUrl.host}${request.nextUrl.pathname}`))
}

如果有这种全局重定向逻辑,记得给你的API请求地址加个例外,让它跳过这个转换。

另外,要是你在next.config.js里配置了rewrites或者代理规则,也可能导致地址被强制转换,检查这些配置里有没有涉及HTTPS的设置。

4. 浏览器混合内容策略的影响(开发环境)

如果你的Next.js应用本身是在HTTPS环境下运行的(比如本地用https://localhost启动),浏览器的混合内容安全策略会自动阻止HTTP请求,甚至偷偷转成HTTPS。这时候你可以切换到HTTP模式启动Next.js:

next dev -H 0.0.0.0 -p 3000 --no-https

这样应用以HTTP方式运行,发起HTTP请求就不会被浏览器拦截转换了。

5. 确认API服务端的响应头

虽然你手动访问没问题,但有时候API服务端可能会返回重定向到HTTPS的响应头(比如Location字段)。你可以用curl命令测试一下:

curl -v http://你的API地址

看看响应里有没有307或302的重定向状态码,如果有的话,那问题其实出在API服务端,需要调整服务端配置,不要对这个请求做HTTPS重定向。

备注:内容来源于stack exchange,提问作者Aleksa Ristic

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.21 12:03:04