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

Comportamento de solicitações e respostas para origens personalizadas

Como o CloudFront processa e encaminha solicitações para sua origem personalizada

Este tópico contém informações sobre como o CloudFront processa solicitações do visualizador e as encaminha para a origem personalizada.

Autenticação

Se você encaminhar o cabeçalho Authorization para sua origem, será possível configurar o servidor de origem para solicitar a autenticação do cliente para os seguintes tipos de solicitações:

  • DELETE

  • GET

  • HEAD

  • PATCH

  • PUT

  • POST

Para solicitações OPTIONS, é possível configurar a autenticação do cliente somente se usar as seguintes configurações do CloudFront:

  • O CloudFront foi configurado para encaminhar o cabeçalho Authorization à origem

  • O CloudFront foi configurado para não armazenar a resposta a solicitações OPTIONS em cache

Para ter mais informações, consulte Configurar o CloudFront para encaminhar o Authorization cabeçalho.

É possível usar HTTP ou HTTPS para encaminhar solicitações para o servidor de origem. Para ter mais informações, consulte Usar HTTPS com o CloudFront.

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

Algumas aplicações, como balanceadores de carga (inclusive o Elastic Load Balancing), firewalls de aplicações Web, proxies reversos, sistemas de prevenção de invasão e API Gateway, adicionam o endereço IP do servidor de borda do CloudFront que encaminhou a solicitação no fim do cabeçalho X-Forwarded-For. Por exemplo, se o CloudFront incluir X-Forwarded-For: 192.0.2.2 em uma solicitação encaminhada ao ELB e o endereço IP do servidor de borda do CloudFront for 192.0.2.199, a solicitação recebida pela instância do EC2 conterá o seguinte cabeçalho:

X-Forwarded-For: 192.0.2.2,192.0.2.199

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).

Observe também que o cabeçalho X-Forwarded-For pode ser modificado por cada nó no caminho para o servidor atual (CloudFront). Para obter mais informações, consulte a seção 8.1 do RFC 7239. Também é possível modificar o cabeçalho usando as funções de computação de borda do CloudFront.

Autenticação SSL no lado do cliente

O CloudFront não é compatível com a autenticação do cliente com certificados SSL no lado do cliente. Se uma origem solicitar um certificado no lado do cliente, o CloudFront interromperá a solicitação.

Compactação

Para ter mais informações, consulte Fornecer arquivos compactados.

Solicitações 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 a fim de obter a versão mais recente do objeto ou a confirmação da origem de que o cache do ponto de presença do CloudFront já tem a versão mais recente. Normalmente, ao enviar o objeto pela última vez ao CloudFront, a origem inclui um valor ETag ou LastModified, ou os dois, na resposta. Na nova solicitação encaminhada pelo CloudFront à origem, 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.

A origem 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

É possível configurar o CloudFront para encaminhar cookies à origem. Para obter mais informações, consulte Armazenar conteúdo em cache com base em cookies.

Compartilhamento de recursos de origem cruzada (CORS)

Se quiser que o CloudFront respeite as configurações de compartilhamento de recursos entre origens, configure o CloudFront para encaminhar o cabeçalho Origin à origem. Para ter mais informações, consulte Armazenar conteúdo em cache com base nos cabeçalhos de solicitação.

Criptografia

É possível solicitar que os usuários usem HTTPS para enviar solicitações ao CloudFront e que o CloudFront as encaminhe à origem personalizada usando o protocolo usado pelo visualizador. Para mais informações, consulte as configurações da distribuição:

O CloudFront encaminha solicitações HTTPS para o servidor de origem usando os protocolos SSLv3, TLSv1.0, TLSv1.1 e TLSv1.2. Para origens personalizadas, é possível escolher os protocolos SSL a serem usados pelo CloudFront na comunicação com a origem:

  • Se você estiver usando o console do CloudFront, escolha os protocolos usando as caixas de seleção Origin SSL Protocols (Protocolos SSL da origem). Para obter mais informações, consulte Criar uma distribuição.

  • Se você estiver usando a API do CloudFront, especifique os protocolos usando o elemento OriginSslProtocols. Para mais informações, consulte OriginSslProtocols e DistributionConfig na Referência da API do Amazon CloudFront.

