我正在使用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
答案 0 :(得分:2)
HTTP RFC 2616说:
10.3重定向3xx
此类状态代码表示用户代理需要采取进一步操作才能完成请求。所需的动作可以由用户代理执行 没有与用户交互当且仅当使用的方法时 第二个请求是GET或HEAD 。