

# Comportamento de solicitações e respostas para origens personalizadas
<a name="RequestAndResponseBehaviorCustomOrigin"></a>

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

**Topics**
+ [Como o CloudFront processa e encaminha solicitações para sua origem personalizada](#RequestBehaviorCustomOrigin)
+ [Como o CloudFront processa respostas da sua origem personalizada](#ResponseBehaviorCustomOrigin)

## Como o CloudFront processa e encaminha solicitações para sua origem personalizada
<a name="RequestBehaviorCustomOrigin"></a>

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

**Contents**
+ [Autenticação](#RequestCustomClientAuth)
+ [Duração do armazenamento em cache e TTL mínimo](#RequestCustomCaching)
+ [Endereços IP do cliente](#RequestCustomIPAddresses)
+ [Autenticação SSL do lado do cliente](#RequestCustomClientSideSslAuth)
+ [Compactação](#RequestCustomCompression)
+ [Solicitações condicionais](#RequestCustomConditionalGETs)
+ [Cookies](#RequestCustomCookies)
+ [Compartilhamento de recursos de origem cruzada (CORS)](#request-custom-cors)
+ [Criptografia](#RequestCustomEncryption)
+ [Solicitações GET que incluem um corpo](#RequestCustom-get-body)
+ [Métodos HTTP](#RequestCustomHTTPMethods)
+ [Cabeçalhos de solicitação HTTP e comportamento do CloudFront (origens do Amazon S3 e personalizadas)](#request-custom-headers-behavior)
+ [Versão HTTP](#RequestCustomHTTPVersion)
+ [Tamanho máximo de uma solicitação e de um URL](#RequestCustomMaxRequestStringLength)
+ [Associação OCSP](#request-custom-ocsp-stapling)
+ [Conexões persistentes](#request-custom-persistent-connections)
+ [Protocolos](#RequestCustomProtocols)
+ [Strings de consulta](#RequestCustomQueryStrings)
+ [Tentativas e tempo limite de conexão da origem](#custom-origin-timeout-attempts)
+ [Tempo limite de resposta da origem](#request-custom-request-timeout)
+ [Solicitações simultâneas para o mesmo objeto (recolhimento de solicitações)](#request-custom-traffic-spikes)
+ [`User-Agent`Cabeçalho](#request-custom-user-agent-header)

### Autenticação
<a name="RequestCustomClientAuth"></a>

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 obter mais informações, consulte [Configurar o CloudFront para encaminhar o cabeçalho `Authorization`](add-origin-custom-headers.md#add-origin-custom-headers-forward-authorization).

É possível usar HTTP ou HTTPS para encaminhar solicitações para o servidor de origem. Para obter mais informações, consulte [Usar HTTPS com o CloudFront](using-https.md).

### Duração do armazenamento em cache e TTL mínimo
<a name="RequestCustomCaching"></a>

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)](Expiration.md).

### Endereços IP do cliente
<a name="RequestCustomIPAddresses"></a>

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](https://datatracker.ietf.org/doc/html/rfc7239). Também é possível modificar o cabeçalho usando as funções de computação de borda do CloudFront.

### Autenticação SSL do lado do cliente
<a name="RequestCustomClientSideSslAuth"></a>

O CloudFront permite a autenticação TLS mútua (mTLS), na qual o cliente e o servidor se autenticam usando certificados. Com a mTLS configurada, o CloudFront pode validar certificados de clientes durante o handshake do TLS e, opcionalmente, executar o CloudFront Functions para implementar uma lógica de validação personalizada.

Se uma origem solicitar um certificado do lado do cliente quando a mTLS não está configurada, o CloudFront interromperá a solicitação.

Para ter mais informações sobre a configuração da mTLS, consulte [Associar uma função de conexão do CloudFront](connection-functions.md).

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
<a name="RequestCustomCompression"></a>

Para obter mais informações, consulte [Fornecer arquivos compactados](ServingCompressedFiles.md). 

### Solicitações condicionais
<a name="RequestCustomConditionalGETs"></a>

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

**nota**  
As solicitações condicionais `If-Modified-Since` e `If-None-Match` não são compatíveis com o CloudFront quando ele estiver configurado para encaminhar cookies (todos ou um subconjunto).  
Para obter mais informações, consulte [Conteúdo em cache com base em cookies](Cookies.md).

### Cookies
<a name="RequestCustomCookies"></a>

É possível configurar o CloudFront para encaminhar cookies à origem. Para obter mais informações, consulte [Conteúdo em cache com base em cookies](Cookies.md).

### Compartilhamento de recursos de origem cruzada (CORS)
<a name="request-custom-cors"></a>

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 obter mais informações, consulte [Conteúdo em cache com base nos cabeçalhos de solicitação](header-caching.md).

### Criptografia
<a name="RequestCustomEncryption"></a>

É 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:
+ [Política de protocolo do visualizador](DownloadDistValuesCacheBehavior.md#DownloadDistValuesViewerProtocolPolicy)
+ [Protocolo (somente origens personalizadas)](DownloadDistValuesOrigin.md#DownloadDistValuesOriginProtocolPolicy)

O CloudFront encaminha solicitações HTTPS ao servidor de origem usando os protocolos SSLv3, TLSv1.0, TLSv1.1, TLSv1.2 e TLSv1.3. 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](distribution-web-creating-console.md). 
+ Se você estiver usando a API do CloudFront, especifique os protocolos usando o elemento `OriginSslProtocols`. Para mais informações, consulte [OriginSslProtocols](https://docs.aws.amazon.com/cloudfront/latest/APIReference/API_OriginSslProtocols.html) e [DistributionConfig](https://docs.aws.amazon.com/cloudfront/latest/APIReference/API_DistributionConfig.html) na *Referência da API do Amazon CloudFront*.

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

**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](using-https.md). 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](secure-connections-supported-viewer-protocols-ciphers.md).

### Solicitações GET que incluem um corpo
<a name="RequestCustom-get-body"></a>

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

### Métodos HTTP
<a name="RequestCustomHTTPMethods"></a>

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 name="request-custom-headers-behavior"></a>

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 [Conteúdo em cache com base nos cabeçalhos de solicitação](header-caching.md).


| 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](cache-key-understand-cache-policy.md#cache-policy-compressed-objects) e [Fornecer arquivos compactados](ServingCompressedFiles.md).  |  Sim  | 
|  `Accept-Language`  |  O CloudFront remove o cabeçalho.  |  Sim  | 
|  `Authorization`  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/AmazonCloudFront/latest/DeveloperGuide/RequestAndResponseBehaviorCustomOrigin.html)  |  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](header-caching.md#header-caching-web-protocol).  |  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](header-caching.md#header-caching-web-device).  |  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](header-caching.md#header-caching-web-device).  |  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](header-caching.md#header-caching-web-device).  |  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 [Conteúdo em cache com base em cookies](Cookies.md).  |  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)](RangeGETs.md).  |  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](header-caching.md#header-caching-web-device).  |  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](#RequestCustomIPAddresses).  |  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
<a name="RequestCustomHTTPVersion"></a>

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

### Tamanho máximo de uma solicitação e de um URL
<a name="RequestCustomMaxRequestStringLength"></a>

O comprimento máximo de uma solicitação, incluindo o caminho, a string de consulta (se houver) e os cabeçalhos, é de 32.768 bytes.

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

Se uma URL exceder o comprimento máximo, o CloudFront retornará o código de status HTTP 414 (URI longo demais) ao visualizador. Se uma solicitação exceder o comprimento máximo porque o tamanho do cabeçalho foi excedido, o CloudFront retornará o código de status HTTP 494 ao visualizador. Em ambos os casos, o CloudFront encerra a conexão TCP com o visualizador.

### Associação OCSP
<a name="request-custom-ocsp-stapling"></a>

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
<a name="request-custom-persistent-connections"></a>

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 de keep alive (somente origens de VPC e personalizadas)](DownloadDistValuesOrigin.md#DownloadDistValuesOriginKeepaliveTimeout) na seção [Referência de configurações de todas as distribuições](distribution-web-values-specify.md).

### Protocolos
<a name="RequestCustomProtocols"></a>

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](HowToUpdateDistribution.md). Para obter informações sobre como atualizar uma distribuição usando a API do CloudFront, acesse [UpdateDistribution](https://docs.aws.amazon.com/cloudfront/latest/APIReference/API_UpdateDistribution.html) na *Referência da API do Amazon CloudFront*. 

### Strings de consulta
<a name="RequestCustomQueryStrings"></a>

É possível configurar se o CloudFront encaminha parâmetros de query strings à origem. Para obter mais informações, consulte [Conteúdo em cache com base em parâmetros de string de consulta](QueryStringParameters.md).

### Tentativas e tempo limite de conexão da origem
<a name="custom-origin-timeout-attempts"></a>

*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](high_availability_origin_failover.md#controlling-attempts-and-timeouts).

### Tempo limite de resposta da origem
<a name="request-custom-request-timeout"></a>

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](DownloadDistValuesOrigin.md#origin-connection-attempts) 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 dentro da duração do tempo limite da leitura, 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](DownloadDistValuesOrigin.md#DownloadDistValuesOriginResponseTimeout).

### Solicitações simultâneas para o mesmo objeto (recolhimento de solicitações)
<a name="request-custom-traffic-spikes"></a>

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](logging.md).

O CloudFront apenas recolhe solicitações que compartilham uma [*chave de cache*](understanding-the-cache-key.md). 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](using-managed-cache-policies.md).

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](controlling-the-cache-key.md), na [política de solicitação de origem](controlling-origin-requests.md) ou nas configurações de cache herdadas.

### `User-Agent`Cabeçalho
<a name="request-custom-user-agent-header"></a>

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 [Conteúdo em cache com base nos cabeçalhos de solicitação](header-caching.md).

É 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
<a name="ResponseBehaviorCustomOrigin"></a>

Saiba como o CloudFront processa respostas da origem personalizada.

**Contents**
+ [`100 Continue`Respostas](#Response100Continue)
+ [Armazenamento em cache](#ResponseCustomCaching)
+ [Solicitações canceladas](#response-custom-canceled-requests)
+ [Negociação de conteúdo](#ResponseCustomContentNegotiation)
+ [Cookies](#ResponseCustomCookies)
+ [Conexões TCP interrompidas](#ResponseCustomDroppedTCPConnections)
+ [Cabeçalhos de resposta HTTP que o CloudFront remove ou substitui](#ResponseCustomRemovedHeaders)
+ [Tamanho máximo do arquivo armazenável em cache](#ResponseCustomMaxFileSize)
+ [Origem indisponível](#ResponseCustomOriginUnavailable)
+ [Redirecionamentos](#ResponseCustomRedirects)
+ [`Transfer-Encoding`Cabeçalho](#ResponseCustomTransferEncoding)

### `100 Continue`Respostas
<a name="Response100Continue"></a>

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
<a name="ResponseCustomCaching"></a>
+ Certifique-se de que o servidor de origem defina valores válidos e precisos para os campos de cabeçalho `Date` e `Last-Modified`.
+ Normalmente, o CloudFront respeita um cabeçalho `Cache-Control: no-cache` na resposta da origem. Para ver uma exceção, consulte [Solicitações simultâneas para o mesmo objeto (recolhimento de solicitações)](#request-custom-traffic-spikes).

### Solicitações canceladas
<a name="response-custom-canceled-requests"></a>

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
<a name="ResponseCustomContentNegotiation"></a>

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](#ResponseCustomRemovedHeaders).

### Cookies
<a name="ResponseCustomCookies"></a>

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 [Conteúdo em cache com base em cookies](Cookies.md).

### Conexões TCP interrompidas
<a name="ResponseCustomDroppedTCPConnections"></a>

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
<a name="ResponseCustomRemovedHeaders"></a>

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 [Conteúdo em cache com base em cookies](Cookies.md).
+ `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](header-caching.md#header-caching-web-device).
  + 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](#ResponseCustomContentNegotiation).
  + 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
<a name="ResponseCustomMaxFileSize"></a>

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](RangeGETs.md#cache-large-objects-with-range-requests).

### Origem indisponível
<a name="ResponseCustomOriginUnavailable"></a>

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](HTTPStatusCodes.md#HTTPStatusCodes-custom-error-pages). 

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
<a name="ResponseCustomRedirects"></a>

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 para o 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-Encoding`Cabeçalho
<a name="ResponseCustomTransferEncoding"></a>

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](#ResponseCustomDroppedTCPConnections). 