Nesta página, descrevemos como ocorre a emissão de solicitações HTTP e HTTPS e o recebimento de respostas nos aplicativos do App Engine. Para ver exemplos de código que demonstram como emitir solicitações HTTP e HTTPS pelo aplicativo App Engine, consulte Como emitir solicitações HTTP(S).
Solicitações
No ambiente de execução do Java 8 do App Engine, é possível usar a classe abstratajava.net.URLConnection
e as classes relacionadas da biblioteca padrão do Java para fazer
conexões HTTP e HTTPS do aplicativo Java.
Como alternativa, também é possível usar a API URL Fetch
do App Engine, que fornece uma implementação dos métodos definidos em
URLConnection
usando a API URL Fetch. Para informações sobre como usar as classes Java nativas
em comparação com a API URL Fetch, consulte
Vantagens em usar chamadas Java padrão e não a busca em URL no Java 8.
Protocolos de solicitação
Um aplicativo pode buscar um URL usando HTTP ou HTTPS. O protocolo que precisa ser usado é inferido observando-se o protocolo no URL de destino.
O URL buscado pode usar qualquer número de porta nestes intervalos:
80
-90
440
-450
1024
-65535
.
Se a porta não for mencionada no URL, ela estará implícita no protocolo. As solicitações HTTP ocorrem na porta 80
e as HTTPS ocorrem na porta 443
.
Métodos de solicitação
Se você emitir solicitações por meio da classe Javajava.net.URLConnection
padrão, poderá usar qualquer método HTTP compatível.
Se você emitir solicitações por meio do serviço de busca de URL, poderá usar qualquer um dos seguintes métodos HTTP:
GET
POST
PUT
HEAD
DELETE
PATCH
Uma solicitação pode incluir cabeçalhos HTTP e, para solicitações POST
, PUT
e PATCH
, um payload.
Proxy das solicitações
O serviço de busca de URL usa um proxy compatível com HTTP/1.1 para buscar o resultado.
Para evitar que um aplicativo cause uma recursão interminável de solicitações, não é permitido que um gerenciador de solicitações busque o próprio URL. Ainda é possível causar uma recursão interminável com outros meios, por isso tenha cuidado se o aplicativo puder ser usado para buscar solicitações de URLs fornecidas pelo usuário.
Cabeçalhos de solicitação
O aplicativo pode configurar cabeçalhos HTTP para a solicitação de saída.
Ao enviar uma solicitação HTTP POST
, se um cabeçalho Content-Type
não for definido explicitamente, ele será definido como x-www-form-urlencoded
.
Esse é o tipo de conteúdo usado pelos formulários da Web.
Por motivos de segurança, os cabeçalhos abaixo não podem ser modificados pelo aplicativo:
Content-Length
Host
Vary
Via
X-Appengine-Inbound-Appid
X-Forwarded-For
X-ProxyUser-IP
Esses cabeçalhos são definidos com valores precisos pelo App Engine, conforme
apropriado. Por exemplo, o Google App Engine calcula o
cabeçalho Content-Length
com base nos dados de solicitação e o adiciona à
solicitação antes do envio.
Os seguintes cabeçalhos indicam o ID do app solicitante:
User-Agent
. Este cabeçalho pode ser modificado, mas o App Engine anexará uma string de identificação para permitir que os servidores identifiquem as solicitações do App Engine. A string anexada tem o formato"AppEngine-Google; (+http://code.google.com/appengine; appid: APPID)"
, em queAPPID
é o identificador do app.X-Appengine-Inbound-Appid
. Esse cabeçalho não pode ser modificado e será adicionado automaticamente se a solicitação for enviada pelo serviço de busca de URL quando o parâmetro "follow redirects" for definido comoFalse
.
Tempo limite das solicitações
É possível definir um prazo ou tempo limite para uma solicitação. Por padrão, o
tempo limite de uma solicitação é 10 segundos.
O prazo máximo é de 60 segundos para solicitações HTTP(S),
para fila de tarefas e solicitações de cron job.
Ao usar a classe abstrata URLConnection
com a busca de URL, o prazo usado
pelo serviço é o tempo limite de conexão (setConnectTimeout()
) mais
o tempo limite de leitura (setReadTimeout()
).
É possível enviar solicitações síncronas e assíncronas. O seguinte comportamento se aplica à API URL Fetch:
- Solicitações síncronas: a chamada de busca aguarda até que o host remoto retorne um resultado e, em seguida, retorna o controle para o aplicativo. Se o tempo de espera máximo para a chamada de busca for excedido, a chamada gerará uma exceção.
- Solicitações assíncronas: o serviço de busca de URL inicia a solicitação e retorna imediatamente um objeto. O aplicativo pode realizar outras tarefas durante a busca do URL. Quando o aplicativo precisa dos resultados, ele chama um método no objeto, que aguarda até que a solicitação seja concluída, se necessário, e depois retorna o resultado. Se alguma solicitação de busca de URL estiver pendente quando o gerenciador de solicitações é encerrado, o servidor de aplicativos espera até que o restante das solicitações retorne ou atinja o prazo antes de retornar uma resposta para o usuário.
Conexões seguras e HTTPS
Seu aplicativo pode buscar um URL de maneira segura por meio do uso do HTTPS para se conectar a servidores seguros. Dados de solicitação e resposta são transmitidos pela rede em formato criptografado.
Se você usar a API URL Fetch, observe que o proxy de busca de URL não valida
o host que está contatando. O servidor proxy não pode detectar ataques "man-in-the-middle"
entre o App Engine e o host remoto quando usa HTTPS.
É possível usar a classe
FetchOptions
na API URLFetchService
para ativar a validação do host.
Respostas
Se você usar a API URL Fetch, o serviço de busca de URL retornará todos os dados de resposta, inclusive a resposta, o código, os cabeçalhos e o corpo.
Por padrão, se o serviço de busca de URL receber uma resposta com um código de redirecionamento, ele acompanhará esse redirecionamento. O serviço acompanhará até cinco respostas de redirecionamento e, em seguida, retornará o recurso final. É possível instruir o serviço de busca de URL para que não siga redirecionamentos e, em vez disso, retornar uma resposta de redirecionamento para o aplicativo.
Como usar a busca de URL no servidor de desenvolvimento
Quando o aplicativo está em execução no servidor de desenvolvimento do App Engine no computador, as chamadas para o serviço de busca de URL são processadas localmente. O servidor de desenvolvimento busca URLs por meio do contato com hosts remotos diretamente do seu computador usando a configuração de rede do computador para acessar a Internet.
Ao testar os recursos do seu aplicativo que buscam URLs, verifique se o computador pode acessar os hosts remotos.
Cotas e limites para busca de URL
Para o ambiente de execução do Java, use a API Javajava.net.URLConnection
padrão, em vez de URLFetch, em que essas considerações de cota e limite não vêm ao caso.
Para informações sobre cotas de serviço de busca de URL, consulte Cotas. Para ver o uso atual da cota do aplicativo, acesse a página "Detalhes da cota" no console do Google Cloud.
Acessar a página "Detalhes da cota"
Além disso, os seguintes limites aplicam-se ao uso do serviço de busca de URL:
Limite | Valor |
---|---|
Tamanho da solicitação | 10 megabytes |
Tamanho do cabeçalho da solicitação | 16 KB (observe que isso limita o comprimento máximo do URL que pode ser especificado no cabeçalho) |
Tamanho da resposta | 32 megabytes |
Prazo máximo (gerenciador de solicitação) | 60 segundos |
Prazo máximo (Fila de tarefas e gerenciador de cron job) | 60 segundos |
Próximas etapas
Execute exemplos de código e veja as instruções sobre como emitir solicitações pelo aplicativo em Como emitir solicitações HTTP(S).