Notice: We're retiring Works with Nest. See the home page for more information.
En Google, luchamos por la equidad racial de la comunidad negra. Más información
Se usó la API de Cloud Translation para traducir esta página.
Switch to English

Cómo manejar redirecciones

Algunos lenguajes de programación tienen implementaciones HTTP que requieren un manejo especial para las redirecciones.

En respuesta a una solicitud de API REST, el servidor de API de Nest devuelve una redirección. El cliente REST detecta la redirección y solicita la página a la que fue redirigido el cliente. Algunas implementaciones HTTP no reenvían el encabezado de autorización al URI redirigido y esto da como resultado un error 401 no autorizado.

Por ejemplo, suponga que solicita foo.com. El servidor foo.com responde con una redirección a bar.com. Cartero o Curl pasan el encabezado de Autorización a foo y luego a la barra. Otras implementaciones HTTP, como las de Golang y Python, no pasan automáticamente el encabezado de autorización al URI redirigido.

Cómo funciona

El siguiente diagrama de secuencia muestra lo que sucede cuando se produce una redirección.

Secuencia de redireccionamiento

A modo de comparación, esto es lo que sucede cuando no se produce una redirección.

Sin secuencia de redireccionamiento

Ejemplo

Por lo general, es una buena práctica de codificación anticipar que la implementación HTTP de su idioma podría no pasar el encabezado de autorización.

Su código debe evitar el redireccionamiento automático y realizar la llamada de redireccionamiento después de volver a agregar los encabezados.

Por ejemplo, en Go, puede hacer esto:

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 obtener más ejemplos, consulte:

Almacene la ubicación redirigida

También es una buena práctica almacenar la ubicación redirigida por usuario. En otras palabras, después de que un usuario inicie sesión y reciba una redirección, almacene la ubicación firebase-apiserver03-tah01-iad01.dapi.production.nest.com:9553/ y realice todas las solicitudes posteriores directamente a este URI.

El almacenamiento de la ubicación redirigida ahorra tiempo y evita la carga innecesaria del servidor.

Para obtener más información sobre cómo los redireccionamientos se relacionan con la limitación de velocidad, consulte Límites de velocidad de datos .

Usando curl para probar la API

Al usar curl> = v7.58, puede obtener errores 401 no autorizados de llamadas a la API que involucran redireccionamientos. A partir de curl v7.58, los encabezados de autorización personalizados no se reenvían a la URL de redireccionamiento devuelta por la API.

Para dar cuenta de esto en curl> = v7.58, use la --location-trusted con cualquier llamada de línea de comando.