Se a origem for um bucket do Amazon S3, o CloudFront sempre usará o TLSv1.2.

Importante

Outras versões de SSL e TLS não são compatíveis.

Para mais informações sobre como usar HTTPS com o CloudFront, consulte Usar HTTPS com o CloudFront. Para ver as listas de criptografias compatíveis com o CloudFront para comunicação HTTPS entre os visualizadores e o CloudFront e entre o CloudFront e a origem, consulte Protocolos e cifras compatíveis entre visualizadores e o CloudFront.

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 personalizada:

  • 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.

Para obter informações sobre como configurar se sua origem personalizada processa esses métodos ou não, consulte a documentação referente a ela.

Importante

Se você configurar o CloudFront para aceitar e encaminhar todos os métodos HTTP compatíveis com o CloudFront à origem, configure o servidor de origem para lidar com todos eles. Por exemplo, se você configurar do CloudFront para aceitar e encaminhar esses métodos porque deseja usar POST, será necessário configurar o servidor de origem 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 a documentação do seu servidor HTTP.

Cabeçalhos de solicitação HTTP e comportamento do CloudFront (origens do Amazon S3 e personalizadas)

A tabela a seguir lista os cabeçalhos de solicitação HTTP que você pode encaminhar às origens personalizadas e do Amazon S3 (com as exceções observadas). Para cada cabeçalho, a tabela inclui informações sobre o seguinte:

  • O comportamento do CloudFront se você não configurar o CloudFront para encaminhar o cabeçalho à origem, o que faz com que ele armazene os objetos em cache com base nos valores de cabeçalho.

  • Se é possível configurar o CloudFront para armazenar os objetos em cache com base nos valores do cabeçalho em questão.

    É possível configurar o CloudFront para armazenar os objetos em cache com base nos valores dos cabeçalhos Date e User-Agent, mas não recomendamos fazer isso. Há vários valores possíveis para esses cabeçalhos, e o armazenamento em cache com base nesses valores faz com que o CloudFront encaminhe significativamente mais solicitações à origem.

Para obter mais informações sobre o armazenamento em cache com base nos valores de cabeçalho, consulte Armazenar conteúdo em cache com base nos cabeçalhos de solicitação.

Cabeçalho Comportamento se você não configurar o CloudFront para armazenar em cache com base nos valores de cabeçalho O armazenamento em cache com base nos valores de cabeçalho é compatível

Outros cabeçalhos definidos

Configurações de cache herdadas: o CloudFront encaminha os cabeçalhos para a origem.

Sim

Accept

O CloudFront remove o cabeçalho.

Sim

Accept-Charset

O CloudFront remove o cabeçalho.

Sim

Accept-Encoding

Se o valor contiver gzip ou br, o CloudFront encaminhará um cabeçalho normalizado Accept-Encoding à origem.

Para obter mais informações, consulte Suporte à compactação e Fornecer arquivos compactados.

Sim

Accept-Language

O CloudFront remove o cabeçalho.

Sim

Authorization

  • Solicitações GET e HEAD: o CloudFront remove o campo de cabeçalho Authorization antes de encaminhar a solicitação à origem.

  • Solicitações OPTIONS: o CloudFront remove o campo de cabeçalho Authorization antes de encaminhar a solicitação à origem se você configurá-lo para armazenar respostas a solicitações OPTIONS em cache.

    O CloudFront encaminha o campo de cabeçalho Authorization à origem se você não configurá-lo para armazenar respostas a solicitações OPTIONS em cache.

  • Solicitações DELETE, PATCH, POST e PUT: o CloudFront não remove o campo de cabeçalho antes de encaminhar a solicitação à origem.

Sim

Cache-Control

O CloudFront encaminha o cabeçalho à origem.

Não

CloudFront-Forwarded-Proto

O CloudFront não adiciona o cabeçalho antes de encaminhar a solicitação à origem.

Para obter mais informações, consulte Configurar o armazenamento em cache com base no protocolo da solicitação.

Sim

CloudFront-Is-Desktop-Viewer

O CloudFront não adiciona o cabeçalho antes de encaminhar a solicitação à origem.

