Obtención de URL para servicios agrupados antiguos

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

Solicitudes

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

También puedes usar la API URL Fetch de App Engine, que proporciona una implementación de los métodos definidos en URLConnection mediante la API URL Fetch. Para obtener información sobre el uso de las clases nativas de Java en comparación con la API de obtención de URLs, consulta Ventajas de usar llamadas estándar de Java en lugar de la API de obtención de URLs en Java 8.

Protocolos de solicitud

Una aplicación puede obtener una URL mediante HTTP o HTTPS. El protocolo que se debe usar se deduce a partir del protocolo de la URL de destino.

La URL que se va a obtener puede usar cualquier número de puerto de los siguientes intervalos:

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

Si no se menciona el puerto en la URL, el protocolo lo implica. Las solicitudes HTTP se producen en el puerto 80 y las solicitudes HTTPS, en el puerto 443.

Métodos de solicitud

Si envías solicitudes a través de la clase estándar de Java java.net.URLConnection, puedes usar cualquier método HTTP admitido.

Si envías solicitudes a través del servicio de obtención de URLs, puedes usar cualquiera de los siguientes métodos HTTP:

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

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

Solicitar proxy

Ten en cuenta que el servicio de obtención de URLs usa un proxy compatible con HTTP/1.1 para obtener el resultado.

Para evitar que una aplicación provoque una recursión infinita de solicitudes, un controlador de solicitudes no puede obtener su propia URL. Sin embargo, sigue siendo posible provocar una recursión infinita por otros medios, por lo que debes tener cuidado si tu aplicación puede hacer que se obtengan solicitudes de URLs proporcionadas por el usuario.

Encabezados de solicitud

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

Al enviar una solicitud HTTP POST, si no se define explícitamente un encabezado Content-Type, se le asigna el valor x-www-form-urlencoded. Será el tipo de contenido utilizado por 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 asigna valores precisos a estos encabezados según corresponda. Por ejemplo, App Engine calcula el encabezado Content-Length a partir de los datos de la solicitud y lo añade a la solicitud antes de enviarla.

Los siguientes encabezados indican el ID de aplicación de la aplicación que realiza la solicitud:

  • User-Agent. Este encabezado se puede modificar, pero App Engine añadirá una cadena de identificador para que los servidores puedan identificar las solicitudes de App Engine. La cadena añadida tiene el formato "AppEngine-Google; (+http://code.google.com/appengine; appid: APPID)", donde APPID es el identificador de tu aplicación.
  • X-Appengine-Inbound-Appid. Este encabezado no se puede modificar y se añade automáticamente si la solicitud se envía a través del servicio URL Fetch cuando el parámetro de redirecciones de seguimiento se define como False.

Tiempo de espera de la solicitud agotado

Puedes definir una fecha límite o un tiempo de espera para una solicitud. De forma predeterminada, el tiempo de espera de una solicitud es de 10 segundos. El plazo máximo es de 60 segundos para las solicitudes HTTP(S) y de 60 segundos para las solicitudes de colas de tareas y de tareas cron. Cuando se usa la clase abstracta URLConnection con URL Fetch, el servicio usa el tiempo de espera de conexión (setConnectTimeout()) más el tiempo de espera de lectura (setReadTimeout()) como plazo.

Puedes enviar solicitudes síncronas y asíncronas. La API URL Fetch se comporta de la siguiente manera:

  • Solicitudes síncronas: la llamada de obtención espera hasta que el host remoto devuelve un resultado y, a continuación, devuelve el control a la aplicación. Si se supera el tiempo de espera máximo de la llamada de obtención, se genera una excepción.
  • Solicitudes asíncronas: el servicio de obtención de URLs inicia la solicitud y, a continuación, devuelve inmediatamente un objeto. La aplicación puede realizar otras tareas mientras se obtiene la URL. Cuando la aplicación necesita los resultados, llama a un método del objeto, que espera a que finalice la solicitud si es necesario y, a continuación, devuelve el resultado. Si hay solicitudes de obtención de URLs pendientes cuando se cierra el controlador de solicitudes, el servidor de aplicaciones espera a que todas las solicitudes restantes devuelvan un valor o alcancen su plazo antes de devolver una respuesta al usuario.

Conexiones seguras y HTTPS

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

De forma predeterminada, el proxy de URL Fetch valida el host con el que se pone en contacto. Este comportamiento permite que la API detecte ataques de intermediario entre App Engine y el host remoto cuando se usa HTTPS.

Respuestas

Si usas la API URL Fetch, ten en cuenta que el servicio URL Fetch devuelve todos los datos de respuesta, incluidos la respuesta, el código, los encabezados y el cuerpo.

De forma predeterminada, si el servicio de obtención de URLs recibe una respuesta con un código de redirección, el servicio seguirá la redirección. El servicio seguirá hasta cinco respuestas de redirección y, a continuación, devolverá el recurso final. Puedes indicar al servicio de obtención de URLs que no siga las redirecciones y que, en su lugar, devuelva una respuesta de redirección a la aplicación.

Usar URL Fetch en el servidor de desarrollo

Cuando tu aplicación se ejecuta en el servidor de desarrollo de App Engine en tu ordenador, las llamadas al servicio de obtención de URLs se gestionan de forma local. El servidor de desarrollo obtiene las URLs poniéndose en contacto directamente con los hosts remotos desde tu ordenador, usando la configuración de red que tu ordenador utilice para acceder a Internet.

Cuando pruebes las funciones de tu aplicación que obtienen URLs, asegúrate de que tu ordenador pueda acceder a los hosts remotos.

Cuotas y límites de Obtención de URLs

En el caso del tiempo de ejecución de Java, puedes usar la API estándar de Java java.net.URLConnection en lugar de URLFetch, donde no se aplican estas consideraciones sobre cuotas y límites.

Para obtener información sobre las cuotas del servicio de obtención de URLs, consulta Cuotas. Para ver el uso actual de la cuota de tu aplicación, ve a la página Detalles de cuota de laGoogle Cloud consola.

Ir a la página Detalles de la cuota

Además, se aplican los siguientes límites al uso del servicio URL Fetch:

Límite Importe
Tamaño de la solicitud 10 megabytes
Tamaño del 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 la respuesta 32 megabytes
Fecha límite máxima (controlador de solicitudes) 60 segundos
Fecha límite máxima (gestor de colas de tareas y de tareas cron) 60 segundos

Siguientes pasos

Ejecuta códigos de ejemplo y consulta cómo enviar solicitudes desde tu aplicación en Enviar solicitudes HTTP(S).