Solicitudes salientes

En esta página se describe cómo las aplicaciones de App Engine emiten solicitudes HTTP y HTTPS y reciben respuestas. Para ver ejemplos de código que muestran cómo emitir solicitudes HTTP y HTTPS desde tu aplicación de App Engine, consulta Cómo emitir solicitudes HTTP(S).

Solicitudes

En el entorno de ejecución de Java 8 en App Engine, puedes usar la clase abstracta java.net.URLConnection y otras clases relacionadas de la biblioteca estándar de Java para establecer conexiones HTTP y HTTPS desde tu aplicación de Java.

También puedes usar la API de recuperación de URL de App Engine, que proporciona una implementación de los métodos definidos en URLConnection mediante la API de recuperación de URL. Para obtener más información acerca del uso de las clases nativas de Java comparadas con la API de recuperación de URL, consulta Ventajas de usar las llamadas estándar de Java en lugar de la recuperación de URL en Java 8. Ten en cuenta que el entorno de ejecución de Java 7 debe usar la API de recuperación de URL para las solicitudes.

Protocolos de solicitud

Una aplicación puede recuperar una URL con HTTP o HTTPS. El protocolo que se debe usar se infiere mirando el protocolo en la URL de destino.

La URL que se recuperará puede usar cualquier número de puerto incluido en los siguientes rangos:

  • 80-90
  • 440-450
  • 1024-65535.

Si el puerto no se menciona en la URL, lo determina el protocolo. Para las solicitudes HTTP se usa el puerto 80 y para las solicitudes HTTPS, el puerto 443.

Métodos de solicitud

Si emites solicitudes mediante la clase estándar de Java java.net.URLConnection, puedes usar cualquier método HTTP compatible.

Si emites solicitudes a través del servicio de recuperación de URL, puedes usar cualquiera de los siguientes métodos HTTP:

  • GET
  • POST
  • PUT
  • HEAD
  • DELETE
  • PATCH

La solicitud puede incluir encabezados HTTP y, en el caso de solicitudes POST, PUT y PATCH, una carga útil.

Proxies de solicitud

Ten en cuenta que el servicio de recuperación de URL usa un proxy compatible con HTTP/1.1 para recuperar el resultado.

A fin de evitar que una aplicación ocasione la recursión infinita de solicitudes, no se permite que un controlador de solicitudes recupere su propia URL. Sin embargo, es posible originar la recursión infinita de otras maneras, por lo que debes tener cuidado si tu aplicación puede usarse de modo tal que recupere solicitudes para URL que suministre el usuario.

Encabezados de solicitud

Tu aplicación puede configurar encabezados HTTP para la solicitud saliente.

Cuando se envía una solicitud HTTP POST, si no se configura explícitamente un encabezado Content-Type, se usa el encabezado x-www-form-urlencoded. Este es el tipo de contenido que usan los formularios web.

Por motivos de seguridad, la aplicación no puede modificar los siguientes encabezados:

  • Content-Length
  • Host
  • Vary
  • Via
  • X-Appengine-Inbound-Appid
  • X-Forwarded-For
  • X-ProxyUser-IP

App Engine configura estos encabezados con valores precisos según corresponda. Por ejemplo, App Engine calcula el encabezado Content-Length a partir de los datos de la solicitud y lo agrega a la solicitud antes del envío.

Los siguientes encabezados indican el ID de aplicación de la app solicitante:

  • User-Agent. Este encabezado se puede modificar, pero App Engine agregará una string de identificación para permitir que los servidores identifiquen las solicitudes de App Engine. La string agregada tiene el formato "AppEngine-Google; (+http://code.google.com/appengine; appid: APPID)", donde APPID es el identificador de tu app.
  • X-Appengine-Inbound-Appid. Este encabezado no se puede modificar y se agrega de manera automática si la solicitud se envía a través del servicio de recuperación de URL cuando el parámetro para seguir redireccionamientos está configurado como False.

Tiempos de espera de solicitud

