Google is committed to advancing racial equity for Black communities. See how.

Umgang mit Weiterleitungen

Einige Programmiersprachen haben HTTP-Implementierungen, die eine spezielle Behandlung für Umleitungen erfordern.

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

Angenommen, Sie fragen nach foo.com. Der foo.com-Server antwortet mit einer Weiterleitung an bar.com. Postman oder Curl übergeben den Authorization-Header an foo und dann an bar. Andere HTTP-Implementierungen wie die von 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.

Umleitungssequenz

Zum Vergleich: Folgendes passiert, wenn keine Weiterleitung erfolgt.

Keine Weiterleitungssequenz

Beispiel

Im Allgemeinen ist es eine gute Codierungspraxis, zu erwarten, dass die HTTP-Implementierung Ihrer Sprache den Authorization-Header möglicherweise nicht weitergibt.

Ihr Code sollte die automatische Umleitung verhindern und den Umleitungsaufruf durchfü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 Standort

Es ist auch eine bewährte Methode, den umgeleiteten Standort pro Benutzer zu speichern. Mit anderen Worten, nachdem sich ein Benutzer angemeldet und eine Umleitung empfangen hat, speichern Sie den Speicherort firebase-apiserver03-tah01-iad01.dapi.production.nest.com:9553/ und stellen Sie alle nachfolgenden Anforderungen direkt an diesen URI.

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

Um mehr zu erfahren , wie Umleitungen betrifft Rate Limiting, siehe Data Rate Limits .

Verwenden von curl zum Testen der API

Wenn Sie curl >= v7.58 verwenden, erhalten Sie möglicherweise 401 nicht autorisierte Fehler von Aufrufen an die API, die Umleitungen beinhalten. Ab curl v7.58 werden benutzerdefinierte Autorisierungsheader nicht an die von der API zurückgegebene Umleitungs-URL weitergeleitet.

Zur Berücksichtigung dieses auf curl> = v7.58, verwenden Sie die --location-trusted Flagge mit beliebiger Befehlszeile Anrufen.