Iniciante Arquitetura de Sistemas

Como funciona um download

Download é o servidor enviar um arquivo para o cliente. O navegador precisa saber o tipo do arquivo, se deve abrir ou salvar, e como lidar com arquivos grandes ou conexões que caem. Tudo isso vai nos headers HTTP.

Content-Type: o que é o arquivo

O header Content-Type diz o formato. Assim o navegador sabe se abre uma imagem, exibe um PDF ou apenas baixa:

HTTP/1.1 200 OK
Content-Type: application/pdf

Se o tipo for genérico (application/octet-stream), o navegador entende que é para baixar.

Content-Disposition: abrir ou salvar

Esse header controla se o arquivo é exibido na aba (inline) ou baixado (attachment), e qual nome usar ao salvar:

Content-Disposition: attachment; filename="relatorio.pdf"

Com attachment, o navegador abre a janela de “salvar como”. Com inline, tenta mostrar na tela.

Range requests: baixar pedaços

Para arquivos grandes, o cliente pode pedir só uma parte usando o header Range. Útil para vídeos (pular para um trecho) e para retomar downloads.

GET /video.mp4 HTTP/1.1
Range: bytes=0-1023

O servidor responde com status 206 e só aquele pedaço:

HTTP/1.1 206 Partial Content
Content-Range: bytes 0-1023/50000
Content-Length: 1024

Para o servidor avisar que aceita ranges, ele envia:

Accept-Ranges: bytes

Download resumível

Se a conexão cai no meio, o cliente não precisa recomeçar do zero. Ele pede a partir do byte onde parou:

Range: bytes=20000-
Baixou 20 KB de 50 KB -> conexão cai
Retoma: "me manda de 20000 em diante"
Servidor envia o resto

Isso é o que torna downloads grandes confiáveis.

Streaming x download

Os mesmos mecanismos servem para streaming de vídeo: o player pede ranges conforme você assiste, sem baixar tudo antes.

Resumo

Content-Type        -> o que é o arquivo
Content-Disposition -> abrir ou salvar, qual nome
Accept-Ranges       -> servidor aceita pedaços
Range / 206         -> baixar parte / retomar

Dominando esses headers, você entrega arquivos de qualquer tamanho de forma eficiente e resistente a quedas.