I've been interested in relaying FTP over HTTP (or HTTPS), or
using a HTTP (HTTPS) server just to provide a file transfer
service as a FTP server does. HTTP is a protocol that is easily
routed (or proxied), encrypted, or filtered on the application layer.
Thus it must be conveniently used to transfer files, for mirroring
or so, over a virtual network constructed on the application layer.
But the problem is how to deal "directory". For example, as long
as I know, there is no standardized format of the representation
of the content of directory in HTTP, as defined in FTP by the
response format of the MLSD command.
Since I'm reminded on this issue, I tried to realize it in
DeleGate/9.9.8-pre2. A HTTP server by DeleGate with
SERVER="ftpxhttp" with MOUNT="/* /*" (origin HTTP server) or
with MOUNT="/* ftp://ftpserver/*" (FTP/HTTP gateway) interprets
a special URL as follows:
The HTTP (FTPxHTTP) server respond with the data representing a
content of directory in the format that is compatible with the one
from FTP servers for a FTP command.
On the other hand, a FTP server by DeleGate with SERVER="ftp" with
MOUNT="/* ftpxhttp://fxhserver/*" translates FTP request to HTTP
request in URL as above, corresponding to each FTP commands (LIST,
NLIST, MLST and MLSD).
I confirmed it works using FTP clients including the ftp command
and Firefox, with the following configuration.
delegated -P9980 SERVER=ftpxhttp MOUNT="/* /*"
delegated -P9980 SERVER=ftpxhttp MOUNT="/* ftp://ftpserver/*"
delegated -P9921 SERVER=ftp MOUNT="/* ftpxhttp://delegate:9980/*"
ftp localhost 9921
> ls -l
> ls -lt
In message <_A4800@delegate-en.ML_> on 05/07/10(02:06:46)
you David Fogarty <email@example.com> wrote:
|Thank you for your quick and detailed response. You confirmed what I
|suspected. I will look for other means of accomplishing my goals.
|Senior System Administrator
|On Thu, 6 May 2010, Yutaka Sato wrote:
|> Hi Dave,
|> In message <_A4798@delegate-en.ML_> on 05/06/10(09:28:20)
|> you David Fogarty <firstname.lastname@example.org> wrote:
|> |I'm trying to use delegate to create an FTP front-end to HTTP on the
|> |back-end. Eventually, I'd like to do authenticated and anonymous GET and
|> |PUT. So far, I am able to put HTTP in front of FTP, but not the other way
|> |around. Is this even possible with delegate?
|> |delegated -v -P:8021 SERVER=http MOUNT="/web/* http://127.0.0.1/*" MOUNT="/ftp/* ftp://127.0.0.1/*"
|> |delegated -v -P:88 SERVER=ftp MOUNT="/web/* http://127.0.0.1/*" MOUNT="/ftp/* ftp://127.0.0.1/*"
|> It is interesting but not possible in the current implementation of
|> DeleGate. In the protocol level, it is easy to map a stateful protocol
|> as FTP (on client-side) to a stateless protocol as HTTP (on server-side).
|> What is difficult is mapping the structure of resource tree, or, directory
|> tree. For example, a URL as http://server/path1/path2/ might not mean
|> "path2 is a directory under the directory path1" as in FTP.
|> Also the format and the content of the response data for
|> http://server/path1/ is not defined and can vary so widely.
|> Thus it is not so easy to provide a HTTP server to a FTP client.
|> If what you need is just mapping a HTTP URL to a FTP path and returning
|> the content through without conversion (as HTML/HTTP to a file list/FTP),
|> it is easy to extend DeleGate to do so. But if you need to see HTML as
|> if it is a directory, the implementation will be fairly difficult.
|> 9 9 Yutaka Sato <email@example.com> http://delegate.org/y.sato/
|> ( ~ ) National Institute of Advanced Industrial Science and Technology
|> _< >_ 1-1-4 Umezono, Tsukuba, Ibaraki, 305-8568 Japan
|> Do the more with the less -- B. Fuller
9 9 Yutaka Sato <firstname.lastname@example.org> http://delegate.org/y.sato/
( ~ ) National Institute of Advanced Industrial Science and Technology
_< >_ 1-1-4 Umezono, Tsukuba, Ibaraki, 305-8568 Japan
Do the more with the less -- B. Fuller