O Google está comprometido em promover a equidade racial para as comunidades negras. Veja como.
Esta página foi traduzida pela API Cloud Translation.
Switch to English

Como lidar com redirecionamentos

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

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

Por exemplo, suponha que você pedir foo.com. O servidor foo.com responde com um redirecionamento para bar.com. Carteiro ou onda passar o cabeçalho de autorização para foo e, em seguida, para barrar. Outras implementações HTTP, como golang de e Python, não passam automaticamente o cabeçalho de autorização para o URI redirecionado.

Como funciona

A seguinte sequência diagrama mostra o que acontece quando ocorre um redirecionamento.

sequência de redireccionamento

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

Nenhuma sequência de redirecionamento

Exemplo

Geralmente, é uma boa prática de codificação para antecipar que a implementação HTTP do seu idioma pode não passar o cabeçalho de autorização.

Seu código deve evitar o redirecionamento automático e fazer a chamada de redirecionamento depois de 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:

Armazenar o local redirecionado

Também é uma boa prática para armazenar o local redirecionado em uma base por usuário. Em outras palavras, depois de um usuário entra e um redirecionamento é recebido, armazenar a localização firebase-apiserver03-tah01-iad01.dapi.production.nest.com:9553/ e fazer todos os pedidos subseqüentes diretamente a este URI.

Armazenar o local redirecionado economiza tempo e evita que a carga do servidor desnecessária.

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 onda> = v7.58, você pode obter 401 erros não autorizadas de chamadas para a API que envolvem redirecionamentos. A partir de v7.58 onda, cabeçalhos de autorização personalizados não são encaminhados para o URL de redirecionamento retornado pela API.

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