Notice: We're retiring Works with Nest. See the home page for more information.
Google se compromete a impulsar la igualdad racial para las comunidades afrodescendientes. Obtén información al respecto.
Se usó la API de Cloud Translation para traducir esta página.
Switch to English

Cómo manejar los redireccionamientos

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

En respuesta a una solicitud REST API, el servidor Nest API devuelve una redirección. El cliente REST detecta la redirección y solicita la página a la que se redirigió 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, supongamos que pide foo.com. El servidor de 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 Golang's 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.

Redirigir secuencia

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

Sin secuencia de redireccionamiento

Ejemplo

En 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 la redirección automática y realizar la llamada de redireccionamiento después de volver a agregar los encabezados.

Por ejemplo, en Ir, 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 más ejemplos, ver:

Almacenar 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 las redirecciones 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 401 errores no autorizados de las 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 el --location-trusted con cualquier llamada de línea de comando.