Než uvěříte nahrání, zkontrolujte konečnou odpověď FTP
Odpověď 150 znamená, že přenos začal, ne že je soubor uložen. Oddělte místní čtení, oprávnění k uložení, datové spojení a konečnou odpověď.
Klient FTP může přijmout příkaz put dávno předtím, než server soubor obdrží, a právě v mezeře mezi těmito dvěma událostmi žije většina záhad nahrávání. Musí se dokončit čtyři fáze: místní soubor se přečte, server přijme požadavek na uložení, datové spojení přenese bajty a přenos dospěje ke konečné kladné odpovědi. Srovnávat fáze je užitečnější než srovnávat klienty, protože fungující přihlášení i objevený název souboru obojí končí před cílem.
Předběžná odpověď versus konečná odpověď
Pro STOR je odpověď 125 nebo 150 předběžná. Říká, že server je ochoten to zkusit a že se otevírá datové spojení, ne že objekt existuje ve své konečné podobě. Operace se dokončí jen tehdy, když přenos dospěje ke kladné odpovědi o dokončení, obvykle 226 nebo 250, v kontextu této operace.
426 znamená, že přenos byl přerušen, a číslo vytištěné jiným příkazem není výsledkem tohoto nahrávání. Čtěte odpověď, která patří STOR, ne poslední číslo na obrazovce. Pokud klient ukončí činnost dřív, než tato odpověď dorazí, nemáte vůbec žádný důkaz o dokončení.
Řídicí spojení versus datové spojení
Ověřování a výpis adresáře používají řídicí spojení. Bajty používají samostatné datové spojení a jeho koncový bod se vyjednává pro každý přenos. Úspěšné přihlášení prokazuje řídicí cestu a neříká nic o tom, zda je datová adresa z klienta dosažitelná.
Když server nemůže otevřít datové spojení, prozkoumejte vyjednaný koncový bod a povolenou cestu. Pasivní režim stále vyžaduje použitelnou datovou adresu a port a firewall nebo zařízení NAT mezi klientem a serverem může povolit řídicí relaci a zároveň blokovat rozsah dat. Když server místo toho odmítne požadavek na uložení, podívejte se na vzdálený název cesty, oprávnění nebo limity úložiště. Ani jedna z větví se nevysvětluje tím, že se řídicí spojení ověřilo.
FTP přes TLS versus SFTP
FTP přes TLS je stále FTP: dvě spojení, odpovědi FTP a upgrade TLS na každém z nich. SFTP je subsystém SSH s jediným spojením a zcela jinou sadou příkazů. Sdílejí účel a téměř nic jiného, takže diagnostika, která mezi nimi přebíhá, obvykle začíná srovnáním špatných protokolů.
Nevypínejte TLS, aby prostřední pomocník mohl prohlédnout relaci, a neberte selhání SFTP jako problém s odpověďmi FTP. Příručka curl dokumentuje explicitní TLS, pasivní režim a možnosti nahrávání, pokud potřebujete skriptovaný test, a je referencí pro to, co každý přepínač skutečně mění.
Vyberte protokol, který služba skutečně nabízí, dřív než ho začnete ladit. Server, který mluví jen SFTP, nikdy nevydá odpověď 226, ať je klient nakonfigurován jakkoli.
Viditelný název souboru versus uložený objekt
Viditelný název souboru může představovat neúplný objekt, zejména po přerušeném přenosu nebo po klientovi, který předčasně skončil. Požádejte vlastníka služby, aby porovnal velikost zamýšleného testovacího souboru a důvěryhodný hash obsahu s uloženým objektem, když se očekává zachování bajtů.
Binární a ASCII režim jsou další srovnání, které mění výsledek. ASCII režim může překládat konce řádků, takže uložené bajty se liší od místního souboru, i když přenos uspěl. Ponechte binární režim pro kontrolu bajt po bajtu a nepřidávejte převodní volby, aby neúspěšný přenos vypadal jinak.
Běžný STOR může nahradit existující soubor a oprávnění přihlásit se nebo vypsat adresář nezakládá oprávnění vytvořit nebo nahradit objekt v něm. Pro test použijte dříve nepoužitý vzdálený název.
Co porovnat před dalším pokusem
Nepřidávejte, neobnovujte ani neopakujte nahrávání naslepo přes nejistý částečný soubor. Dohodněte se s vlastníkem, zda začít znovu pod novým názvem, použít službou podporovaný postup obnovy, nebo neúspěšný testovací objekt odstranit.
Výsledek zapište jako jedno ze čtyř tvrzení: místní čtení selhalo, uložení bylo odmítnuto, datový přenos byl přerušen, nebo přenos skončil a uložené bajty odpovídaly. Takový záznam je silnější výsledek než měnit shell, VPN a nastavení FTP zároveň, dokud se neobjeví název souboru, a říká dalšímu člověku, kterou fázi prověřit. Uchovejte očištěný text odpovědi u tohoto tvrzení. Pak je opakování rozhodnutí, ne reflex.