

# Como o CloudFront processa solicitações parciais de um objeto (Range GETs)
<a name="RangeGETs"></a>

Para um objeto grande, o visualizador (navegador ou outro cliente) pode fazer várias solicitações `GET` e usar o cabeçalho de solicitação `Range` para baixar o objeto em partes menores. Essas solicitações de intervalos de bytes, também conhecidas como solicitações `Range GET`, melhoram a eficiência de downloads parciais e a recuperação de transferências parciais com falha. 

Ao receber uma solicitação `Range GET`, o CloudFront verifica o cache no local de borda que recebeu a solicitação. Se o cache desse ponto de presença já contiver todo o objeto ou a parte solicitada dele, o CloudFront fornecerá imediatamente o intervalo solicitado do cache.

Se o cache não contiver o intervalo solicitado, o CloudFront encaminhará a solicitação à origem. (Para otimizar a performance, o CloudFront pode solicitar um intervalo maior que o solicitado pelo cliente em `Range GET`.) O que acontece em seguida depende se a origem é compatível ou não com solicitações `Range GET`:
+ **Se a origem for compatível com solicitações `Range GET`**: ele exibirá o intervalo solicitado. O CloudFront fornece o intervalo solicitado e o armazena em cache para futuras solicitações. (O Amazon S3 oferece suporte a solicitações `Range GET`, assim como muitos servidores HTTP.)
+ **Se a origem não for compatível com solicitações `Range GET`**: ele exibirá todo o objeto. O CloudFront atende à solicitação atual enviando o objeto inteiro enquanto também o armazena em cache para solicitações futuras. Depois de armazenar o objeto inteiro em cache em um cache de ponto de presença, o CloudFront responde a novas solicitações `Range GET` fornecendo o intervalo solicitado.

Nos dois casos, o CloudFront começa a fornecer o intervalo ou o objeto solicitado ao usuário final assim que o primeiro byte chega da origem.

**nota**  
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.

Normalmente, o CloudFront segue a especificação RFC do cabeçalho `Range`. No entanto, se os cabeçalhos `Range` não seguirem os seguintes requisitos, o CloudFront retornará o código de status `200` com todo o objeto, em vez do código de status `206` com os intervalos especificados:
+ Os intervalos devem estar indicados em ordem crescente. Por exemplo, `100-200,300-400` é válido; `300-400,100-200` não é válido.
+ Os intervalos não devem se sobrepor. Por exemplo, `100-200,150-250` não é válido.
+ Todas as especificações dos intervalos devem ser válidas. Por exemplo, você não pode especificar um valor negativo como parte de um intervalo.

Para obter mais informações sobre o cabeçalho de solicitação `Range`, consulte [Solicitações de intervalo](https://httpwg.org/specs/rfc7233.html#range.requests) na RFC 7233, ou [Intervalo](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Range) no MDN Web Docs.

## Usar solicitações de intervalo para armazenar objetos grandes em cache
<a name="cache-large-objects-with-range-requests"></a>

Quando o armazenamento em cache está ativado, o CloudFront não recupera nem armazena em cache um objeto maior que 50 GB. Quando uma origem indica que o objeto é maior que isso (no cabeçalho de resposta `Content-Length`), o CloudFront fecha a conexão com a origem e exibe um erro ao visualizador. (Com o armazenamento em cache desativado, o CloudFront pode recuperar um objeto maior que isso da origem e passá-lo para o visualizador. No entanto, o CloudFront não armazena o objeto em cache.)

No entanto, com solicitações de intervalo, é possível usar o CloudFront para armazenar em cache um objeto maior que o [tamanho máximo de arquivo armazenável em cache](cloudfront-limits.md#limits-web-distributions). 

**Example Exemplo**  

1.  Pense em uma origem com um objeto de 100 GB. Com o armazenamento em cache habilitado, o CloudFront não recupera nem armazena em cache um objeto desse tamanho. No entanto, o visualizador pode enviar várias solicitações de intervalo para recuperar esse objeto em partes, sendo cada uma menor que 50 GB.

1. O visualizador pode solicitar o objeto em partes de 20 GB enviando uma solicitação com o cabeçalho `Range: bytes=0-21474836480` para recuperar a primeira parte, outra solicitação com o cabeçalho `Range: bytes=21474836481-42949672960` para recuperar a próxima parte, e assim por diante. 

1. Quando o visualizador tiver recebido todas as partes, ele pode combiná-las para construir o objeto original de 100 GB. 

1. Nesse caso, o CloudFront armazena em cache cada uma das partes de 20 GB do objeto e pode responder a solicitações subsequentes para a mesma parte do cache.

Para uma solicitação de intervalo para um objeto compactado, a solicitação de intervalo de bytes é baseada no tamanho compactado e não no tamanho original do objeto. Consulte mais informações sobre compactação de arquivos em [Fornecer arquivos compactados](ServingCompressedFiles.md).