POST表单重定向后404但手动访问正常的Golang问题排查
问题原因分析
重定向路径解析错误
你在http.Redirect中使用的目标地址是"success",这是相对路径。原请求路径是/process,浏览器会将该相对路径解析为/process/success,但你的路由并未注册这个路径,因此返回404错误。而手动输入/success是直接访问根路径下的路由,所以能正常返回200。状态码设置冲突
你先调用w.WriteHeader(303),随后又调用http.Redirect(..., http.StatusTemporaryRedirect)。http.Redirect会自动覆盖之前设置的响应头和状态码,且http.StatusTemporaryRedirect对应的是307状态码,这就是你收到307而非预期303的原因。307重定向会保留原POST请求方法,但即使success的POST路由存在,路径错误依然会导致404。
修复方案
- 修正重定向路径:将目标地址改为绝对路径
"/success",确保浏览器跳转到根路径下的正确路由。 - 使用正确的状态码:若需要让浏览器用GET方法访问目标页面,应使用
http.StatusSeeOther(对应303状态码),无需手动调用w.WriteHeader,http.Redirect会自动处理状态码。
修改后的processHandler代码:
func processHandler(w http.ResponseWriter, req *http.Request) { http.Redirect(w, req, "/success", http.StatusSeeOther) }
另外,确保main函数末尾启动HTTP服务,添加以下代码:
log.Fatal(http.ListenAndServe(":3033", router))
内容的提问来源于stack exchange,提问作者pigfox
相关产品推荐
相关产品推荐

