Google jest zaangażowany w promowanie równości rasowej dla społeczności czarnych. Zobacz jak.
Ta strona została przetłumaczona przez Cloud Translation API.
Switch to English

Jak obsługiwać przekierowania

Niektóre języki programowania mają implementacje HTTP, które wymagają specjalnej obsługi przekierowań.

W odpowiedzi na żądanie REST API serwer Nest API zwraca przekierowanie. Klient REST wykrywa przekierowanie i żąda strony, na którą klient został przekierowany. Niektóre implementacje HTTP nie przekazują dalej nagłówka Authorization do przekierowanego identyfikatora URI, co powoduje błąd 401 Unauthorized.

Na przykład załóżmy, że pytasz o foo.com. Serwer foo.com odpowiada przekierowaniem do bar.com. Postman lub Curl przekazują nagłówek Authorization do foo, a następnie do bar. Inne implementacje HTTP, takie jak Golang i Python, nie przekazują automatycznie nagłówka Authorization do przekierowanego URI.

Jak to działa

Poniższy diagram sekwencji przedstawia, co się dzieje, gdy następuje przekierowanie.

Sekwencja przekierowania

Dla porównania, oto co się dzieje, gdy przekierowanie nie występuje.

Brak sekwencji przekierowań

Przykład

Ogólnie rzecz biorąc, dobrą praktyką kodowania jest przewidywanie, że implementacja HTTP w Twoim języku może nie przekazać nagłówka Authorization.

Twój kod powinien zapobiegać automatycznemu przekierowaniu i wykonywać wywołanie przekierowania po ponownym dodaniu nagłówków.

Na przykład w Go możesz to zrobić:

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
    },
}

Aby uzyskać więcej przykładów, zobacz:

Zapisz przekierowaną lokalizację

Najlepszą praktyką jest również przechowywanie przekierowanej lokalizacji dla każdego użytkownika. Innymi słowy, po zalogowaniu się użytkownika i otrzymaniu przekierowania, zapisz lokalizację firebase-apiserver03-tah01-iad01.dapi.production.nest.com:9553/ i wysyłaj wszystkie kolejne żądania bezpośrednio do tego identyfikatora URI.

Przechowywanie przekierowanej lokalizacji oszczędza czas i zapobiega niepotrzebnemu obciążeniu serwera.

Aby dowiedzieć się więcej na temat związku przekierowań z ograniczaniem szybkości, zobacz Limity szybkości transmisji danych .

Używanie curl do testowania API

Korzystając z curl> = v7.58, mogą wystąpić błędy 401 nieautoryzowanych wywołań interfejsu API, które obejmują przekierowania. Począwszy od wersji curl 7.58 niestandardowe nagłówki autoryzacji nie są przekazywane do adresu URL przekierowania zwróconego przez interfejs API.

Aby to uwzględnić w curl> = v7.58, użyj flagi --location-trusted wszystkich wywołań wiersza poleceń.