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

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

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

Este tópico contém informações sobre 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 obterá 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:0000:0000:8a2e:0370:7334).

GETs condicionais

Ao receber uma solicitação de um objeto que expirou de um cache de ponto de presença, o CloudFront encaminha a solicitação à origem do Amazon S3 a fim de obter a versão mais recente do objeto ou a confirmação do Amazon S3 de que o cache do ponto de presença 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 (ou os dois):

  • 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 Armazenar 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 usam outros métodos.

Se você usar um bucket do Amazon S3 como a origem da distribuição e, além disso, usar identidades de acesso de origem do CloudFront, as solicitações POST não serão compatíveis em algumas regiões do Amazon S3 e será necessário um cabeçalho adicional para as solicitações PUT nessas regiões. Para obter mais informações, consulte Usar uma OAI em regiões do Amazon S3 que ofereçam suporte somente à autenticação do Signature versão 4.

Se você quiser usar carregamentos de várias partes para adicionar objetos a um bucket do Amazon S3, será necessário adicionar uma identidade de acesso de origem do CloudFront à distribuição e conceder à identidade de acesso de origem as permissões necessárias. Para obter mais informações, consulte Restringir acesso ao conteúdo do Amazon S3 usando uma identidade do acesso de origem (OAI).

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 uma identidade de acesso de origem do CloudFront para restringir o acesso ao conteúdo do Amazon S3 e conceder à identidade de acesso de origem as permissões necessárias. Por exemplo, se você configurar o CloudFront para aceitar e encaminhar esses métodos porque deseja usar PUT, será necessário configurar as políticas do bucket ou ACLs do Amazon S3 para lidar com solicitações DELETE de forma apropriada para que os visualizadores não possam excluir recursos selecionados. Para obter mais informações, consulte Restringir acesso ao conteúdo do Amazon S3 usando uma identidade do acesso de origem (OAI).

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 esses limites máximos, o CloudFront retornará o código de status HTTP 413, Request Entity Too Large (Entidade de solicitação muito grande), ao visualizador e 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 ponto de presença logo recebe uma resposta da CA que pode "grampear" em um pacote no handshake SSL. Quando o visualizador acreditar que o certificado é válido, o CloudFront poderá fornecer 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.

Protocols

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 na 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 Armazenar em cache o conteúdo 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 (picos de tráfego)

Quando um ponto de presença do CloudFront recebe uma solicitação de um objeto, e o objeto não está no cache ou expirou, o CloudFront envia imediatamente a solicitação para a origem do Amazon S3. Se houver um pico de tráfego (se solicitações adicionais do mesmo objeto chegarem ao ponto de presença antes de o Amazon S3 responder à primeira solicitação), o CloudFront fará uma breve pausa antes de encaminhar solicitações adicionais do objeto para sua origem. Normalmente, a resposta à primeira solicitação chegará ao ponto de presença do CloudFront antes da resposta a solicitações subsequentes. Essa breve pausa ajuda a reduzir a carga desnecessária no Amazon S3. Se as solicitações adicionais não forem idênticas porque, por exemplo, você configurou o CloudFront para armazenar em cache com base nos cabeçalhos de solicitação ou query strings, ele encaminhará todas as solicitações exclusivas à origem.

Quando a resposta da origem inclui um cabeçalho Cache-Control: no-cache, o CloudFront normalmente encaminha a próxima solicitação do mesmo objeto à origem a fim de determinar se o objeto foi atualizado. No entanto, quando há um pico de tráfego e o CloudFront faz uma pausa após encaminhar a primeira solicitação à origem, várias solicitações do visualizador poderão chegar antes de o CloudFront receber uma resposta da origem. Ao receber uma resposta com um cabeçalho Cache-Control: no-cache, o CloudFront envia o objeto na resposta ao visualizador que fez a solicitação original e a todos os visualizadores que solicitaram o objeto durante a pausa. Quando a resposta chega da origem, o CloudFront encaminha a próxima solicitação do visualizador do mesmo objeto para a origem. Em logs de acesso do CloudFront, a primeira solicitação é identificada como Miss na coluna x-edge-result-type e todas as solicitações subsequentes recebidas pelo CloudFront durante a pausa são identificadas como Hit. Para mais informações sobre o formato do arquivo de log de acesso, consulte Campos padrão de arquivo de log.

Como o CloudFront processa as respostas da origem do Amazon S3

Este tópico contém informações sobre 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:

  • 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 Armazenar 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, se o cliente faz uma solicitação pelo HTTP/1.1, o valor será semelhante a:

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

Tamanho máximo do arquivo

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

Quando o armazenamento em cache está desativado, o CloudFront pode recuperar um objeto maior que 30 GB da origem e passá-lo para o visualizador. No entanto, o CloudFront não armazena o objeto em cache.

Você pode usar o CloudFront para armazenar em cache um objeto maior que 30 GB usando solicitações de intervalo para solicitar os objetos em partes que sejam cada uma de 30 GB ou menores. O CloudFront armazena essas partes em cache porque cada uma delas é de 30 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.

Redirects

É 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 Uso de 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.