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

Come gestire i reindirizzamenti

Alcuni linguaggi di programmazione hanno implementazioni HTTP che richiedono una gestione speciale per i reindirizzamenti.

In risposta a una richiesta API REST, il server API Nest restituisce un reindirizzamento. Il client REST rileva il reindirizzamento e richiede la pagina a cui è stato reindirizzato il client. Alcune implementazioni HTTP non inoltrano l'intestazione di autorizzazione all'URI reindirizzato e questo si traduce in un errore 401 Non autorizzato.

Ad esempio, supponi di chiedere foo.com. Il server foo.com risponde con un reindirizzamento a bar.com. Postman o Curl passano l'intestazione dell'autorizzazione a foo e poi a bar. Altre implementazioni HTTP, come Golang e Python, non passano automaticamente l'intestazione di autorizzazione all'URI reindirizzato.

Come funziona

Il seguente diagramma di sequenza mostra cosa succede quando si verifica un reindirizzamento.

Sequenza di reindirizzamento

Per fare un confronto, ecco cosa succede quando non si verifica un reindirizzamento.

Nessuna sequenza di reindirizzamento

Esempio

In genere, è una buona pratica di codifica prevedere che l'implementazione HTTP della propria lingua potrebbe non superare l'intestazione Authorization.

Il tuo codice dovrebbe impedire il reindirizzamento automatico ed effettuare la chiamata di reindirizzamento dopo aver aggiunto di nuovo le intestazioni.

Ad esempio, in Go, puoi fare questo:

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

Per ulteriori esempi, vedere:

Memorizza la posizione reindirizzata

È anche una buona pratica memorizzare la posizione reindirizzata in base all'utente. In altre parole, dopo che un utente ha effettuato l'accesso e viene ricevuto un reindirizzamento, archivia la posizione firebase-apiserver03-tah01-iad01.dapi.production.nest.com:9553/ ed effettua tutte le richieste successive direttamente a questo URI.

L'archiviazione della posizione reindirizzata consente di risparmiare tempo e impedisce il carico del server non necessario.

Per ulteriori informazioni su come redirect si riferiscono alla limitazione della velocità, vedere Limiti di Velocità dati .

Utilizzo di curl per testare l'API

Quando usi curl >= v7.58, potresti ricevere 401 Errori non autorizzati dalle chiamate all'API che coinvolgono i reindirizzamenti. A partire da curl v7.58, le intestazioni di autorizzazione personalizzate non vengono inoltrate all'URL di reindirizzamento restituito dall'API.

Per tenere conto di questo su ricciolo> = v7.58, utilizzare il --location-trusted contrassegna con le chiamate da linea di comando.