1. a라는 File을 가진 A라는 서버와 b라는 File을 가진 B라는 서버가 있다. 2. A, B 두 서버는 각자 가진 File의 목록을 알고 있다. 3. B 서버에 a File을 요청하게 되면, B 서버는 Response Code 301을 주고, Header에 Location Field를 a File의 실제 URI로 세팅하여 응답한다. 4. 대다수의 HTTP Client는 자동적으로 Redirect된 URI로 접속한다.
같은 작업을 ftp에서 하게 될 여유가 없었기 때문에 테스트는 해 보지 못했지만, ftp 메시지를 Packet Dump로 떠서 보게 되면 이런 것을 볼 수 있다.
220 test.com FTP server (Version xxx) ready. USER elenoa 331 Password required for elenoa. PASS password 230 User elenoa logged in, access restrictions apply. REST 1 350 Restarting at 1. Send STORE or RETRIEVE to initiate transfer. REST 0 350 Restarting at 0. Send STORE or RETRIEVE to initiate transfer. SYST 215 UNIX Type: L8 Version: BSD-199506 PWD 257 "/" is current directory. PASV 227 Entering Passive Mode (192,168,0,100,219,74) TYPE I 200 Type set to I. RETR /ip 150 Opening BINARY mode data connection for '/ip' (13 bytes). 226 Transfer complete.
그러니까 PASV 명령이다. 저 명령은 일반적으로 Local Host 상에서 21이 아닌 다른 Data Port를 사용하여 파일을 전송할 수 있게 해 주는데, 특이할만한 것은 IP가 표기된다는 것이다. 저기에 다른 서버의 IP를 표기하게 되면 그 쪽으로 접속해서 데이터를 받아갈 수 있을까?
가능할까?
어제 잠깐 든 생각이지만, 이것으로 예와 같은 시스템은 구현할 수 없을 것 같다. (ㅠ_ㅠ) 왜냐하면 File이 선택되는 시점이 Client쪽에서 PASV 명령을 내리는 시점보다 뒤이기 때문이다. Client를 원하는 방식대로 modify 하지 않는 이상, 일반적인 클라이언트를 대상으로 원하는 Response Code만으로 Target 조절을 할 수 없다면 위 조건은 수행될 수 없을 것 같다.
단 디렉토리를 옮기는 것은 선행될 수 있을 것 같으니, (PASV의 227 Response Code를 가지고 다른 서버로 Redirect가 가능하다면) 현재 위치한 디렉토리 기준으로 다른 서버에서 전송시키는 것은 가능할 것 같다.
또 하나, PASV 명령이 아닌 다른 명령에서 FTP Response Code 227을 리턴하면 어떤 동작을 할지가 궁금하다. .. 라고 해도 간단히 FTP 클라이언트를 분석해 보면 알 수 있는 바, (또, 분석을 해본 결과) 해당사항이 없다고 판단된다. 따라서 기각.