Golang Go语言中关于 http post 请求重定向后变成 get 请求问题
Golang Go语言中关于 http post 请求重定向后变成 get 请求问题
对于 301 、302 、303 的状态码, 接下来转发的请求会将请求 Method 转换成 GET method (如果原始请求 Method 是 HEAD 则不变,还是 HEAD), 而且 body 为空, 尽管原始的请求可能包含 body 。https://colobu.com/2017/04/19/go-http-redirect/
我就是遇到这个问题了,想问下各位高手怎么样设置才能像 curl 的 CURL_REDIR_POST_ALL 选项一样重定向后保持 post 请求和 body 啊。
更多关于Golang Go语言中关于 http post 请求重定向后变成 get 请求问题的实战教程也可以访问 https://www.itying.com/category-94-b0.html
没有人遇到过吗?
更多关于Golang Go语言中关于 http post 请求重定向后变成 get 请求问题的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
你看下 307 咋说的
30x 状态码是服务器返回的啊 这边改不了啊。
在Go语言中,当你遇到HTTP POST请求在重定向后变成GET请求的问题时,这通常是由于HTTP协议的一个标准行为所导致的。根据HTTP 1.1规范,当服务器返回一个301(Moved Permanently)或302(Found)状态码进行重定向时,如果原始请求是POST方法,大多数浏览器和HTTP客户端(包括Go语言的net/http
包)会将后续请求方法改为GET。
这种行为是为了避免在重定向后可能导致的副作用,比如重复提交表单数据。然而,对于某些应用场景(如RESTful API的重定向),保持POST方法可能更为合适。
为了解决这个问题,你可以采取以下几种策略:
-
服务器端调整:如果可能,调整服务器端的重定向逻辑,使用303(See Other)或307(Temporary Redirect)状态码。其中,303明确指示客户端使用GET方法重新请求资源,而307则要求客户端在重定向时使用与原始请求相同的方法(包括POST)。
-
客户端处理:在Go语言的客户端代码中,手动处理重定向逻辑,确保在重定向时保持POST方法。这通常涉及到检查响应状态码,并根据需要手动发起新的POST请求。
-
使用第三方库:考虑使用支持更灵活重定向处理的第三方HTTP客户端库。
总之,处理HTTP重定向时的方法选择应基于你的具体应用场景和需求。