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

Next.js POST表单提交后重定向报405 Method Not Allowed错误

问题原因

307 Temporary Redirect状态码的规范要求是:浏览器跳转时必须保留原请求的方法和请求体。你提交表单用的是POST方法,触发307跳转到/thank-you页面时,浏览器会向该页面地址发送POST请求,但Next.js的页面对应路由默认仅支持GET请求访问,会直接返回405 Method Not Allowed响应,就会出现短暂闪现405错误页的现象。

修复方案
  • 直接将重定向状态码替换为303 See Other即可,该状态码的标准行为就是明确要求客户端收到响应后,改用GET方法请求跳转目标地址,完全适配表单提交后跳转结果页的场景,修改后代码如下:
export default async function handler(req, res) {
    const body = Object.assign({}, req.body)
    
    // 存储表单数据等业务逻辑
    
    // 原307替换为303
    res.redirect(303, "/thank-you")
}
  • 如果你是通过客户端JS(fetch/axios等)手动发起POST请求,而非原生表单默认提交行为,API路由返回的redirect响应不会自动触发页面跳转,这种场景需要在接口请求成功的回调里,客户端手动执行window.location.href = '/thank-you'完成跳转,无需在API路由内调用redirect方法。
注意事项
  • 不建议使用302状态码处理该场景:虽然部分浏览器会默认将302跳转的POST请求转为GET,但这不属于HTTP标准强制规范,不同浏览器、不同版本下可能存在行为差异,有兼容性风险。
  • 跳转前确认/thank-you路由未做额外的请求方法限制,保证GET请求可以正常访问。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 01:18:26