Para obter mais informações, consulte Configurar o armazenamento em cache com base no tipo de dispositivo.

Sim

CloudFront-Is-Mobile-Viewer

O CloudFront não adiciona o cabeçalho antes de encaminhar a solicitação à origem.

Para obter mais informações, consulte Configurar o armazenamento em cache com base no tipo de dispositivo.

Sim

CloudFront-Is-Tablet-Viewer

O CloudFront não adiciona o cabeçalho antes de encaminhar a solicitação à origem.

Para obter mais informações, consulte Configurar o armazenamento em cache com base no tipo de dispositivo.

Sim

CloudFront-Viewer-Country

O CloudFront não adiciona o cabeçalho antes de encaminhar a solicitação à origem.

Sim

Connection

O CloudFront substitui esse cabeçalho por Connection: Keep-Alive antes de encaminhar a solicitação à origem.

Não

Content-Length

O CloudFront encaminha o cabeçalho à origem.

Não

Content-MD5

O CloudFront encaminha o cabeçalho à origem.

Sim

Content-Type

O CloudFront encaminha o cabeçalho à origem.

Sim

Cookie

Se você configurar o CloudFront para encaminhar cookies, ele encaminhará o campo de cabeçalho Cookie à origem. Em caso negativo, o CloudFront removerá o campo de cabeçalho Cookie. Para obter mais informações, consulte Armazenar conteúdo em cache com base em cookies.

Não

Date

O CloudFront encaminha o cabeçalho à origem.

Sim, mas não recomendado

Expect

O CloudFront remove o cabeçalho.

Sim

From

O CloudFront encaminha o cabeçalho à origem.

Sim

Host

O CloudFront define o valor do nome de domínio da origem associada ao objeto solicitado.

Não é possível fazer o armazenamento em cache com base no cabeçalho Host para origens do Amazon S3 ou MediaStore.

Sim (personalizada)

Não (S3 e MediaStore)

If-Match

O CloudFront encaminha o cabeçalho à origem.

Sim

If-Modified-Since

O CloudFront encaminha o cabeçalho à origem.

Sim

If-None-Match

O CloudFront encaminha o cabeçalho à origem.

Sim

If-Range

O CloudFront encaminha o cabeçalho à origem.

Sim

If-Unmodified-Since

O CloudFront encaminha o cabeçalho à origem.

Sim

Max-Forwards

O CloudFront encaminha o cabeçalho à origem.

Não

Origin

O CloudFront encaminha o cabeçalho à origem.

Sim

Pragma

O CloudFront encaminha o cabeçalho à origem.

Não

Proxy-Authenticate

O CloudFront remove o cabeçalho.

Não

Proxy-Authorization

O CloudFront remove o cabeçalho.

Não

Proxy-Connection

O CloudFront remove o cabeçalho.

Não

Range

O CloudFront encaminha o cabeçalho à origem. Para obter mais informações, consulte Como o CloudFront processa solicitações parciais de um objeto (Range GETs).

Sim, por padrão

Referer

O CloudFront remove o cabeçalho.

Sim

Request-Range

O CloudFront encaminha o cabeçalho à origem.

Não

TE

O CloudFront remove o cabeçalho.

Não

Trailer

O CloudFront remove o cabeçalho.

Não

Transfer-Encoding

O CloudFront encaminha o cabeçalho à origem.

Não

Upgrade

O CloudFront remove o cabeçalho, a menos que você tenha estabelecido uma conexão WebSocket.

Não (exceto para conexões WebSocket)

User-Agent

O CloudFront substitui o valor desse campo de cabeçalho por Amazon CloudFront. Se você quiser que o CloudFront armazene o conteúdo em cache com base no dispositivo do usuário, consulte Configurar o armazenamento em cache com base no tipo de dispositivo.

Sim, mas não recomendado

Via

O CloudFront encaminha o cabeçalho à origem.

Sim

Warning

O CloudFront encaminha o cabeçalho à origem.

Sim

X-Amz-Cf-Id

O CloudFront adiciona o cabeçalho à solicitação do visualizador antes de encaminhá-la à origem. O valor do cabeçalho contém uma string criptografada que identifica exclusivamente a solicitação.

