Como processar redirecionamentos

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

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

Por exemplo, suponha que você solicite foo.com. O servidor foo.com responde com um redirecionamento para bar.com. O Postman ou o Curl transmite o cabeçalho de autorização para foo e, em seguida, para a barra. Outras implementações de HTTP, como Golang's e Python's, não transmitem 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.

Redirecionar sequência

Para comparação, veja o que acontece quando um redirecionamento não ocorre.

Nenhuma sequência de redirecionamento

Exemplo

Geralmente, é uma prática recomendada de programação prever que a implementação HTTP da sua linguagem não passe 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, em Go, você pode fazer o seguinte:

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

Veja mais exemplos em:

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 fizer login e um redirecionamento for recebido, armazene o local firebase-apiserver03-tah01-iad01.dapi.production.nest.com:9553/ e faça todas as solicitações subsequentes diretamente para esse URI.

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

Para saber mais sobre como os redirecionamentos se relacionam com a limitação de taxa, consulte Limites de taxa de dados.

Como usar curl para testar a API

Ao usar curl >= v7.58, podem ocorrer erros 401 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 o URL de redirecionamento retornado pela API.

Para considerar isso na curl >= v7.58, use a sinalização --location-trusted com qualquer chamada de linha de comando.