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標誌。