Resumo

  • O restart clássico ligava uma posição do remetente a outra do destinatário e podia carregar estado de gravação e conversão, não apenas um contador.
  • REST STREAM depois definiu o valor como octetos omitidos na próxima transferência. O offset continuou sendo coordenada da representação, não nome de uma versão.
  • O exemplo do RFC 3659 só retoma depois de verificar que o arquivo no servidor não mudou. A aceitação de REST não realiza essa verificação.

O número aceito pelo servidor

Uma obtenção para depois de 802816 octetos. O cliente reconecta, escolhe TYPE I, envia REST 802816, recebe 350 e então pede RETR. O restante começa no ponto esperado.

O diálogo confirma que o servidor guardou um parâmetro. Ele não compara o prefixo local com o conteúdo remoto, nem atesta que o caminho ainda designa a mesma versão. Se o arquivo for substituído por outro longo o bastante, a operação pode colar a cauda nova ao começo antigo e ainda terminar normalmente.

Antes de contar, FTP guardava coordenadas locais

RFC 765 já tratava restart como recuperação de erro. REST posicionava o servidor em uma marca e precisava ser seguido pelo comando de serviço interrompido; sozinho, não movimentava dados.

A marca opaca fazia sentido entre máquinas heterogêneas. Byte lógico, byte de transferência e posição no armazenamento podiam divergir. TYPE definia representação, STRU organizava o arquivo e MODE formatava o fluxo. Conversão de caracteres, linhas e registros impedia uma posição universal simples.

RFC 959 manteve Stream, Block e Compressed. Nos dois modos formatados, um marcador podia entrar no fluxo sem parecer conteúdo. O DTP remetente produzia uma informação que saberia reutilizar; o receptor a associava ao seu próprio estado persistido. O acordo não exigia que os dois lados usassem a mesma coordenada.

O checkpoint incluía aquilo que o disco não dizia

RFC 1123 corrigiu a resposta 110: ssss identificava a posição no lado que enviava, e rrrr a posição correspondente no lado que recebia. Como cada cadeia voltava para quem a criou, os formatos podiam continuar locais.

Antes de anunciar rrrr, o receptor deveria forçar os dados anteriores para armazenamento estável. Uma marca que aponta para bytes ainda voláteis não preserva progresso depois de uma falha.

Havia também estado de transformação. Em TYPE A, CR LF da rede pode virar apenas LF no destino. Se a marca surge entre CR e LF, a retomada precisa lembrar que CR já foi visto e descartado. Um offset simples no arquivo não reconstitui essa condição do conversor.

O mesmo RFC definiu 554 quando a posição não pode ser aplicada e 555 quando TYPE ou STRU não combina com o arquivo parcial. Um marcador sintaticamente correto permanece dependente do contexto.

STREAM tornou o ponto uma quantidade

O mecanismo antigo era cuidadoso e pesado. Em 1989, RFC 1123 descreveu Restart, ABOR e Block mode como recursos úteis de robustez que não eram amplamente implementados e deixou REST fora do conjunto mínimo. Essa observação não mede o presente.

No modo Stream, uma marca explícita se confundiria com os dados. RFC 3659 escolheu uma regra simples: o decimal de REST STREAM é a quantidade de octetos que a transferência seguinte não enviará.

O suporte deve aparecer em FEAT, mecanismo definido por RFC 2389. A linha REST STREAM evita adivinhar capacidade; não confirma a permanência do conteúdo atrás de um nome.

Mesmo o contador pertence à representação. No exemplo do RFC 3659, o mesmo texto mede 1830 octetos em TYPE I e 1942 em TYPE A, devido à conversão de fim de linha. A marca situa o fluxo produzido pelos parâmetros atuais, e nem sempre o byte nativo no disco.

Para retomar um envio, SIZE ajuda o cliente a descobrir quanto o servidor recebeu e guardou sob aquela representação. Comprimento não é hash do prefixo.

A condição explícita do exemplo

O exemplo de REST 802816 declara antes que a transferência anterior usou TYPE I e que foi verificado que o arquivo do servidor não mudou. A norma não esconde que identidade é uma precondição externa.

Em RETR, o cliente responde por juntar a nova parte ao arquivo local. Em STOR, o servidor insere dados no objeto existente. O resultado é indefinido quando não se está completando a transferência que falhou, quando a marca não está no fim do conteúdo armazenado ou quando o restante enviado não recupera pelo menos o tamanho anterior. Se APPE for permitido, deve agir como STOR na posição marcada.

350 não encerra a decisão

REST precisa ser o último comando antes da operação de dados. O servidor pode responder 350 e só descobrir no RETR ou STOR que a posição está fora de alcance. Se o comando seguinte não for transmitido, o cliente deve repetir REST em vez de supor que o estado atravessou outras mensagens.

A retomada completa ocupa vários lugares: fragmento local, parâmetros, capacidade, persistência, marca, sequência e prova de que o objeto continua sendo o mesmo. O inteiro é apenas a parte visível desse estado distribuído.

Limites do registro

RFC 765 documenta o início; RFC 959, os modos; RFC 1123, o par de posições e a gravação estável; RFC 2389, a descoberta; RFC 3659, STREAM e SIZE. Eles não oferecem censo atual nem prova de versionamento do servidor. Restart FTP não é autenticação, hash, snapshot ou entrega exatamente uma vez.