Notice: We're retiring Works with Nest. See the home page for more information.
O Google tem o compromisso de promover a igualdade racial para as comunidades negras. Saiba como.
Esta página foi traduzida pela API Cloud Translation.
Switch to English

Como lidar com redirecionamentos

Algumas linguagens de programação têm implementações HTTP que requerem tratamento especial para redirecionamentos.

Em resposta a uma solicitação REST API, o servidor Nest API retorna um redirecionamento. O cliente REST detecta o redirecionamento e solicita a página para a qual o cliente foi redirecionado. Algumas implementações de HTTP não encaminham o cabeçalho Authorization para o URI redirecionado e isso resulta em um erro 401 Unauthorized.

Por exemplo, suponha que você solicite foo.com. O servidor foo.com responde com um redirecionamento para bar.com. Postman ou Curl passam o cabeçalho Authorization para foo e então para bar. Outras implementações HTTP, como Golang's e Python's, não passam automaticamente o cabeçalho Authorization para o URI redirecionado.

Como funciona

O diagrama de sequência a seguir mostra o que acontece quando ocorre um redirecionamento.

Sequência de redirecionamento

Para efeito de comparação, aqui está o que acontece quando um redirecionamento não ocorre.

Sem sequência de redirecionamento

Exemplo

Geralmente, é uma boa prática de codificação antecipar que a implementação de HTTP da sua linguagem pode não passar o cabeçalho de autorização.

Seu código deve impedir o redirecionamento automático e fazer a chamada de redirecionamento após adicionar os cabeçalhos de volta.

Por exemplo, em Go, você pode fazer isso:

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

Para mais exemplos, veja:

Armazene o local redirecionado

Também é uma prática recomendada armazenar o local redirecionado por usuário. Em outras palavras, depois que um usuário faz login e um redirecionamento é recebido, armazene o local firebase-apiserver03-tah01-iad01.dapi.production.nest.com:9553/ e faça todas as solicitações subsequentes diretamente para este URI.

Armazenar o local redirecionado economiza tempo e evita o carregamento desnecessário do servidor.

Para saber mais sobre como os redirecionamentos estão relacionados à limitação de taxa, consulte Limites de taxa de dados .

Usando curl para testar a API

Ao usar curl> = v7.58, você pode obter 401 erros não autorizados de chamadas para a API que envolvem redirecionamentos. A partir do curl v7.58, os cabeçalhos de autorização customizados não são encaminhados para a URL de redirecionamento retornada pela API.

Para contabilizar isso em curl> = v7.58, use o --location-trusted com qualquer chamada de linha de comando.