Geração de respostas de HTTP ems acionadores da solicitação - Amazon CloudFront

Geração de respostas de HTTP ems acionadores da solicitação

Quando o CloudFront recebe uma solicitação, você pode usar uma função do Lambda para gerar uma resposta HTTP que o CloudFront retornará diretamente ao visualizador sem encaminhar a resposta para a origem. Gerar respostas HTTP reduz a carga na origem e geralmente também reduz a latência para o visualizador.

Alguns cenários comuns para gerar respostas HTTP incluem o seguinte:

  • Retornar uma pequena página da web ao visualizador

  • Retornar um código de status HTTP 301 ou 302 para redirecionar o usuário para outra página da web

  • Retornar um código de status HTTP 401 para o visualizador quando o usuário ainda não tiver sido autenticado

Uma função do Lambda@Edge pode gerar uma resposta HTTP quando ocorrerem os seguintes eventos do CloudFront:

Eventos de solicitação de visualizador

Quando uma função for acionada por um evento de solicitação do visualizador, o CloudFront retornará a resposta ao visualizador e não a armazenará em cache.

Eventos de solicitação de origem

Quando a função for acionada por um evento de solicitação de origem, o CloudFront verificará se há uma resposta gerada anteriormente pela função no cache de borda.

  • Se a resposta estiver no cache, a função não será executada e o CloudFront retornará a resposta em cache ao visualizador.

  • Se a resposta não estiver no cache, a função será executada, o CloudFront retornará a resposta ao visualizador e também a armazenará em cache.

Para ver códigos de exemplo para gerar respostas HTTP, consulte Funções de exemplo do Lambda@Edge. Você também pode substituir as respostas HTTP em triggers de resposta. Para obter mais informações, consulte Atualização de respostas de HTTP em acionadores de resposta da origem.

Modelo de programação

Esta seção descreve o modelo de programação para usar o Lambda@Edge para gerar respostas HTTP.

Objeto da resposta

A resposta que você retornar como o parâmetro result do método callback deverá ter a seguinte estrutura (observe que apenas o campo status é necessário).

const response = { body: 'content', bodyEncoding: 'text' | 'base64', headers: { 'header name in lowercase': [{ key: 'header name in standard case', value: 'header value' }], ... }, status: 'HTTP status code', statusDescription: 'status description' };

O objeto de resposta pode incluir os seguintes valores:

body

O corpo, se houver, que você deseja que o CloudFront retorne na resposta gerada.

bodyEncoding

A codificação para o valor que você especificou no body. As únicas codificações válidas são text e base64. Se você incluir body no objeto response, mas omitir bodyEncoding, o CloudFront tratará o corpo como texto.

Se você especificar bodyEncoding como base64, mas o corpo não for um base64 válido, o CloudFront retornará um erro.

headers

Cabeçalhos que você deseja que o CloudFront retorne na resposta gerada. Observe o seguinte:

  • As chaves no objeto headers são versões em letras minúsculas de nomes de cabeçalho HTTP padrão. Usar chaves em letras minúsculas dá acesso sem diferenciar letras maiúsculas e minúsculas dos valores de cabeçalho.

  • Cada cabeçalho (por exemplo, headers["accept"] ou headers["host"]) é uma matriz de pares de chave-valor. Para determinado cabeçalho, a matriz contém um par de chave-valor para cada valor na resposta gerada.

  • key (opcional) é o nome com distinção entre letras maiúsculas e minúsculas do cabeçalho da forma como ele aparece em uma solicitação HTTP, por exemplo, accept ou host.

  • Especifique value como valor do cabeçalho.

  • Se você não incluir a parte da chave do par de chave-valor do cabeçalho, o Lambda@Edge inserirá automaticamente uma chave de cabeçalho usando o nome de cabeçalho fornecido. Independentemente de como você tiver formatado o nome do cabeçalho, a chave de cabeçalho inserida será automaticamente formatada com capitalização inicial para cada parte, separada por hifens (-).

    Por exemplo, você pode adicionar um cabeçalho como o seguinte, sem uma chave de cabeçalho: 'content-type': [{ value: 'text/html;charset=UTF-8' }]

    Neste exemplo, o Lambda@Edge cria a seguinte chave de cabeçalho: Content-Type.

Para obter informações sobre as restrições de uso do cabeçalho, consulte Restrições das funções de borda.

status

O código de status HTTP que você deseja que o CloudFront use para:

  • Retornar na resposta

  • Armazenar no cache de borda do CloudFront, quando a resposta tiver sido gerada por uma função acionada por um evento de solicitação de origem

  • Fazer login no CloudFront Configurar e usar logs padrão (logs de acesso)

Se o valor de status não estiver entre 200 e 599, o CloudFront retornará um erro ao visualizador.

statusDescription

A descrição que você deseja que o CloudFront retorne na resposta para acompanhar o código de status HTTP. Você não precisa usar descrições padrão, como OK, para um código de status HTTP de 200.

Errors

Veja a seguir os erros possíveis das respostas HTTP geradas.

A resposta contém um corpo e especifica 204 (sem conteúdo) como status

Quando uma função for acionada por uma solicitação de visualizador, o CloudFront retornará um código de status HTTP 502 (gateway inválido) ao visualizador quando ocorrer o seguinte:

  • O valor de status for 204 (sem conteúdo)

  • A resposta incluir um valor para body

Isso ocorre porque o Lambda@Edge impõe a restrição opcional encontrada na RFC 2616: uma resposta HTTP 204 não precisa conter um corpo de mensagem.

Restrições ao tamanho da resposta gerada

O tamanho máximo de uma resposta gerada por uma função do Lambda depende do evento que acionou a função:

  • Eventos de solicitação de visualizador: 40 KB

  • Eventos de solicitação de origem: 1 MB

Se a resposta for maior que o tamanho permitido, o CloudFront retornará um código de status HTTP 502 (gateway inválido) ao visualizador.

Campos obrigatórios

O campo status é obrigatório.

Todos os demais campos são opcionais.