某些编程语言具有HTTP实现,需要对重定向进行特殊处理。
响应REST API请求,Nest API服务器返回重定向。 REST客户端检测到重定向,并请求将客户端重定向到的页面。某些HTTP实现未将Authorization标头转发到重定向的URI,这将导致401 Unauthorized错误。
例如,假设您要求foo.com。 foo.com服务器以重定向到bar.com的方式进行响应。邮递员或Curl将Authorization标头传递给foo,然后传递给bar。其他HTTP实现(例如Golang和Python)不会自动将Authorization标头传递给重定向的URI。
这个怎么运作
以下序列图显示了发生重定向时发生的情况。

为了进行比较,以下是未发生重定向时发生的情况。

例
通常,良好的编码习惯是预期您的语言的HTTP实现可能不会通过Authorization标头。
您的代码应防止自动重定向,并在重新添加标头后进行重定向调用。
例如,在Go中,您可以执行以下操作:
customClient := http.Client { CheckRedirect: func(redirRequest *http.Request, via []*http.Request) error { // Go's http.DefaultClient does not forward headers when a redirect 3xx // response is received. Thus, the header (which in this case contains the // Authorization token) needs to be passed forward to the redirect // destinations. redirRequest.Header = req.Header // Go's http.DefaultClient allows 10 redirects before returning an // an error. We have mimicked this default behavior.s if len(via) >= 10 { return errors.New("stopped after 10 redirects") } return nil }, }
有关更多示例,请参见:
存储重定向的位置
最好的做法是按用户存储重定向的位置。换句话说,在用户登录并接收到重定向后,将firebase-apiserver03-tah01-iad01.dapi.production.nest.com:9553/位置存储,并直接向此URI发出所有后续请求。
存储重定向的位置可以节省时间并避免不必要的服务器负载。
要了解有关重定向如何与速率限制相关的更多信息,请参阅数据速率限制。
使用curl测试API
使用curl> = v7.58时,从涉及重定向的API调用中可能会收到401未经授权的错误。从curl v7.58开始,自定义Authorization标头不会转发到API返回的重定向URL。
要在curl> = v7.58上解决这个问题,请在所有命令行调用中使用--location-trusted
标志。