Comportamento de solicitações e respostas para origens do Amazon S3 - Amazon CloudFront

Comportamento de solicitações e respostas para origens do Amazon S3

Para entender como o CloudFront processa solicitações e respostas ao usar o Amazon S3 como origem, consulte as seguintes seções:

Como o CloudFront processa e encaminha solicitações à sua origem do Amazon S3

Saiba como o CloudFront processa solicitações do visualizador e as encaminha para a origem do Amazon S3.

Duração do armazenamento em cache e TTL mínimo

Para controlar por quanto tempo os objetos permanecem em um cache do CloudFront antes que o CloudFront encaminhe outra solicitação para a sua origem, você pode:

  • Configurar sua origem para adicionar um campo de cabeçalho Cache-Control ou Expires a cada objeto.

  • Especificar um valor de TTL mínimo nos comportamentos de cache do CloudFront.

  • Usar o valor padrão de 24 horas.

Para obter mais informações, consulte Gerenciar o tempo de permanência do conteúdo no cache (expiração).

Endereços IP do cliente

Se um visualizador enviar uma solicitação ao CloudFront e não incluir um cabeçalho de solicitação X-Forwarded-For, o CloudFront receberá o endereço IP do visualizador na conexão TCP, adicionará um cabeçalho X-Forwarded-For que inclui o endereço IP e encaminhará a solicitação à origem. Por exemplo, se o CloudFront obter o endereço IP 192.0.2.2 da conexão TCP, ele encaminhará o seguinte cabeçalho à origem:

X-Forwarded-For: 192.0.2.2

Se um visualizador enviar uma solicitação ao CloudFront e incluir um cabeçalho de solicitação X-Forwarded-For, o CloudFront obterá o endereço IP do visualizador na conexão TCP, incluirá ele no fim do cabeçalho X-Forwarded-For e encaminhará a solicitação à origem. Por exemplo, se a solicitação do visualizador incluir X-Forwarded-For: 192.0.2.4,192.0.2.3 e o CloudFront obtiver o endereço IP 192.0.2.2 da conexão TCP, ele encaminhará o seguinte cabeçalho à origem:

X-Forwarded-For: 192.0.2.4,192.0.2.3,192.0.2.2

nota

O cabeçalho X-Forwarded-For contém endereços IPv4 (como 192.0.2.44) e IPv6 (como 2001:0db8:85a3::8a2e:0370:7334).

Solicitações GET condicionais

Ao receber uma solicitação de um objeto que expirou de um cache de borda, o CloudFront encaminha a solicitação à origem do Amazon S3 a fim de receber a versão mais recente do objeto ou a confirmação do Amazon S3 de que o cache de borda do CloudFront já tem a versão mais recente. Ao enviar originalmente o objeto ao CloudFront, o Amazon S3 incluiu os valores ETag e LastModified na resposta. Na nova solicitação encaminhada pelo CloudFront ao Amazon S3, o CloudFront adiciona um destes cabeçalhos:

  • Um cabeçalho If-Match ou If-None-Match com o valor ETag da versão expirada do objeto.

  • Um cabeçalho If-Modified-Since com o valor LastModified da versão expirada do objeto.

O Amazon S3 usa essas informações para determinar se o objeto foi atualizado e, portanto, se deve retornar todo o objeto ao CloudFront ou apenas a um código de status HTTP 304 (não modificado).

Cookies

O Amazon S3 não processa cookies. Se você configurar um comportamento de cache para encaminhar cookies a uma origem do Amazon S3, o CloudFront encaminhará os cookies, mas o Amazon S3 os ignorará. Todas as solicitações futuras do mesmo objeto, independentemente se você variar o cookie ou não, serão fornecidas do objeto existente no cache.

Compartilhamento de recursos de origem cruzada (CORS)

Se quiser que o CloudFront respeite as configurações de compartilhamento de recursos entre origens do Amazon S3, configure o CloudFront para encaminhar os cabeçalhos selecionados ao Amazon S3. Para obter mais informações, consulte Conteúdo em cache com base nos cabeçalhos de solicitação.

Solicitações GET que incluem um corpo

Se a solicitação GET do visualizador incluir um corpo, o CloudFront retornará o código de status HTTP 403 (Proibido).

Métodos HTTP

Se você configurar o CloudFront para processar todos os métodos HTTP compatíveis, ele aceitará as seguintes solicitações de visualizadores e as encaminhará à origem do Amazon S3:

  • DELETE

  • GET

  • HEAD

  • OPTIONS

  • PATCH

  • POST

  • PUT

