O Google tem o compromisso de promover a igualdade racial para as comunidades negras. Saiba como.

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 prever 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 neste URI.

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

Para saber mais sobre como redirecionamentos relacionar com 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 personalizados não são encaminhados para a URL de redirecionamento retornada pela API.

Para conta para este na onda> = v7.58, utilize o --location-trusted marque com todas as chamadas de linha de comando.