Cómo se controlan las solicitudes

En este documento, se describe cómo tu aplicación de App Engine recibe solicitudes y envía respuestas. Para obtener más detalles, consulta la Referencia de encabezados de solicitud.

Si tu aplicación usa servicios, puedes dirigir solicitudes a un servicio específico o a una versión específica de ese servicio. Para obtener más información sobre cómo direccionar el servicio, consulta Cómo se enrutan las solicitudes.

Cómo controlar las solicitudes

La aplicación se encarga de iniciar un servidor web y controlar las solicitudes. Puedes usar cualquier marco de trabajo web que esté disponible para tu lenguaje de desarrollo.

App Engine ejecuta varias instancias de tu aplicación, y cada una tiene su propio servidor web para manejar solicitudes. Estas pueden enrutarse a cualquier instancia, por lo que las solicitudes consecutivas del mismo usuario no necesariamente se envían a la misma instancia. Una instancia puede manejar varias solicitudes al mismo tiempo. La cantidad de instancias se puede ajustar automáticamente a medida que cambia el tráfico. También puedes cambiar la cantidad de solicitudes simultáneas que puede controlar una instancia. Para esto, configura el elemento max_concurrent_requests en tu archivo app.yaml.

El entorno de ejecución de Go para App Engine utiliza el paquete http estándar como una interfaz entre tu programa de Go y los servidores de App Engine. Cuando App Engine recibe una solicitud web para tu aplicación, invoca al controlador http.Handler asociado a la URL de la solicitud.

En el siguiente ejemplo, se muestra una aplicación completa de Go que envía una string HTML hard-coded al usuario:


package hello

import (
	"fmt"
	"net/http"
)

func init() {
	http.HandleFunc("/", hello)
}

func hello(w http.ResponseWriter, r *http.Request) {
	fmt.Fprintf(w, "<h1>Hello, world</h1>")
}

Cuotas y límites

App Engine asigna recursos a tu aplicación de manera automática a medida que el tráfico aumenta. Sin embargo, esto se limita con las siguientes restricciones:

  • App Engine reserva la capacidad de ajuste de escala automático para aplicaciones con latencia baja a fin de que la aplicación responda a las solicitudes en menos de un segundo. Las aplicaciones con latencia muy alta, como las de más de un segundo por solicitud para varias solicitudes, y con capacidad de procesamiento alta requieren asistencia nivel Plata, Oro o Platino. Los clientes con este nivel de asistencia pueden comunicarse con su representante de asistencia para solicitar el aumento de sus límites de capacidad de procesamiento.

  • Las aplicaciones estrechamente vinculadas a la CPU también pueden incurrir en alguna latencia adicional para compartir recursos de manera eficaz con otras aplicaciones en el mismo servidor. Las solicitudes para archivos estáticos están exentas de estos límites de capacidad de latencia.

Cada solicitud que entra a la aplicación se tiene en cuenta para los límites de Solicitudes. Los datos enviados en respuesta a una solicitud se tienen en cuenta para el límite de Ancho de banda de salida (facturable).

Tanto las solicitudes HTTP como las HTTPS (seguras) se tienen en cuenta para los límites de Solicitudes, Ancho de banda de entrada (facturable) y Ancho de banda de salida (facturable). La página de detalles de las cuotas de GCP Console también informa las solicitudes seguras, el ancho de banda de contenido nuevo seguro y el ancho de banda saliente seguro como valores individuales para fines informativos. Solo se tienen en cuenta las solicitudes HTTPS para estos valores. Para obtener más información, consulta la página de Cuotas.

Los límites que se indican a continuación se aplican al uso de los controladores de solicitudes en particular.

Límites de las solicitudes

  • Se permite un máximo de ~15 KB en encabezados de solicitud.
  • El tamaño total de la solicitud se limita a ~32 MB.
  • Todas las solicitudes HTTP/2 se convertirán en solicitudes HTTP/1.1 cuando se reenvíen al servidor de la aplicación.
  • Las conexiones SSL finalizan en el balanceador de cargas. El tráfico del balanceador de cargas se envía a la instancia por un canal encriptado y, luego, se reenvía al servidor de la aplicación mediante HTTP. El encabezado X-Forwarded-Proto te permite saber si la solicitud de origen fue HTTP o HTTPS.

Límites de las respuestas

  • Las respuestas se almacenan en búfer en bloques de 64,000.
  • El tamaño de la respuesta es ilimitado.
  • El límite de tiempo de la respuesta es de una hora.

Solicitudes HTTP no compatibles

Las siguientes funciones no son compatibles con el entorno flexible de App Engine.

  • Tráfico HTTP/2 para el servicio de backend
  • Solicitudes HTTP que acceden a instancias de manera directa

Encabezados de solicitud

Una solicitud HTTP nueva incluye los encabezados HTTP que envía el cliente. Por motivos de seguridad, los proxies intermedios limpian o modifican algunos encabezados antes de que lleguen a la aplicación.

Para obtener más información, consulta la referencia de Encabezados de solicitud.

Respuestas a solicitudes

App Engine llama al controlador con un valor Request y un ResponseWriter y, luego, espera a que el controlador le escriba a ResponseWriter y devuelva una respuesta. Cuando el controlador devuelve una respuesta, los datos en el búfer interno del ResponseWriter se envían al usuario.

Este procedimiento es prácticamente igual a cuando escribes programas normales de Go que usan el paquete http.

Se aplican límites a la respuesta que generas y la respuesta se puede modificar antes de que regrese al cliente.

Cómo inhabilitar el almacenamiento en búfer

Según la configuración predeterminada, todas las respuestas de App Engine se almacenan en búfer en bloques de 64,000. En algunos casos, puede ser apropiado inhabilitar el almacenamiento en búfer y transmitir bytes de manera directa al cliente. Esto es lo que se recomienda si se usan GET pendientes o eventos enviados por el servidor (SSE). Para inhabilitar el almacenamiento en búfer, puedes configurar el encabezado de respuesta X-Accel-Buffering como no.

X-Accel-Buffering: no

Realiza conexiones HTTPS forzadas

Por motivos de seguridad, todas las aplicaciones deben incentivar al cliente a conectarse mediante https. Puedes usar el encabezado con Seguridad de Transporte Estricta para indicarle al navegador la preferencia de https sobre http en cierta página o todo un dominio, por ejemplo:

Strict-Transport-Security: max-age=31536000; includeSubDomains

¿Te ha resultado útil esta página? Enviar comentarios:

Enviar comentarios sobre...

Entorno flexible de App Engine para Go