Resumo

  • A RFC 2049 estabeleceu como um agente conforme deveria agir quando o sistema aberto de tipos chegasse além do seu repertório.
  • Encoding, charset e subtipo não textual desconhecidos recuavam para application/octet-stream; bytes brutos não textuais não deviam ser exibidos como texto.
  • “Safe” descrevia travessia por sistemas RFC 821/822 conformes conhecidos e proteção contra exibição acidental, não segurança do arquivo, identidade, integridade ou resultado.

A regra mais importante dizia como não saber

Novos subtipos apareceriam depois de qualquer cliente. Exigir suporte total faria a conformidade expirar; não definir fallback permitiria que os mesmos bytes fossem impressos, executados ou adivinhados de maneiras diferentes.

A RFC 2049 fixou um piso. O agente produzia MIME-Version: 1.0, reconhecia Content-Transfer-Encoding, removia quoted-printable e base64 e distinguia 7bit, 8bit e binary. Quando o transporte não suportava oito bits ou binário, o remetente codificava e rotulava. O rótulo descrevia uma transformação; não provava que ela havia sido revertida corretamente.

Se o Content-Transfer-Encoding fosse desconhecido, até um Content-Type familiar perdia autoridade. A entidade passava a application/octet-stream: antes de interpretar uma imagem ou texto, era preciso saber quais octetos haviam sido reconstruídos.

O EID 5470 observa que a frase original parece dar Content-Type ao encoding e propõe explicitar “MIME entity with”. Como está Held for Document Update, a proposta esclarece a leitura sem substituir silenciosamente o RFC.

A família superior oferecia só uma pista

Para text, o mínimo era exibir US-ASCII e ao menos informar outros charset. Um subtipo textual desconhecido podia ser mostrado em forma bruta quando o charset fosse conhecido e depois da conversão canônica-local. Charset desconhecido virava octet-stream.

Subtipos desconhecidos de imagem, áudio e vídeo também recuavam. Em application, o agente precisava retirar base64 ou quoted-printable e colocar o resultado em arquivo do usuário. Custódia não era execução. A RFC 2046 advertia que um visualizador geral herda o risco de seu formato mais perigoso.

Multipart tinha fallback próprio: mixed, alternative e digest eram reconhecidos; subtipo multipart desconhecido era mixed. message/rfc822 preservava recursão; message desconhecido virava octet-stream. Content-Type totalmente desconhecido também se tornava octet-stream sem parâmetros. Salvar ou escolher um programa eram opções locais, não autorizações automáticas.

O “seguro” terminava antes da ação

A RFC dizia que dados corretamente marcados eram seguros para envio porque um sistema conforme podia tratá-los como binário indiferenciado e não os despejaria na tela de quem esperava texto. Também eram “safe” perante sistemas conhecidos conformes às RFC 821 e 822: não os quebrariam nem seriam quebrados por eles.

Bytes opacos ainda podem ser hostis. Um handler pode ser vulnerável. Decodificação correta não autentica remetente, integridade, consentimento, renderização ou leitura. Informar um charset ou permitir salvar já podia cumprir o piso. A recusa útil fazia parte da interoperabilidade.

MTA ruim era realidade, não permissão

O texto reconheceu muitos MTA não conformes e amplamente implantados, que alteravam mensagens por convenções locais ou estavam simplesmente quebrados. NUL, TAB, espaço final, linha longa, caracteres não invariantes, ponto isolado e From no início podiam mudar. Base64 respeitava o alfabeto e a linha mais portáveis; quoted-printable não prometia todos os gateways citados.

Mas a lista não recomendava esse comportamento. RFC 821 proibia alteração de whitespace e quebra de linha; eram práticas BAD e invalid. Robustez enfrentava o mundo sem transformar defeito em norma.

A página atual do RFC Editor marca Draft Standard; o documento histórico diz Standards Track, novembro de 1996. Isso comprova publicação, não adoção. O EID 3933 Verified corrige a referência de encoded-word para as regras de RFC 822 e RFC 2047, sem fazer de texto de exibição uma identidade.

O legado foi ignorância disciplinada: decodificar o conhecido, isolar o desconhecido e não chamar posse de bytes de compreensão.

Fontes