FTP over HTTP

FTP over HTTP

[1] FTP を使う場合に、クライアントの間の通信に HTTP を用いることがあります。 これはしばしば FTP over HTTP と呼ばれています。は、 HTTPFTPアプリケーション層プロトコル翻訳器 (関門) として動作します。

呼称

[30] FTP over HTTP が最も普及した名称とみられます。 正式名称といえるものはなく、 特別な名称なくふわっと使われていることも多いです。

[2] クライアントの間は FTP ではなく HTTP なので、 厳密には「over」というべきではないかもしれませんが、この名前が広く慣用されており、 他により適切で普及した名称もありません。

仕様書

[31] FTP over HTTP の挙動や応用を明確に規定する仕様書は見当たりません。 平成時代Webブラウザーに遍く実装された事実上の標準でした。

プロトコル

[8] 要求URL には ftp: URL scheme絶対URL を使います >>5, >>7

[9] Host: ヘッダーには要求URLホストの部分を使います >>5, >>7FTP既定のポート番号である 21 を明示しなければならない >>7 (そうしないと HTTP既定のポート番号である 80) と説明するものもあれば、 特に言及のない説明もあり、どう解釈されるのか定かではありません。実装により異なるのかもしれません。

[18] HTTP 本体仕様によれば絶対URL要求URLとする場合でも、 Host: ヘッダーは必須です。しかしサーバー絶対URL を採用し、 Host: ヘッダーは無視しなければならないことになっています。 (実効要求URL参照。)

[10] 認証は、HTTP 基本認証の他、要求URLuserinfo 部分の指定でも良いようです >>5。しかし認証を扱えないものや記号が含まれると正しく処理できないもの (クライアント) など、相互運用性は高くないようです >>7

[12] GET によりファイルをダウンロードできます >>5, >>11

[13] 実装によっては PUT によりファイルをアップロードできます >>5

[24] ディレクトリーGET すると、 Webブラウザーからの直接アクセスでディレクトリーを開いた場合のように、 ディレクトリー内のファイル一覧のHTML文書を返します。

[32] そのような HTTP要求を受信したプロキシは、 FTP を使って指定された上流 FTP サーバーにアクセスすることもできますし、 HTTP のまま上流 HTTP プロキシに転送することもできます。 (し、エラーとして拒絶することもできます。)

実装

[3] Web 系の利用者エージェントFTP に対応するものの多くは、 本方式にも対応しているようです。 ただし Webブラウザーからは FTP 対応全体が削除されつづあります。 ftp:

[29] 昔ながらの中継用のプロキシや、 セキュリティー系のプロキシなどに対応例がみられます。

[4] FTP クライアントは本方式に対応していないものが多いようです。

メモ

[33] クライアントにとっては HTTP さえ実装すれば FTP に対応する必要がなくなるので便利なのですが、 FTP over HTTP プロキシが手近に利用できるとは限らないので、 結局 FTP も実装しないと使い物にならないという不便があります。

FTP

[16] >>15 は逆に FTP の要求を受信して HTTP に変換して処理するようです。

[17] gopher:wais: も同じようにまで HTTP で通信していたかもしれません。

[19] Issue 11227 - chromium - FTP not working behind (HTTP) Proxy - An open-source project to help move the web forward. - Google Project Hosting ( 版) https://code.google.com/p/chromium/issues/detail?id=11227

[20] 112507 – not asked for password when ftp://user@host through a proxy server ( 版) https://bugzilla.mozilla.org/show_bug.cgi?id=112507

[22] 195242 – Chimera sends HTTP commands to FTP proxy when accessing FTP URLs ( 版) https://bugzilla.mozilla.org/show_bug.cgi?id=195242

Fetch supports 8 different FTP-proxy

protocols. ncftp supports 7. That's probably part of the reason IE simply uses

the HTTP proxy and Safari punts on ftp URLs.

[23] HTTP:FTP over HTTPでURLにパスワードを指定できない | サポート Q&A:トレンドマイクロ (Trend Micro - Core Web Development MUC ;-) 著, 版) http://esupport.trendmicro.com/solution/ja-jp/1305963.aspx

FTP over HTTPのパスワード設定でユーザ名とパスワードを設定していた場合に、ftp://user:pass@ftp.abc.com/形式でのアクセスをした際にuser,passではなく設定ファイルにて設定されたユーザー名、パスワードでのアクセスになってしまう。

ver. 3.6 Patch1での既知問題となっております。

本問題に関しましてはver. 3.6 Patch2にて解決しております。

[25] lftp.1 ( ()) http://lftp.yar.ru/lftp-man.html

HFTP is ftp-over-http-proxy protocol. It can be used

automatically instead of FTP if ftp:proxy is set to `http://proxy[:port]'.

[26] Issue 11227 - chromium - FTP not working behind (HTTP) Proxy - Monorail ( ()) https://bugs.chromium.org/p/chromium/issues/detail?id=11227

[27] Issue 310456 - chromium - FTP not working behind Authenticating HTTP Proxy using NTLM (Forefront TMG) - Monorail ( ()) https://bugs.chromium.org/p/chromium/issues/detail?id=310456

[28] Deprecate FTP support - Chrome Platform Status () https://chromestatus.com/feature/6246151319715840

A bug in Google Chrome 74+ resulted in dropping support for accessing FTP URLs over HTTP proxies. Proxy support for FTP was removed entirely in Google Chrome 76.