为什么Go http.Client中的POST请求不遵循301重定向?

时间:2014-12-16 12:49:40

标签: http go

我正在使用Go构建测试工具。此工具可以通过向端点发出POST请求来检索特定URL,该端点返回带有Location的303以进行测试。有时这个位置本身会被重定向到301,我也想跟随它。

Test tool -> POST /get-url-to-test -> 303 Location: /other -> GET /other -> 301 Location: /new-other (stops here because initial request is POST)

正如我们在Go的源代码中看到的那样(第241到257行),似乎GET请求遵循301重定向,但不是POST请求: http://golang.org/src/net/http/client.go

为什么?这是HTTP规范的一部分吗?这是由Go社区做出的决定吗?

我问的原因是因为在我的情况下,我认为我必须手动执行新的GET请求以获取/other重定向到的网址。


编辑1:我之前犯了一个错误:Go使用GET请求获取/other资源。但是因为它返回301并且初始请求是POST,所以Go停止重定向301.这看起来很奇怪。我错过了什么吗?

编辑2:这可能是一个错误,我在Github上打开了一个问题:https://github.com/golang/go/issues/9348

1 个答案:

答案 0 :(得分:2)

HTTP RFC 2616说:

  

10.3重定向3xx

     

此类状态代码表示用户代理需要采取进一步操作才能完成请求。所需的动作可以由用户代理执行   没有与用户交互当且仅当使用的方法时   第二个请求是GET或HEAD