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.
Diese Seite wurde von der Cloud Translation API übersetzt.
Switch to English

Umgang mit Weiterleitungen

Einige Programmiersprachen verfügen über HTTP-Implementierungen, die eine spezielle Behandlung für Weiterleitungen erfordern.

Als Antwort auf eine REST-API-Anforderung gibt der Nest-API-Server eine Umleitung zurück. Der REST-Client erkennt die Umleitung und fordert die Seite an, auf die der Client umgeleitet wurde. Einige HTTP-Implementierungen leiten den Autorisierungsheader nicht an den umgeleiteten URI weiter. Dies führt zu einem 401 Unauthorized-Fehler.

Angenommen, Sie fragen nach foo.com. Der foo.com-Server antwortet mit einer Weiterleitung an bar.com. Postbote oder Locken übergeben den Autorisierungsheader an foo und dann an bar. Andere HTTP-Implementierungen wie Golang und Python übergeben den Authorization-Header nicht automatisch an den umgeleiteten URI.

Wie es funktioniert

Das folgende Sequenzdiagramm zeigt, was passiert, wenn eine Umleitung erfolgt.

Sequenz umleiten

Zum Vergleich: Folgendes passiert, wenn keine Umleitung erfolgt.

Keine Umleitungssequenz

Beispiel

Im Allgemeinen ist es eine gute Codierungspraxis, vorauszusehen, dass die HTTP-Implementierung Ihrer Sprache den Autorisierungsheader möglicherweise nicht besteht.

Ihr Code sollte die automatische Umleitung verhindern und den Umleitungsaufruf ausführen, nachdem Sie die Header wieder hinzugefügt haben.

In Go können Sie beispielsweise Folgendes tun:

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

Weitere Beispiele finden Sie unter:

Speichern Sie den umgeleiteten Speicherort

Es wird auch empfohlen, den umgeleiteten Speicherort pro Benutzer zu speichern. Mit anderen Worten, nachdem sich ein Benutzer angemeldet und eine Weiterleitung empfangen hat, speichern Sie den Speicherort firebase-apiserver03-tah01-iad01.dapi.production.nest.com:9553/ und richten Sie alle nachfolgenden Anforderungen direkt an diese URI.

Das Speichern des umgeleiteten Speicherorts spart Zeit und verhindert unnötige Serverlast.

Weitere Informationen zum Zusammenhang von Weiterleitungen mit Ratenbegrenzungen finden Sie unter Datenratenlimits .

Verwenden von Curl zum Testen der API

Bei Verwendung von curl> = v7.58 werden möglicherweise 401 nicht autorisierte Fehler durch Aufrufe der API angezeigt, die Weiterleitungen beinhalten. Ab Curl v7.58 werden benutzerdefinierte Autorisierungsheader nicht mehr an die von der API zurückgegebene Umleitungs-URL weitergeleitet.

Um dies bei curl> = v7.58 zu berücksichtigen, verwenden Sie das --location-trusted bei allen Befehlszeilenaufrufen.