Não

X-Edge-*

O CloudFront remove todos os cabeçalhos X-Edge-*.

Não

X-Forwarded-For

O CloudFront encaminha o cabeçalho à origem. Para obter mais informações, consulte Endereços IP do cliente.

Sim

X-Forwarded-Proto

O CloudFront remove o cabeçalho.

Não

X-HTTP-Method-Override

O CloudFront remove o cabeçalho.

Sim

X-Real-IP

O CloudFront remove o cabeçalho.

Não

Versão HTTP

O CloudFront encaminha as solicitações à origem personalizada usando HTTP/1.1.

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 inúmeras 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.

Conexões persistentes

Ao obter uma resposta da origem, o CloudFront tenta manter a conexão por alguns segundos caso chegue outra solicitação nesse período. A manutenção de uma conexão persistente economiza o tempo necessário para restabelecer a conexão TCP e executar outro handshake TLS para solicitações subsequentes.

Para obter mais informações, inclusive como configurar a duração de conexões persistentes, consulte Tempo limite keep alive (somente origens personalizadas) na seção Valores especificados ao criar ou atualizar uma distribuição.

Protocolos

O CloudFront encaminha solicitações HTTP ou HTTPS ao servidor de origem levando em consideração:

  • O protocolo da solicitação enviada pelo visualizador ao CloudFront: HTTP ou HTTPS.

  • O valor do campo Origin Protocol Policy (Política de protocolo da origem) no console do CloudFront ou, se você estiver usando a API do CloudFront, o elemento OriginProtocolPolicy no tipo complexo DistributionConfig. No console do CloudFront, as opções são HTTP Only (Somente HTTP), HTTPS Only (Somente HTTPS) e Match Viewer (Corresponder visualizador).

Se você especificar HTTP Only (Somente HTTP) ou HTTPS Only (Somente HTTPS), o CloudFront encaminhará as solicitações ao servidor de origem usando o protocolo especificado, independentemente do protocolo da solicitação do visualizador.

Se você especificar Match Viewer (Corresponder visualizador), o CloudFront encaminhará as solicitações ao servidor de origem usando o protocolo da solicitação do visualizador. O CloudFront armazenará o objeto em cache somente uma vez se os visualizadores fizerem solicitações usando protocolos HTTP e HTTPS.

Importante

Se o CloudFront encaminhar uma solicitação à origem usando o protocolo HTTPS, e o servidor de origem retornar um certificado inválido ou autoassinado, o CloudFront interromperá a conexão TCP.

Para obter informações sobre como atualizar uma distribuição usando o console do CloudFront, consulte Atualizar uma distribuição. Para obter informações sobre como atualizar uma distribuição usando a API do CloudFront, acesse UpdateDistribution na Referência da API do Amazon CloudFront.

Strings de consulta

É possível configurar se o CloudFront encaminha parâmetros de query strings à origem. 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 ou parar de responder dentro da duração do tempo limite da resposta, o CloudFront interromperá 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.

Para mais informações, inclusive como configurar o tempo limite de resposta da origem, consulte Tempo limite de resposta (somente origens personalizadas).

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, é possível usar a política de cache gerenciado CachingDisabled, que também impede o armazenamento em cache. Para ter mais informações, consulte Usar as 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.

User-AgentCabeçalho

Se você quiser que o CloudFront armazene diferentes versões dos objetos em cache com base no dispositivo usado pelo usuário para visualizar o conteúdo, recomendamos configurar o CloudFront para encaminhar um ou mais dos cabeçalhos à origem personalizada:

  • CloudFront-Is-Desktop-Viewer

  • CloudFront-Is-Mobile-Viewer

  • CloudFront-Is-SmartTV-Viewer

  • CloudFront-Is-Tablet-Viewer

Com base no valor do cabeçalho User-Agent, o CloudFront define o valor desses cabeçalhos como true ou false antes de encaminhar a solicitação para a origem. Se o dispositivo se encaixar em mais de uma categoria, mais de um valor poderá ser true. Por exemplo, para alguns tablets, o CloudFront pode definir tanto CloudFront-Is-Mobile-Viewer quanto CloudFront-Is-Tablet-Viewer como true. Para mais informações sobre como configurar o CloudFront para armazenar em cache com base nos cabeçalhos de solicitação, consulte Armazenar conteúdo em cache com base nos cabeçalhos de solicitação.

