Google s'est engagé à promouvoir l'équité raciale pour les communautés noires. Regarde comment.
Cette page a été traduite par l'API Cloud Translation.
Switch to English

Comment gérer les redirections

Certains langages de programmation ont des implémentations HTTP qui nécessitent une gestion spéciale pour les redirections.

En réponse à une demande d'API REST, le serveur d'API Nest renvoie une redirection. Le client REST détecte la redirection et demande la page vers laquelle le client a été redirigé. Certaines implémentations HTTP ne transfèrent pas l'en-tête Authorization à l'URI redirigé, ce qui entraîne une erreur 401 Unauthorized.

Par exemple, supposons que vous demandiez foo.com. Le serveur foo.com répond par une redirection vers bar.com. Postman ou Curl transmettent l'en-tête Authorization à foo puis à bar. D'autres implémentations HTTP, telles que celles de Golang et Python, ne transmettent pas automatiquement l'en-tête Authorization à l'URI redirigé.

Comment ça fonctionne

Le diagramme de séquence suivant montre ce qui se passe lorsqu'une redirection se produit.

Rediriger la séquence

À titre de comparaison, voici ce qui se passe lorsqu'une redirection ne se produit pas.

Aucune séquence de redirection

Exemple

En règle générale, il est recommandé de prévoir que l'implémentation HTTP de votre langage ne passe pas l'en-tête Authorization.

Votre code doit empêcher la redirection automatique et effectuer l'appel de redirection après avoir ajouté les en-têtes.

Par exemple, dans Go, vous pouvez faire ceci:

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

Pour plus d'exemples, consultez:

Stocker l'emplacement redirigé

Il est également recommandé de stocker l'emplacement redirigé par utilisateur. En d'autres termes, une fois qu'un utilisateur s'est connecté et qu'une redirection a été reçue, stockez l'emplacement firebase-apiserver03-tah01-iad01.dapi.production.nest.com:9553/ et effectuez toutes les demandes suivantes directement à cet URI.

Le stockage de l'emplacement redirigé permet de gagner du temps et d'éviter une charge inutile du serveur.

Pour en savoir plus sur la relation entre les redirections et la limitation de débit, consultez Limites de débit de données .

Utilisation de curl pour tester l'API

Lorsque vous utilisez curl> = v7.58, vous pouvez obtenir 401 erreurs non autorisées provenant d'appels à l'API qui impliquent des redirections. À partir de curl v7.58, les en-têtes d'autorisation personnalisés ne sont pas transmis à l'URL de redirection renvoyée par l'API.

Pour en tenir compte sur curl> = v7.58, utilisez l' --location-trusted avec tous les appels de ligne de commande.