Solicitações de saída

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 amostras de código que demonstram como emitir solicitações HTTP e HTTPS do aplicativo App Engine, consulte Como emitir solicitações HTTP(S).

Solicitações

No ambiente de execução do App Engine em Java 8, use a classe abstrata java.net.URLConnection e classes relacionadas da biblioteca padrão do Java para fazer conexões HTTP e HTTPS do aplicativo Java.

Como alternativa, é possível usar a API URL Fetch do App Engine para implementação dos métodos definidos em URLConnection pela API. Para informações sobre o uso das classes Java nativas em comparação com a API URL Fetch, consulte Vantagens em usar chamadas Java padrão e não URL Fetch no Java 8. Observe que é preciso usar a API URL Fetch para fazer solicitações no ambiente de execução do Java 7.

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 Java padrão java.net.URLConnection, use 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 das solicitações

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 App Engine calcula o cabeçalho Content-Length pelos dados da solicitação e o adiciona a ela antes do envio.

Os seguintes cabeçalhos indicam o ID do aplicativo 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 que APPID é o identificador do seu app.
  • X-Appengine-Inbound-Appid. Este cabeçalho não pode ser modificado. Ele será adicionado automaticamente se a solicitação tiver sido enviada por meio do serviço de busca de URL quando o seguinte parâmetro de redirecionamento estiver configurado como False.

Tempo limite das solicitações

Você pode definir um prazo ou um tempo limite para uma solicitação. Por padrão, o tempo limite é de cinco segundos. O prazo máximo é de 60 segundos para solicitações HTTP(S), para fila de tarefas e solicitações de cron job. Quando a classe abstrata URLConnection é usada com URL Fetch, o valor do tempo limite da conexão (setConnectTimeout()) somado ao tempo limite da leitura (setReadTimeout()) é usado pelo serviço como prazo.

É 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 URL Fetch não valida o host que está acessando. O servidor proxy não consegue detectar ataques intermediários entre o App Engine e o host remoto ao usar o 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 Java 8, é possível usar a API Java padrão java.net.URLConnection, a que essas considerações de limite e cota não se aplicam, em vez da URLFetch.

Para informações sobre cotas de serviço de busca de URL, consulte Cotas. É possível visualizar o uso atual da cota do seu aplicativo visitando a guia de detalhes da cota do Console do Google Cloud Platform para o projeto.

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 amostras de código e veja as orientações sobre como emitir solicitações a partir do aplicativo em Como emitir solicitações HTTP(S).

Esta página foi útil? Conte sua opinião sobre:

Enviar comentários sobre…

Ambiente padrão do App Engine para Java 8