O CloudFront sempre armazena respostas às solicitações GET e HEAD em cache. Também é possível configurar o CloudFront para armazenar respostas a solicitações OPTIONS em cache. O CloudFront não armazena em cache respostas a solicitações que usem outros métodos.

Se você quiser usar carregamentos fragmentados para adicionar objetos a um bucket do Amazon S3, será necessário adicionar um controle de acesso à origem (OAC) do CloudFront à distribuição e conceder ao OAC as permissões necessárias. Para obter mais informações, consulte Restringir o acesso a uma origem do Amazon Simple Storage Service.

Importante

Se você configurar o CloudFront para aceitar e encaminhar ao Amazon S3 todos os métodos HTTP compatíveis com o CloudFront, será necessário criar um AOC do CloudFront para restringir o acesso ao conteúdo do Amazon S3 e conceder ao OAC as permissões necessárias. Por exemplo, se você configurar o CloudFront para aceitar e encaminhar esses métodos porque deseja usar o método PUT, será necessário configurar as políticas do bucket do Amazon S3 para lidar com solicitações DELETE de forma apropriada para que os visualizadores não possam excluir recursos que você não deseja que eles excluam. Para obter mais informações, consulte Restringir o acesso a uma origem do Amazon Simple Storage Service.

Para obter informações sobre as operações compatíveis com o Amazon S3, consulte a Documentação do Amazon S3.

Cabeçalhos de solicitação HTTP removidos ou atualizados pelo CloudFront

O CloudFront remove ou atualiza alguns cabeçalhos antes de encaminhar solicitações à origem do Amazon S3. Para a maioria dos cabeçalhos, esse comportamento é o mesmo que para origens personalizadas. Para obter uma lista completa dos cabeçalhos de solicitação HTTP e a maneira como o CloudFront os processa, consulte Cabeçalhos de solicitação HTTP e comportamento do CloudFront (origens do Amazon S3 e personalizadas).

Tamanho máximo de uma solicitação e de um URL

O tamanho máximo de uma solicitação, com o caminho, a query string (se houver) e os cabeçalhos, é de 20.480 bytes.

O CloudFront cria um URL com base na solicitação. O tamanho máximo do URL é de 8.192 bytes.

Se uma solicitação ou um URL ultrapassar o tamanho máximo, o CloudFront exibirá o código de status HTTP 413 (Entidade de solicitação muito grande) ao visualizador e, depois, encerrará a conexão TCP com ele.

Associação OCSP

Quando um visualizador envia uma solicitação HTTPS para um objeto, tanto ele quanto o CloudFront devem confirmar com a autoridade de certificação (CA) se o certificado SSL do domínio não foi revogado. O OCSP Stapling acelera a validação do certificado permitindo que o CloudFront valide o certificado e armazene as respostas da CA em cache, a fim de que o cliente não precise validar o certificado diretamente com a CA.

A melhoria da performance do OCSP Stapling é mais acentuada quando o CloudFront recebe um grande número de solicitações HTTPS para objetos no mesmo domínio. Cada servidor em um ponto de presença do CloudFront deve enviar uma solicitação de validação separada. Quando o CloudFront recebe um grande número de solicitações HTTPS para o mesmo domínio, cada servidor no local da borda logo recebe uma resposta da CA que pode "grampear" em um pacote no handshake SSL. Quando o visualizador está convencido de que o certificado é válido, o CloudFront pode servir o objeto solicitado. Caso sua distribuição não tenha muito tráfego em um ponto de presença do CloudFront, é provável que novas solicitações sejam direcionadas para um servidor que ainda não validou o certificado com a CA. Nesse caso, o visualizador executa separadamente a etapa de validação, e o servidor do CloudFront fornece o objeto. Esse servidor do CloudFront também envia uma solicitação de validação para a CA para que, na próxima vez que receber uma solicitação com o mesmo nome de domínio, tenha uma resposta de validação da CA.

Protocolos

O CloudFront encaminha solicitações HTTP ou HTTPS ao servidor de origem com base no protocolo da solicitação do visualizador: HTTP ou HTTPS.

Importante

Se o bucket do Amazon S3 estiver configurado como um endpoint de site, não será possível configurar o CloudFront para usar HTTPS para comunicação com a origem, pois o Amazon S3 não é compatível com conexões HTTPS nessa configuração.

Strings de consulta

É possível configurar se o CloudFront encaminha parâmetros de string de consulta para a sua origem no Amazon S3. Para obter mais informações, consulte Conteúdo em cache com base em parâmetros de string de consulta.

Tentativas e tempo limite de conexão da origem

Tempo limite de conexão da origem é o número de segundos que o CloudFront aguarda ao tentar estabelecer uma conexão com a origem.

