Respuestas y encabezados de solicitud

ID de región

El REGION_ID es un código abreviado que Google asigna en función de la región que selecciones al crear tu aplicación. El código no corresponde a un país o provincia, aunque algunos IDs de región pueden parecerse a los códigos de país y provincia que se usan habitualmente. En las aplicaciones creadas después de febrero del 2020, REGION_ID.r se incluye en las URLs de App Engine. En las aplicaciones creadas antes de esa fecha, el ID de región es opcional en la URL.

Más información sobre los IDs de región

Consulta esta página de referencia para obtener información sobre qué encabezados HTTP son compatibles y los límites de las solicitudes y respuestas en App Engine. Para saber cómo recibe solicitudes y envía respuestas App Engine, consulta el artículo Cómo se gestionan las solicitudes.

Encabezados de solicitud

Una solicitud HTTP entrante incluye las cabeceras HTTP enviadas por el cliente. Por motivos de seguridad, los proxies intermedios sanitizan, modifican o eliminan algunos encabezados antes de que lleguen a la aplicación.

Encabezados eliminados de las solicitudes entrantes

Los siguientes encabezados se eliminan de las solicitudes entrantes si un cliente los envía:

  • Encabezados con nombres que coincidan con el patrón X-Google-*. Este patrón de nombre está reservado para Google.

  • Encabezados con nombres que coincidan con los encabezados específicos de App Engine. Solo se eliminan las coincidencias exactas que no distinguen entre mayúsculas y minúsculas. Por ejemplo, se eliminarán los encabezados llamados X-Appengine-Country o X-AppEngine-Country, pero no X-Appengine-Cntry.

Además, se eliminan los siguientes encabezados de las solicitudes entrantes porque están relacionados con la transferencia de datos HTTP entre el cliente y el servidor:

  • Accept-Encoding
  • Connection
  • Keep-Alive
  • Proxy-Authorization
  • TE
  • Trailer
  • Transfer-Encoding

Por ejemplo, el servidor puede enviar automáticamente una respuesta comprimida con gzip en función del valor del encabezado de solicitud Accept-Encoding. La aplicación no necesita saber qué codificaciones de contenido puede aceptar el cliente.

Encabezados específicos de App Engine

Como servicio para la aplicación, App Engine añade los siguientes encabezados a todas las solicitudes:

X-Appengine-Country
País desde el que se ha originado la solicitud, como código de país ISO 3166-1 alfa-2. App Engine determina este código a partir de la dirección IP del cliente. Ten en cuenta que la información del país no se obtiene de la base de datos WHOIS. Es posible que una dirección IP con información del país en la base de datos WHOIS no tenga información del país en el encabezado X-Appengine-Country. Tu aplicación debe gestionar el código de país especial ZZ (país desconocido).
X-Appengine-Region
Nombre de la región desde la que se ha originado la solicitud. Este valor solo tiene sentido en el contexto del país indicado en X -Appengine-Country. Por ejemplo, si el país es "US" y la región es "ca", "ca" significa "California", no Canadá. La lista completa de valores de región válidos se encuentra en la norma ISO-3166-2.
X-Appengine-City
Nombre de la ciudad desde la que se ha originado la solicitud. Por ejemplo, una solicitud de la ciudad de Mountain View podría tener el valor de encabezado mountain view. No hay ninguna lista canónica de valores válidos para este encabezado. Si no se puede resolver la ciudad, el valor del encabezado se define como ?.
X-Appengine-CityLatLong
Latitud y longitud de la ciudad desde la que se ha enviado la solicitud. Esta cadena podría ser "37.386051,-122.083851" en una solicitud de Mountain View. Si no se puede determinar la ciudad, el valor del encabezado se define como 0.000000,0.000000.
X-Cloud-Trace-Context
Identificador único de la solicitud que se usa en Cloud Trace y Cloud Logging. No hay ninguna opción para inhabilitar este encabezado ni para elegir la frecuencia de muestreo del rastreo, ya que todas las aplicaciones del entorno estándar de App Engine se rastrean automáticamente.
X-Forwarded-For: [CLIENT_IP(s)], [global forwarding rule IP]

Lista delimitada por comas de las direcciones IP por las que se ha encaminado la solicitud del cliente. La primera IP de esta lista suele ser la del cliente que ha creado la solicitud. Las IPs posteriores proporcionan información sobre los servidores proxy que también gestionaron la solicitud antes de que llegara al servidor de aplicaciones. Por ejemplo:

X-Forwarded-For: clientIp, proxy1Ip, proxy2Ip
X-Forwarded-Proto [http | https]

Muestra http o https en función del protocolo que haya usado el cliente para conectarse a tu aplicación.

