edtFTPnet/Free - Open-source FTP component for .NET | Download
 HTTP

The HTTP protocol defines a special command called CONNECT which allows the proxying of HTTP requests.

The client connects to the HTTP server and sends a CONNECT command to ask the server to establish a connection to another host (usually on the other side of the firewall).

Essentially, a tunnel is set up between the client and the remote host via the HTTP server, which merely acts as a data conduit.

The HTTP protocol does not support the concept of a client being able to request for the HTTP server to listen for incoming connections, hence HTTP proxies cannot be used for active mode FTP transfers (where the FTP server must connect back to the client).