Немного устарело. Стрим сейчас поглощен МТС, но политика фильтрации трафика осталась той же. Я сам сейчас Стримом не пользуюсь, пользуюсь Корбиной – сейчас тоже поглощена Билайном, но тотальной фильтрации трафика как на Стриме у них нет, да и скорость существенно выше. Сделать полценный FTP, имея доступ в Интернет по Стриму, невозможно. Стандартный 21 порт у Стрима не доступен извне. Можно выбрать другой порт, но это не поможет.
Дело в протоколе FTP. Сервер FTP может работать в активном или пассивном режимах. В пассивном режиме работает нормально. Но режим работы работы задает клиент. В большинстве FTP клиентов по умолчанию используется активный режим, а многие клиенты в пассивном не работают вообще. Таким образом пассивный режим нельзя считать полноценным.
В активном режиме клиент открывает у себя на прослушивание порт и посылает серверу команду PORT со своим адресом и номером порта. Сервер, получив команду PORT, пытается при первой команде обмена информацией (LIST, GET и др.) установить исходящее соединение с клиентом (открыть порт на стороне клиента). Если клиент не за NAT, Proxy, Firewall (что сейчас редкость), то ему это удается и дальше все идет нормально. Но, как правило во всех вышеприведенных случаях возникают затруднения: 1 – клиент не знает своего внешнего адреса и сообщает серверу внутренний. Это еще можно попытаться побороть, заставив сервер не обращать внимания на адрес в команде PORT. Но есть более сильное затруднение: 2 – не все порты клиента доступны извне, а клиент выбирает порт, не глядя какие доступны, какие нет. Это делает практически невозможным работу FTP с такими клиентами (а их сейчас большинство). Остался последний вопрос – как же у таких клиентов работает FTP по стандарному 21 порту. Очень просто – как правило оборудование клиента “знает” заранее о существовании FTP протокола на стандартном 21 порту и производит необходимые корректировки. На на Стриме использовать стандартный порт для FTP невозможно, а при использовании других портов оборудование клиента не сможет производить корректировки для обеспечения доступности порта клиента извне.
В пассивном режиме сервер, получив команду PASV, открывает у себя порт на прослушивание и передает клиенту свой адрес и номер порта. Сервер можно заставить: 1 – узнать свой внешний адрес, 2 – выбирать номера портов не произвольно, а из заранее заданного списка. Оборудование также можно настроить на возможность доступа извне ко всем портам из списка. Таким образом в пассивном режиме FTP может работать на Стриме. Но так как у большинства посетителей FTP-клиенты настроены на активный режим, это не полноценная работа.
На последок разберем, как передаюся файлы при помощи HTTP. Процедура передачи выглядит так:
- В заголовок ответа добавить строку:
"application/download"
"Content-Disposition: attachment; filename=FileName"
FileName – под каким именем браузер сохранит получаемый файл.
Получив такой ответ, браузер выведет окно с предложением сохранить файл. - Для использования докачки необходимо:
- Добавить в заголовок ответа строки:
"Accept-Ranges=bytes"
- анализировать запросы на предмет наличия строки:
"Range: bytes a-b/c"
a – с какой позиции файла начать передавать (начиная от нулевой)
b – на какой закончить
с – сколько всего данных в файле
Все значения в байтах. Строка запроса может содержать и один параметр. - Перейти на указанную позицию в файле и ответить строками:
"HTTP/1.1 206 Partial Content"
Отвечает сервер. Но ему надо передать Status Code.
"Content-Range: bytes a-b/c"
Все значения такие же. - Cкорректировать (её заполняет сервер) строку:
"Content-Length: d"
d = a – b
- Добавить в заголовок ответа строки: