Notice: We're retiring Works with Nest. See the home page for more information.
Google is committed to advancing racial equity for Black communities. See how.
本頁面由 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標誌。