Recupero URL per i servizi in bundle legacy

Questa pagina descrive come le applicazioni App Engine inviano richieste HTTP e HTTPS e ricevono risposte. Per visualizzare esempi di codice che mostrano come inviare richieste HTTP e HTTPS dalla tua applicazione App Engine, consulta Invio di richieste HTTP(S).

Richieste

Nel runtime Java 8 di App Engine, puoi utilizzare la classe astratta java.net.URLConnection e le classi correlate della libreria standard Java per effettuare connessioni HTTP e HTTPS dalla tua applicazione Java.

In alternativa, puoi utilizzare anche l'API URL Fetch di App Engine, che fornisce un'implementazione dei metodi definiti inURLConnection utilizzando l'API URL Fetch. Per informazioni sull'utilizzo delle classi Java native rispetto all'API URL Fetch, consulta Vantaggi dell'utilizzo di chiamate Java standard e non URL Fetch in Java 8.

Protocolli di richiesta

Un'applicazione può recuperare un URL utilizzando HTTP o HTTPS. Il protocollo da utilizzare viene dedotto dal protocollo nell'URL di destinazione.

L'URL da recuperare può utilizzare qualsiasi numero di porta nei seguenti intervalli:

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

Se la porta non è indicata nell'URL, è implicita nel protocollo. Le richieste HTTP vengono eseguite sulla porta 80 e le richieste HTTPS sulla porta 443.

Metodi di richiesta

Se invii richieste tramite la classe java.net.URLConnection Java standard, puoi utilizzare qualsiasi metodo HTTP supportato.

Se invii richieste tramite il servizio di recupero URL, puoi utilizzare uno dei seguenti metodi HTTP:

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

Una richiesta può includere intestazioni HTTP e, per le richieste POST, PUT e PATCH, un payload.

Proxy delle richieste

Tieni presente che il servizio di recupero dell'URL utilizza un proxy conforme a HTTP/1.1 per recuperare il risultato.

Per impedire a un'applicazione di causare una ricorsione infinita di richieste, un gestore delle richieste non è autorizzato a recuperare il proprio URL. È comunque possibile causare una ricorsione infinita con altri mezzi, quindi fai attenzione se la tua applicazione può essere impostata per recuperare richieste per URL forniti dall'utente.

Intestazioni delle richieste

L'applicazione può impostare le intestazioni HTTP per la richiesta in uscita.

Quando invii una richiesta POST HTTP, se un'intestazione Content-Type non viene impostata esplicitamente, viene impostata su x-www-form-urlencoded. Si tratta del tipo di contenuti utilizzato dai moduli web.

Per motivi di sicurezza, le seguenti intestazioni non possono essere modificate dall'applicazione:

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

App Engine imposta questi valori su valori accurati, se opportuno. Ad esempio, App Engine calcola l'Content-Length intestazione dai dati della richiesta e la aggiunge alla richiesta prima dell'invio.

Le seguenti intestazioni indicano l'ID applicazione dell'app richiedente:

  • User-Agent. Questa intestazione può essere modificata, ma App Engine aggiungerà una stringa di identificatore per consentire ai server di identificare le richieste di App Engine. La stringa aggiunta ha il formato "AppEngine-Google; (+http://code.google.com/appengine; appid: APPID)", dove APPID è l'identificatore della tua app.
  • X-Appengine-Inbound-Appid. Questa intestazione non può essere modificata e viene aggiunta automaticamente se la richiesta viene inviata tramite il servizio di recupero dell'URL quando il parametro di reindirizzamento seguito è impostato su False.

Timeout delle richieste

Puoi impostare una scadenza o un timeout per una richiesta. Per impostazione predefinita, il timeout per una richiesta è di 10 secondi. La scadenza massima è di 60 secondi per le richieste HTTP(S) e di 60 secondi per le richieste di coda di attività e di job cron. Quando utilizzi la classe astratta URLConnection con URL Fetch, il servizio utilizza il tempo di attesa della connessione (setConnectTimeout()) più il tempo di attesa della lettura (setReadTimeout()) come scadenza.

