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
相关产品推荐
相关产品推荐