Tentativas de conexão da origem é o número de vezes que o CloudFront tenta se conectar à origem.

Juntas, essas configurações determinam por quanto tempo o CloudFront tenta se conectar à origem antes de fazer o failover para a origem secundária, no caso de um grupo de origens, ou retornar uma resposta de erro ao visualizador. Por padrão, o CloudFront aguarda até 30 segundos (3 tentativas de 10 segundos cada) antes de tentar se conectar à origem secundária ou retornar uma resposta de erro. Esse tempo pode ser reduzido especificando um tempo limite de conexão mais curto, menos tentativas ou ambos.

Para obter mais informações, consulte Controlar tempos limite e tentativas da origem.

Tempo limite de resposta da origem

O tempo limite de resposta da origem, também conhecido como tempo limite de leitura da origem ou tempo limite de solicitação da origem, aplica-se a estes dois valores:

  • A quantidade de tempo, em segundos, que o CloudFront aguarda uma resposta após o encaminhamento de uma solicitação à origem.

  • A quantidade de tempo, em segundos, que o CloudFront aguarda após o recebimento de um pacote de resposta da origem e antes do recebimento do próximo pacote.

O comportamento do CloudFront depende do método HTTP da solicitação do visualizador:

  • Solicitações GET e HEAD: se a origem não responder dentro de 30 segundos ou parar de responder por 30 segundos, o CloudFront descartará a conexão. Se o número especificado de tentativas de conexão da origem for maior que 1, o CloudFront tentará obter uma resposta completa novamente. O CloudFront tenta até 3 vezes, conforme determinado pelo valor da configuração de tentativas de conexão da origem. Se a origem não responder durante a terceira tentativa, o CloudFront não tentará novamente enquanto não receber outra solicitação de conteúdo na mesma origem.

  • Solicitações DELETE, OPTIONS, PATCH, PUT e POST: se a origem não responder em 30 segundos, o CloudFront interromperá a conexão e não tentará entrar em contato com a origem novamente. O cliente pode reenviar a solicitação, se necessário.

Não é possível alterar o tempo limite de resposta para uma origem do Amazon S3 (um bucket do S3 que não esteja configurado com hospedagem de site estático).

Solicitações simultâneas para o mesmo objeto (recolhimento de solicitações)

Quando um local da borda do CloudFront recebe uma solicitação de um objeto, e o objeto não está no cache ou o objeto em cache expirou, o CloudFront envia imediatamente a solicitação para a origem. No entanto, se houver solicitações simultâneas para o mesmo objeto, ou seja, se solicitações adicionais para o mesmo objeto (com a mesma chave de cache) chegarem ao local da borda antes de o CloudFront receber a resposta à primeira solicitação, o CloudFront fará uma pausa antes de encaminhar solicitações adicionais à origem. Essa breve pausa ajuda a reduzir a carga na origem. O CloudFront envia a resposta da solicitação original a todas as solicitações recebidas enquanto estava em pausa. Isso é chamado de recolhimento de solicitações. Nos logs do CloudFront, a primeira solicitação é identificada como Miss no campo x-edge-result-type e as solicitações recolhidas são identificadas como Hit. Para mais informações sobre os logs do CloudFront, consulte Registro em log do CloudFront e de funções de borda.

O CloudFront apenas recolhe solicitações que compartilham uma chave de cache. Se as solicitações adicionais não compartilharem a mesma chave de cache porque, por exemplo, você configurou o CloudFront para armazenar em cache com base nas strings de consulta, nos cookies ou nos cabeçalhos da solicitação, o CloudFront encaminhará todas as solicitações com uma chave de cache exclusiva à origem.

Se quiser evitar o recolhimento de todas as solicitações, será possível usar a política de cache gerenciada CachingDisabled, que também impede o armazenamento em cache. Para obter mais informações, consulte Usar políticas de cache gerenciadas.

Se você quiser evitar o recolhimento das solicitações para objetos específicos, defina a TTL mínima para o comportamento de cache como 0 e configure a origem para enviar Cache-Control: private, Cache-Control: no-store, Cache-Control: no-cache, Cache-Control: max-age=0 ou Cache-Control: s-maxage=0. Essas configurações vão aumentar a carga na origem e introduzir latência adicional para as solicitações simultâneas que são pausadas enquanto o CloudFront aguarda a resposta à primeira solicitação.

Importante

Atualmente, o CloudFront não comporta recolher solicitações caso você habilite o encaminhamento de cookies na política de cache, na política de solicitação de origem ou nas configurações de cache herdadas.

Como o CloudFront processa as respostas da origem do Amazon S3