Puoi inviare richieste sincrone e asincrone. Il seguente comportamento si applica all'API URL Fetch:

  • Richieste sincrone: la chiamata fetch attende che l'host remoto restituisca un risultato e poi restituisce il controllo all'applicazione. Se il tempo di attesa massimo per la chiamata di recupero viene superato, la chiamata genera un'eccezione.
  • Richieste asincrone: il servizio di recupero dell'URL avvia la richiesta, poi restituisce immediatamente un oggetto. L'applicazione può eseguire altre attività durante il recupero dell'URL. Quando l'applicazione necessita dei risultati, chiama un metodo sull'oggetto, che attende il completamento della richiesta, se necessario, quindi restituisce il risultato. Se al termine del gestore delle richieste sono presenti richieste di recupero dell'URL in attesa, il server delle applicazioni attende che tutte le richieste rimanenti vengano restituite o raggiungano la scadenza prima di restituire una risposta all'utente.

Connessioni sicure e HTTPS

L'applicazione può recuperare un URL in modo sicuro utilizzando HTTPS per connettersi a server sicuri. I dati delle richieste e delle risposte vengono trasmessi sulla rete in forma criptata.

Se utilizzi l'API URL Fetch, tieni presente che il proxy URL Fetch non convalida l'host che sta contattando. Il server proxy non può rilevare gli attacchi man in the middle tra App Engine e l'host remoto quando si utilizza HTTPS. Puoi utilizzare la classe FetchOptions nell'API URLFetchService per attivare la convalida dell'host.

Risposte

Se utilizzi l'API URL Fetch, tieni presente che il servizio URL Fetch restituisce tutti i dati di risposta, inclusi la risposta, il codice, le intestazioni e il corpo.

Per impostazione predefinita, se il servizio di recupero URL riceve una risposta con un codice di reindirizzamento, il servizio seguirà il reindirizzamento. Il servizio seguirà fino a cinque risposte di reindirizzamento, quindi restituirà la risorsa finale. Puoi istruire il servizio di recupero dell'URL a non seguire i reindirizzamenti e restituire invece una risposta di reindirizzamento all'applicazione.

Utilizzo di URL Fetch sul server di sviluppo

Quando l'applicazione è in esecuzione sul server di sviluppo App Engine sul tuo computer, le chiamate al servizio URL Fetch vengono gestite localmente. Il server di sviluppo recupera gli URL contattando gli host remoti direttamente dal computer, utilizzando la configurazione di rete utilizzata dal computer per accedere a internet.

Quando testi le funzionalità della tua applicazione che recuperano gli URL, assicurati che il tuo computer possa accedere agli host remoti.

Quote e limiti per il recupero dell'URL

Per il runtime Java, puoi utilizzare l'API Java java.net.URLConnection standard, anziché URLFetch, a cui non si applicano queste considerazioni relative a quote e limiti.

Per informazioni sulle quote del servizio di recupero dell'URL, consulta Quote. Per visualizzare l'utilizzo attuale della quota della tua applicazione, vai alla pagina dei dettagli delle quote in Google Cloud Console.

Vai alla pagina Dettagli quota

Inoltre, all'utilizzo del servizio di recupero dell'URL si applicano i seguenti limiti:

Limite Importo
Dimensioni richiesta 10 megabyte
Dimensioni dell'intestazione della richiesta 16 KB (tieni presente che questo limita la lunghezza massima dell'URL che può essere specificato nell'intestazione)
Dimensioni risposta 32 megabyte
Scadenza massima (gestori delle richieste) 60 secondi
Scadenza massima (Task Queue e gestore dei cron job) 60 secondi

Passaggi successivi

Esegui esempi di codice e ricevi indicazioni su come inviare richieste dalla tua applicazione in Invio di richieste HTTP(S).