Puedes configurar un plazo máximo, o tiempo de espera, para una solicitud. De manera predeterminada, el tiempo de espera de una solicitud es 5 segundos. El plazo máximo es 60 segundos para las solicitudes HTTP(S) y 60 segundos para las solicitudes de trabajos cron y de la lista de tareas en cola. Cuando usas la clase abstracta URLConnection con la recuperación de URL, el servicio usa como plazo la suma del tiempo de espera de conexión (setConnectTimeout()) y el tiempo de espera de lectura (setReadTimeout()).

Puedes enviar solicitudes síncronas y asíncronas. El siguiente comportamiento se aplica a la API de recuperación de URL:

  • Solicitudes síncronas: La llamada de recuperación espera hasta que el host remoto muestre un resultado y luego le devuelve el control a la aplicación. Si se excede el tiempo de espera máximo para la llamada de recuperación, esta genera una excepción.
  • Solicitudes asíncronas: El servicio de recuperación de URL inicia la solicitud y vuelve de inmediato a la aplicación con un objeto. La aplicación puede realizar otras tareas mientras se recupera la URL. Cuando la aplicación necesita los resultados, llama a un método para el objeto, que espera a que termine la solicitud si es necesario, y luego muestra el resultado. Si hay alguna solicitud de recuperación de URL pendiente cuando se cierra el controlador de solicitudes, el servidor de aplicaciones espera a que vuelvan todas las solicitudes restantes, o bien a que alcancen el plazo máximo, antes de mostrarle una respuesta al usuario.

Conexiones seguras y HTTPS

Tu aplicación puede recuperar una URL de forma segura con HTTPS para conectarse a servidores seguros. Los datos de las solicitudes y las respuestas se transmiten a través de la red en forma encriptada.

Si usas la API de recuperación de URL, ten en cuenta que el proxy de recuperación de URL no valida el host con el que se contacta. El servidor proxy no puede detectar ataques de interceptores entre App Engine y el host remoto cuando se usa HTTPS. Puedes usar la clase FetchOptions en la API URLFetchService para habilitar la validación de host.

Respuestas

Si usas la API de recuperación de URL, ten en cuenta que el servicio de recuperación de URL muestra todos los datos de la respuesta, lo que incluye la respuesta en sí, el código, los encabezados y el cuerpo.

De manera predeterminada, si el servicio de recuperación de URL recibe una respuesta con un código de redireccionamiento, el servicio lo seguirá. El servicio seguirá hasta cinco respuestas de redireccionamiento y luego mostrará el recurso final. Puedes indicarle al servicio de recuperación de URL que no siga los redireccionamientos y que en su lugar muestre una respuesta de redireccionamiento a la aplicación.

Cómo usar la recuperación de URL en el servidor de desarrollo

Cuando tu aplicación se ejecuta en el servidor de desarrollo de App Engine en tu computadora, las llamadas al servicio de recuperación de URL se manejan de manera local. A fin de recuperar las URL, el servidor de desarrollo se comunica con los hosts remotos directamente desde tu computadora usando la configuración de red que emplea tu computadora para acceder a Internet.

Cuando pruebes las funciones de la aplicación que recuperan URL, asegúrate de que tu computadora pueda acceder a los hosts remotos.

Cuotas y límites para la recuperación de URL

Para el entorno de ejecución de Java 8, puedes usar la API estándar de Java java.net.URLConnection, en lugar de URLFetch, ya que en la API no se aplican estas consideraciones relativas a cuotas y límites.

Para obtener más información acerca de las cuotas del servicio de recuperación de URL, visita Cuotas. Puedes consultar el uso actual de la cuota de tu aplicación en la pestaña de detalles de cuota de tu proyecto dentro de Google Cloud Platform Console.

Además, se aplican los siguientes límites al uso del servicio de recuperación de URL:

Límite Cantidad
Tamaño de solicitud 10 megabytes
Tamaño de encabezado de solicitud 16 KB (Ten en cuenta que esto limita la longitud máxima de la URL que se puede especificar en el encabezado)
Tamaño de respuesta 32 megabytes
Plazo máximo (controlador de solicitudes) 60 segundos
Plazo máximo (lista de tareas en cola y controlador de trabajos cron) 60 segundos

Próximos pasos

Ejecuta ejemplos de código y obtén orientación sobre cómo emitir solicitudes desde tu aplicación en Cómo emitir solicitudes HTTP(S).

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

Enviar comentarios sobre...

Entorno estándar de App Engine para Java