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 possuem implementações HTTP que requerem tratamento especial para redirecionamentos.

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

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 de autorização para foo e depois para bar. Outras implementações HTTP, como Golang e Python, não passam automaticamente o cabeçalho de Autorização 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 comparação, veja o que acontece quando um redirecionamento não ocorre.

Nenhuma sequência de redirecionamento

Exemplo

Geralmente, é uma boa prática de codificação antecipar que a implementação HTTP do seu idioma possa não passar no 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 novamente.

Por exemplo, no 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, consulte:

Armazenar o local redirecionado

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

Armazenar o local redirecionado economiza tempo e evita a carga desnecessária 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 da versão v7.58, os cabeçalhos de autorização personalizados não são encaminhados para o URL de redirecionamento retornado pela API.

Para explicar isso em curl> = v7.58, use o --location-trusted com todas as chamadas de linha de comando.