Google si impegna a promuovere l'equità razziale per le comunità nere. Vedi come.
Questa pagina è stata tradotta dall'API Cloud Translation.
Switch to English

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 dell'autorizzazione all'URI reindirizzato e ciò comporta un errore 401 non autorizzato.

Ad esempio, supponiamo 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 dell'autorizzazione all'URI reindirizzato.

Come funziona

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

Sequenza di reindirizzamento

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

Nessuna sequenza di reindirizzamento

Esempio

In genere, è buona norma codificare anticipare che l'implementazione HTTP della propria lingua potrebbe non passare l'intestazione dell'autorizzazione.

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

Ad esempio, in Vai, puoi farlo:

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 altri esempi, vedere:

Memorizza la posizione reindirizzata

È inoltre consigliabile archiviare la posizione reindirizzata in base all'utente. In altre parole, dopo che un utente accede e riceve un reindirizzamento, memorizza la posizione firebase-apiserver03-tah01-iad01.dapi.production.nest.com:9553/ ed effettua tutte le richieste successive direttamente a questo URI.

La memorizzazione della posizione reindirizzata consente di risparmiare tempo e impedisce il caricamento inutile del server.

Per ulteriori informazioni su come i reindirizzamenti si riferiscono alla limitazione della velocità, vedere Limiti della velocità dei dati .

Utilizzo dell'arricciatura per testare l'API

Quando si utilizza curl> = v7.58, è possibile che vengano visualizzati 401 errori non autorizzati dalle chiamate all'API che comportano 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 ciò su curl> = v7.58, utilizzare il --location-trusted con qualsiasi chiamata da riga di comando.