Resumo

  • RFC 1952 define um arquivo gzip como uma sequência de membros, cada qual com cabeçalho, blocos comprimidos e trailer CRC32/ISIZE próprios.
  • Um novo membro pode ser anexado sem alterar os anteriores, ampliando a saída lógica; isso não oferece índice, acesso aleatório nem compressão ótima entre as partes.
  • Campos opcionais são descrições sem autenticação. CRC32 detecta corrupção e ISIZE registra o tamanho do membro módulo 2^32, não a identidade do escritor nem o comprimento absoluto do conjunto.

Quando preservar o prefixo não preserva o significado inteiro

É possível comparar o hash do primeiro gigabyte de um arquivo hoje e amanhã e obter o mesmo resultado. Mesmo assim, amanhã a descompactação pode produzir mais dados. O motivo é um novo membro escrito depois daquele prefixo, válido por conta própria e lido em sequência.

RFC 1952 não trata isso como tolerância acidental. O arquivo gzip consiste em membros consecutivos, sem um diretório geral entre eles. Cada membro contém um começo reconhecível, seus blocos comprimidos e um trailer. Fechar a unidade anterior cria um ponto seguro para iniciar a próxima.

O registro do RFC Editor data o texto de P. Deutsch de maio de 1996 e o classifica como Informational. Ele especifica um formato, não é um Internet Standard da trilha normativa e não comprova comportamento uniforme em toda implementação futura.

Os objetivos eram portabilidade entre máquinas e sistemas, processamento em fluxo com armazenamento intermediário limitado, implementação sem patentes e compatibilidade com gzip. Acesso aleatório não fazia parte da promessa. Uma sequência bem delimitada continua sendo uma sequência a percorrer.

Metadado transportado não vira procedência

ID1 e ID2 identificam gzip. CM=8 indica DEFLATE. FLG anuncia campos opcionais, e bits reservados devem estar zerados. São condições necessárias para produtores e leitores encontrarem a mesma fronteira.

MTIME, FNAME, FCOMMENT, FEXTRA e FTEXT carregam informações menos autoritativas. Podem sugerir data, nome original, comentário, extensão ou natureza textual. O leitor precisa saber saltá-las mesmo sem usar seu conteúdo. MTIME zero significa ausência de tempo disponível, e o campo OS pode ser ignorado.

Um nome no cabeçalho não autentica quem escreveu. Um comentário pode ser útil em um fluxo controlado, mas não é uma assinatura. Uma extensão com tamanho explícito torna o desconhecido navegável; não o torna verdadeiro.

FHCRC, quando presente, usa os 16 bits inferiores do CRC32 do cabeçalho anterior. O CRC32 do trailer cobre os dados descompactados daquele membro. ISIZE guarda o tamanho original módulo 2^32. Cada medida tem escopo próprio.

A verificação termina na unidade que a carrega

CRC32 torna muita corrupção acidental observável. Não impede que alguém monte deliberadamente um membro diferente com um controle correto. O resultado confirma coerência, não identidade, autorização ou cadeia de custódia.

ISIZE também não é um tamanho total ilimitado. Ele volta a zero em ciclos de 2^32 e descreve apenas a entrada do seu membro. Em um arquivo concatenado, o total depende de processar todas as unidades e somar as saídas.

A carga comprimida pertence a outra camada. RFC 1951 define DEFLATE. RFC 1950 envolve DEFLATE em zlib, com cabeçalho próprio e Adler-32. Mais tarde, RFC 6713 registrou application/gzip e application/zlib, distinguindo o cabeçalho e trailer de arquivo do gzip do formato de fluxo zlib.

Essa separação deixa cada acordo no nível certo. O algoritmo não restaura nomes; o invólucro não redefine os códigos comprimidos. Compatibilidade pode ser testada por fronteira.

O manual mostra duas visões corretas e diferentes

O manual GNU gzip documenta que arquivos comprimidos podem ser concatenados e gunzip extrai todos os membros. Também diz que comprimir as entradas juntas costuma render melhor e que --list mostra tamanho descompactado e CRC apenas do último membro quando há vários.

Logo, descompactar e listar não têm a mesma cobertura. Um inventário que transforma o resumo do último membro em propriedade do arquivo inteiro cria certeza indevida sem que a ferramenta tenha mentido.

RFC 9110 mantém gzip como codificação de conteúdo HTTP por referência a RFC 1952. Isso define o termo do protocolo. Não prova que proxy, cliente e scanner atravessem sequências de membros de modo idêntico; tal afirmação exigiria teste operacional.

Uma especificação mínima pode ser precisa

Running-Code Primacy separa documento, implementação e uso. O RFC estabelece a estrutura; o manual fornece evidência de um programa mantido. Não há aqui uma pesquisa universal de adoção.

Minimum Initial Specification ilumina o acordo: identificação, método, tamanhos opcionais, bits reservados e trailer precisam ser determinísticos. Exibir comentário ou aplicar dica de OS pode permanecer local.

Reality Layers distingue o símbolo “um arquivo” da operação composta por vários inícios e fechamentos. O nome único é conveniente; a sequência interna é a realidade que o leitor executa.