É possível configurar o CloudFront para armazenar os objetos em cache com base nos valores do cabeçalho User-Agent, mas não recomendamos fazer isso. Há vários valores possíveis para o cabeçalho User-Agent, e o armazenamento em cache com base nesses valores faz com que o CloudFront encaminhe significativamente mais solicitações à origem.

Se você não configurar o CloudFront para armazenar os objetos em cache com base nos valores do cabeçalho User-Agent, o CloudFront adicionará um cabeçalho User-Agent com o seguinte valor antes de encaminhar uma solicitação à origem:

User-Agent = Amazon CloudFront

O CloudFront adiciona esse cabeçalho, independentemente se a solicitação do visualizador inclui um cabeçalho User-Agent ou não. Se a solicitação do visualizador incluir um cabeçalho User-Agent, o CloudFront o removerá.

Como o CloudFront processa respostas da sua origem personalizada

Este tópico contém informações sobre como o CloudFront processa as respostas da origem personalizada.

Respostas 100 Continue

Não é possível que a origem envie mais de uma resposta 100-Continue ao CloudFront. Após a primeira resposta 100-Continue, o CloudFront espera uma resposta HTTP 200 OK. Se a origem enviar outra resposta 100-Continue após a primeira, o CloudFront retornará um erro.

Armazenamento em cache

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.

Negociação de conteúdo

Se a origem retornar Vary:* na resposta e o valor de Minimum TTL do comportamento de cache correspondente for 0, o CloudFront armazenará o objeto em cache, mas, mesmo assim, encaminhará todas as solicitações subsequentes do objeto à origem a fim de confirmar se o cache contém a versão mais recente do objeto. O CloudFront não inclui cabeçalhos condicionais, como If-None-Match ou If-Modified-Since. Consequentemente, a origem retorna o objeto ao CloudFront em resposta a cada solicitação.

Se a origem retornar Vary:* na resposta e o valor de Minimum TTL do comportamento de cache correspondente for qualquer outro valor, o CloudFront processará o cabeçalho Vary conforme descrito em Cabeçalhos de resposta HTTP que o CloudFront remove ou substitui.

Cookies

Se você permitir cookies para um comportamento de cache e a origem retornar cookies com um objeto, o CloudFront armazenará tanto o objeto quanto os cookies em cache. Observe que isso reduz a capacidade de armazenamento em cache de um objeto. Para obter mais informações, consulte Armazenar conteúdo em cache com base em cookies.

Conexões TCP interrompidas

Se a conexão TCP entre o CloudFront e a origem cair enquanto a origem estiver retornando um objeto ao CloudFront, o comportamento do CloudFront dependerá da inclusão ou não de um cabeçalho Content-Length na resposta pela origem:

  • Cabeçalho Content-Length: o CloudFront retorna o objeto ao visualizador assim que o obtém da origem. No entanto, se o valor do cabeçalho Content-Length não corresponder ao tamanho do objeto, o CloudFront não o armazenará em cache.

  • Transfer-Encoding: Chunked: o CloudFront retorna o objeto ao visualizador assim que o obtém da origem. No entanto, se a resposta em partes não for concluída, o CloudFront não armazenará o objeto em cache.

  • Sem cabeçalho Content-Length: o CloudFront retorna o objeto ao visualizador e o armazena em cache, mas o objeto não pode ser concluído. Sem um cabeçalho Content-Length, o CloudFront não consegue determinar se a conexão TCP foi interrompida de forma acidental ou proposicional.

Recomendamos que você configure o servidor HTTP para adicionar um cabeçalho Content-Length a fim de impedir que o CloudFront armazene objetos parciais em cache.

Cabeçalhos de resposta HTTP que o CloudFront remove ou substitui

