Перевірте останню відповідь FTP, перш ніж довіряти завантаженню
Відповідь 150 означає, що передавання почалося, а не що файл збережено. Розділіть локальне читання, дозвіл на збереження, з'єднання даних і останню відповідь.
Клієнт FTP може прийняти команду put задовго до того, як сервер отримає файл, і саме в проміжку між цими двома подіями живе більшість загадок завантаження. Мають завершитися чотири етапи: локальний файл прочитано, сервер прийняв запит на збереження, з'єднання даних перенесло байти, а передавання дійшло до остаточної позитивної відповіді. Порівнювати етапи корисніше, ніж порівнювати клієнтів, бо успішний вхід і поява імені файлу обидва зупиняються до фінішу.
Попередня та остаточна відповідь
Для STOR відповідь 125 або 150 є попередньою. Вона каже, що сервер готовий спробувати і що відкривається з'єднання даних, а не що об'єкт існує в остаточному вигляді. Операція завершена лише тоді, коли передавання досягає позитивної відповіді про завершення, зазвичай 226 або 250, у контексті цієї операції.
426 означає, що передавання перервано, а номер, надрукований іншою командою, не є результатом цього завантаження. Читайте відповідь, що належить цьому STOR, а не останнє число на екрані. Якщо клієнт завершується до надходження цієї відповіді, у вас немає жодного доказу завершення.
Керівне з'єднання та з'єднання даних
Автентифікація та список каталогу використовують керівне з'єднання. Байти використовують окреме з'єднання даних, і його кінцева точка узгоджується для кожного передавання. Успішний вхід доводить керівний шлях і нічого не каже про те, чи доступна адреса даних із клієнта.
Коли сервер не може відкрити з'єднання даних, дослідіть узгоджену кінцеву точку та дозволений шлях. Пасивний режим усе одно потребує придатної адреси даних і порту, а брандмауер або пристрій NAT між клієнтом і сервером може пропускати керівний сеанс, блокуючи діапазон даних. Коли сервер натомість відхиляє запит на збереження, подивіться на віддалене ім'я шляху, дозволи або обмеження сховища. Жодну з цих гілок не пояснює те, що керівне з'єднання пройшло автентифікацію.
FTP через TLS і SFTP
FTP через TLS — це все ще FTP: два з'єднання, відповіді FTP і оновлення TLS на кожному. SFTP — це підсистема SSH з одним з'єднанням і цілком іншим набором команд. Вони поділяють мету і майже нічого більше, тому діагностика, що переходить між ними, зазвичай починається з порівняння не тих журналів.
Не вимикайте TLS, щоб проміжний помічник міг оглянути сеанс, і не вважайте збій SFTP проблемою відповіді FTP. посібник curl описує явний TLS, пасивний режим і параметри завантаження, якщо потрібен тест зі скрипту, і є довідкою про те, що насправді змінює кожен прапорець.
Виберіть протокол, який служба справді пропонує, перш ніж її налагоджувати. Сервер, що говорить лише SFTP, ніколи не видасть відповідь 226, хоч би як був налаштований клієнт.
Видиме ім'я файлу та збережений об'єкт
Видиме ім'я файлу може означати неповний об'єкт, особливо після перерваного передавання або клієнта, що завершився зарано. Попросіть власника служби порівняти розмір передбачуваного тестового файлу та довірений хеш вмісту зі збереженим об'єктом, коли очікується збереження байтів.
Двійковий режим і ASCII — ще одне порівняння, що змінює результат. Режим ASCII може перетворювати закінчення рядків, тому збережені байти відрізняються від локального файлу, навіть якщо передавання вдалося. Залишайте двійковий режим для перевірки байт за байтом і не додавайте параметри перетворення, щоб невдале передавання виглядало інакше.
Звичайний STOR може замінити наявний файл, а дозвіл на вхід або перегляд каталогу не дає дозволу створювати чи замінювати в ньому об'єкт. Для тесту використайте раніше не використане віддалене ім'я.
Що порівняти перед повторною спробою
Не додавайте, не відновлюйте і не повторюйте завантаження навмання поверх невизначеного часткового файлу. Домовтеся з власником, чи починати заново під новим ім'ям, використати підтримувану службою процедуру відновлення або видалити невдалий тестовий об'єкт.
Запишіть результат як одне з чотирьох тверджень: локальне читання не вдалося, у збереженні відмовлено, передавання даних перервано, або передавання завершилося і збережені байти збіглися. Такий запис — сильніший результат, ніж одночасна зміна оболонки, VPN і налаштувань FTP, доки не з'явиться ім'я файлу, і він підказує наступній людині, який етап перевіряти. Збережіть очищений текст відповіді разом із цим твердженням. Тоді повторна спроба — рішення, а не рефлекс.