Notice: We're retiring Works with Nest. See the home page for more information.
Google 致力于为黑人社区推动种族平等。查看具体举措
此页面由 Cloud Translation API 翻译。
Switch to English

如何处理重定向

某些编程语言具有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-i​​ad01.dapi.production.nest.com:9553/位置存储,并直接向此URI发出所有后续请求。

存储重定向的位置可以节省时间并避免不必要的服务器负载。

要了解有关重定向与速率限制的关系的更多信息,请参阅数据速率限制

使用curl测试API

使用curl> = v7.58时,从涉及重定向的API调用中可能会收到401未经授权的错误。从curl v7.58开始,自定义Authorization标头不会转发到API返回的重定向URL。

要在curl> = v7.58上解决此问题,请在所有命令行调用中使用--location-trusted标志。