El balanceador de carga de Google Cloud finaliza todas las conexiones https y, a continuación, reenvía el tráfico a las instancias de App Engine a través de http. Por ejemplo, si un usuario solicita acceso a su sitio a través de https://PROJECT_ID.REGION_ID.r.appspot.com, el valor del encabezado X-Forwarded-Proto es https.

Además, App Engine puede definir los siguientes encabezados, que son para uso interno de App Engine:

  • X-Appengine-Https
  • X-Appengine-User-IP
  • X-Appengine-Api-Ticket
  • X-Appengine-Request-Log-Id
  • X-Appengine-Default-Version-Hostname
  • X-Appengine-Timeout-Ms

Los servicios de App Engine pueden añadir encabezados de solicitud adicionales:

  • Las solicitudes del servicio Cron añaden el siguiente encabezado:

    X-Appengine-Cron: true

    Consulta más información en Proteger URLs para cron.

Solicitar respuestas

La documentación de este encabezado HTTP solo se aplica a las respuestas a solicitudes HTTP entrantes. La respuesta se puede modificar antes de devolverse al cliente.

Encabezados eliminados

Los siguientes encabezados se ignoran y se quitan de la respuesta:

  • Connection
  • Content-Encoding*
  • Content-Length
  • Date
  • Keep-Alive
  • Proxy-Authenticate
  • Server
  • Trailer
  • Transfer-Encoding
  • Upgrade

* Se puede volver a añadir si App Engine comprime la respuesta.

También se eliminan los encabezados que contengan caracteres no ASCII en el nombre o en el valor.

Encabezados añadidos o sustituidos

Los siguientes encabezados se añaden o se sustituyen en la respuesta:

Cache-Control, Expires y Vary

Estos encabezados especifican la política de almacenamiento en caché para los proxies web intermedios (como el frontend de Google y los proveedores de servicios de Internet) y los navegadores. Si tu aplicación define estos encabezados de respuesta, normalmente no se modificarán a menos que tu aplicación también defina un encabezado Set-Cookie o que la respuesta se genere para un usuario que haya iniciado sesión con una cuenta de administrador.

Si tu aplicación define un encabezado de respuesta Set-Cookie, el encabezado Cache-Control se definirá como private (si aún no es más restrictivo) y el encabezado Expires se definirá como la fecha actual (si aún no ha pasado). Por lo general, esto permitirá que los navegadores almacenen en caché la respuesta, pero no los servidores proxy intermedios. Esto se hace por motivos de seguridad, ya que, si la respuesta se almacenara en caché públicamente, otro usuario podría solicitar el mismo recurso posteriormente y recuperar la cookie del primer usuario.

Si tu aplicación no define el encabezado de respuesta Cache-Control, el servidor puede definirlo como private y añadir un encabezado Vary: Accept-Encoding.

Para obtener más información sobre el almacenamiento en caché, incluida la lista de valores de Vary que admite el frontend de Google, consulta Almacenamiento en caché de respuestas.

Content-Encoding

En función de los encabezados de solicitud y de respuesta Content-Type, el servidor puede comprimir automáticamente el cuerpo de la respuesta, tal como se ha descrito anteriormente. En este caso, se añade un encabezado Content-Encoding: gzip para indicar que el cuerpo está comprimido. Consulta la sección sobre compresión de respuestas para obtener más información.

Content-Length o Transfer-Encoding

El servidor siempre ignora el encabezado Content-Length devuelto por la aplicación. Se asignará a Content-Length la longitud del cuerpo (después de la compresión, si se aplica) o se eliminará Content-Length y se usará la codificación de transferencia fragmentada (se añadirá un encabezado Transfer-Encoding: chunked). Si Content-Length se define de forma incorrecta para los tiempos de ejecución de segunda generación, App Engine devuelve una respuesta 500.

Date

Se establece la fecha y la hora actuales.

Server
se ha definido como Google Frontend. El servidor de desarrollo asigna el valor Development/x, donde x es el número de versión.

Si accedes a páginas dinámicas de tu sitio mientras tienes la sesión iniciada con una cuenta de administrador, App Engine incluye estadísticas por solicitud en los encabezados de respuesta:

X-Appengine-Resource-Usage
Los recursos que usa la solicitud, incluido el tiempo del lado del servidor en milisegundos.

Las respuestas con estadísticas de uso de recursos no se podrán almacenar en caché.

Encabezados de respuesta definidos en la configuración de la aplicación

Los encabezados de respuesta HTTP personalizados se pueden definir por URL para rutas dinámicas y estáticas en el archivo de configuración de tu aplicación. Para obtener más información, consulta las secciones http_headers de la documentación sobre la configuración.