O CloudFront remove ou atualiza os seguintes campos de cabeçalho antes de encaminhar a resposta da origem 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 retornar esse campo de cabeçalho, o CloudFront definirá o valor de chunked antes de retornar a resposta ao visualizador.

  • Upgrade

  • Vary – Observe o seguinte:

    • Se você configurar o CloudFront para encaminhar os cabeçalhos específicos do dispositivo à origem (CloudFront-Is-Desktop-Viewer, CloudFront-Is-Mobile-Viewer, CloudFront-Is-SmartTV-Viewer, CloudFront-Is-Tablet-Viewer) e a origem para retornar Vary:User-Agent ao CloudFront, o CloudFront retornará Vary:User-Agent ao visualizador. Para obter mais informações, consulte Configurar o armazenamento em cache com base no tipo de dispositivo.

    • Se você configurar a origem para incluir Accept-Encoding ou Cookie no cabeçalho Vary, o CloudFront incluirá os valores na resposta ao visualizador.

    • Se você configurar o CloudFront para encaminhar cabeçalhos à origem e configurar a origem para retornar os nomes de cabeçalho ao CloudFront no cabeçalho Vary (por exemplo, Vary:Accept-Charset,Accept-Language), o CloudFront retornará o cabeçalho Vary com esses valores ao visualizador.

    • Para obter informações sobre como o CloudFront processa um valor de * no cabeçalho Vary, consulte Negociação de conteúdo.

    • Se você configurar a origem para incluir qualquer outro valor no cabeçalho Vary, o CloudFront removerá os valores antes de retornar a resposta ao visualizador.

  • 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 ter mais informações, consulte Usar solicitações de intervalo para armazenar objetos grandes em cache.

Origem indisponível

Se o servidor de origem estiver indisponível e o CloudFront receber uma solicitação de um objeto que está no cache do ponto de presença, mas expirou (por exemplo, porque o período especificado na diretiva Cache-Control max-age passou), o CloudFront fornecerá a versão expirada do objeto ou uma página de erro personalizada. Para mais informações sobre o comportamento do CloudFront ao configurar páginas de erro personalizadas, consulte Como o CloudFront processará erros quando páginas de erro personalizadas estiverem configuradas.

Em alguns casos, um objeto que é raramente solicitado é removido e se torna indisponível no ponto de presença de caches. O CloudFront não pode fornecer um objeto que foi removido.

Redirecionamentos

Se você alterar a localização de um objeto no servidor de origem, poderá configurar o servidor da Web para redirecionar as solicitações para o novo local. Depois de configurar o redirecionamento, a primeira vez que um visualizador enviar uma solicitação do objeto, o CloudFront a enviará à origem, e a origem responderá com um redirecionamento (por exemplo, 302 Moved Temporarily). O CloudFront armazena o redirecionamento em cache e o retorna ao visualizador. O CloudFront não acompanha o redirecionamento.

Você pode configurar o servidor da web para redirecionar as solicitações para um destes locais:

  • O novo URL do objeto no servidor de origem. Ao seguir o redirecionamento para o novo URL, o visualizador ignora o CloudFront e vai diretamente à origem. Por isso, recomendamos que você não redirecione as solicitações para o novo URL do objeto na origem.

  • O novo URL do CloudFront do objeto. Quando o visualizador envia a solicitação que contém o novo URL do CloudFront, o CloudFront obtém o objeto do novo local na origem, armazena-o em cache no ponto de presença e retorna-o ao visualizador. As solicitações subsequentes do objeto são fornecidas pelo ponto de presença. Isso evita a latência e a carga associadas à solicitação do objeto pelo visualizador da origem. No entanto, cada nova solicitação do objeto será cobrada por duas solicitações ao CloudFront.

Transfer-EncodingCabeçalho

O CloudFront é compatível apenas com o valor chunked do cabeçalho Transfer-Encoding. Se a origem retornar Transfer-Encoding: chunked, o CloudFront retornará o objeto ao cliente assim que for recebido no ponto de presença e o armazenará em partes para solicitações subsequentes.

Se o visualizador fizer uma solicitação Range GET e a origem retornar Transfer-Encoding: chunked, o CloudFront retornará o objeto inteiro ao visualizador, em vez do intervalo solicitado.

Recomendamos que você use codificação em partes se o tamanho do conteúdo da sua resposta não puder ser predeterminado. Para obter mais informações, consulte Conexões TCP interrompidas.