Saiba como o CloudFront processa as respostas da origem do Amazon S3.

Solicitações canceladas

Se o objeto não estiver no cache de ponto de presença e o visualizador encerrar a sessão (por exemplo, fechar o navegador) depois de o CloudFront obter o objeto da origem, mas antes de conseguir fornecer o objeto solicitado, ele não armazenará o objeto em cache no ponto de presença.

Cabeçalhos de resposta HTTP removidos ou atualizados pelo CloudFront

O CloudFront remove ou atualiza os seguintes campos de cabeçalho antes de encaminhar a resposta da origem do Amazon S3 ao visualizador:

  • X-Amz-Id-2

  • X-Amz-Request-Id

  • Set-Cookie: se você configurar o CloudFront para encaminhar cookies, ele encaminhará o campo de cabeçalho Set-Cookie aos clientes. Para obter mais informações, consulte Conteúdo em cache com base em cookies.

  • Trailer

  • Transfer-Encoding: se a origem do Amazon S3 retornar esse campo de cabeçalho, o CloudFront definirá o valor de chunked antes de retornar a resposta ao visualizador.

  • Upgrade

  • Via: o CloudFront define o seguinte valor na resposta para o visualizador:

    Via: versão HTTP string alfanumérica.cloudfront.net (CloudFront)

    Por exemplo, o valor é semelhante ao seguinte:

    Via: 1.1 1026589cc7887e7a0dc7827b4example.cloudfront.net (CloudFront)

Tamanho máximo do arquivo armazenável em cache

O tamanho máximo do corpo de uma resposta salva pelo CloudFront no cache é de 50 GB. Isso inclui respostas de transferência em partes que não especificam o valor de cabeçalho Content-Length.

É possível usar o CloudFront para armazenar em cache um objeto maior que isso usando solicitações de intervalo para solicitar os objetos em partes que sejam cada uma de 50 GB ou menores. O CloudFront armazena essas partes em cache porque cada uma delas é de 50 GB ou menor. Depois que o visualizador recuperar todas as partes do objeto, ele poderá reconstruir o objeto original, maior. Para obter mais informações, consulte Usar solicitações de intervalo para armazenar objetos grandes em cache.

Redirecionamentos

É possível configurar um bucket do Amazon S3 para redirecionar todas as solicitações para outro nome de host, que pode ser outro bucket do Amazon S3 ou um servidor HTTP. Se você configurar um bucket para redirecionar todas as solicitações e se ele for a origem de uma distribuição do CloudFront, recomendamos configurá-lo para redirecionar todas as solicitações para uma distribuição do CloudFront usando o nome de domínio da distribuição (por exemplo, d111111abcdef8.cloudfront.net) ou um nome de domínio alternativo (CNAME) associado a uma distribuição (por exemplo, example.com). Caso contrário, as solicitações do visualizador ignorarão o CloudFront, e os objetos serão fornecidos diretamente da nova origem.

nota

Se você redirecionar as solicitações para um nome de domínio alternativo, deverá também atualizar o serviço de DNS do seu domínio adicionando um registro CNAME. Para obter mais informações, consulte Usar URLs personalizados adicionando nomes de domínio alternativos (CNAMEs).

Veja o que acontece quando você configura um bucket para redirecionar todas as solicitações:

  1. Um visualizador (por exemplo, um navegador) solicita um objeto do CloudFront.

  2. O CloudFront encaminha a solicitação para o bucket do Amazon S3 que é a origem da distribuição.

  3. O Amazon S3 retorna um código de status HTTP 301 (Movido permanentemente) e o novo local.

  4. O CloudFront armazena o código de status de redirecionamento e o novo local e retorna os valores ao visualizador. O CloudFront não segue o redirecionamento para obter o objeto do novo local.

  5. O visualizador envia outra solicitação do objeto, mas desta vez especifica o novo local obtido do CloudFront:

    • Se o bucket do Amazon S3 estiver redirecionando todas as solicitações para uma distribuição do CloudFront, usando o nome de domínio da distribuição ou um nome de domínio alternativo, o CloudFront solicitará o objeto do bucket do Amazon S3 ou do servidor HTTP no novo local. Quando o novo local retornar o objeto, o CloudFront o retorna ao visualizador e o armazenará em cache em um ponto de presença.

    • Se o bucket do Amazon S3 estiver redirecionando solicitações para outro local, a segunda solicitação ignorará o CloudFront. O bucket do Amazon S3 ou servidor HTTP no novo local retorna o objeto diretamente para o visualizador, para que ele nunca seja armazenado em cache em um cache de ponto de presença do CloudFront.