HTTP client

クライアント (Web)

[22] Web におけるクライアントは、鯖に対してサービスの提供を要求するソフトウェア部品です。

仕様書

HTTP クライアント

[3] クライアント (client) は、 一つ以上のHTTP要求を送信するために鯖に接続を確立するプログラムです >>2。

[4] 「利用者エージェント」も同じような定義になっていますが、 利用者エージェントだけでなく串や関門も、 上流に対してはクライアントとみなされるようです。

[24] しかし一般的には串のことを考慮せず、クライアントと利用者エージェントを同義語として使うことが多いようです。 例えば以降で示す WebDAV や OAuth のクライアントが串も含むとは考え難いです。

[43] HTTP/2 のクライアント (client) は、 HTTP/2接続を開始 (initiate) するエンドポイントです >>42。 クライアントは、HTTP要求を送信し、HTTP応答を受信します >>42。 クライアントは、 TCP接続の initiator です >>44。

[45] HTTP の仕様では、 クライアントの挙動が (各プロトコル要素をどう送受信するべきかなど) 断片的に規定されています。

[46] Fetch Standard では、利用者エージェントがどのように要求を生成し、 応答を処理するべきかが規定されています。

[47] その他の HTTP を使ったアプリケーション (WebDAV や OAuth など) では、それぞれの技術を実装するクライアントの挙動が規定されています。

[48] 実用的な汎用HTTPクライアントライブラリーは、次の機能を備える必要がありそうです。

WebDAV クライアント

[23] WebDAV クライアントは、 HTTP 本体に加えて WebDAV を実装するクライアントです。

[12] WebDAV クライアントは、 HTTP/1.1 に適合しなければなりません >>11。

[8] WebDAV クライアントは、 XML 1.0 と XML名前空間 1.0 を実装しなければなりません >>7。

[9] WebDAV クライアントは、応答が整形式でなければ、 要求メソッドが実行されたかどうかを仮定してはならず、 鯖の動作がおかしいと考えるべきです >>7。

[60] WebDAV クライアントは、 WebDAV の XML文書 (死特性以外) の未知の要素や属性、既知ながら想定されていない場所で使われている要素や属性について、 無視して処理しなければなりません >>59。 生特性の値でも原則として無視するべきです >>59。

[10] 処理指令は無視するべきです >>59。

OAuth 1.0 クライアント (消費者)

[15] OAuth 1.0 におけるクライアント (client) は、 OAuth の認証された要求を使うことができる HTTPクライアントです >>13。

[14] 元々は消費者 (consumer) ともいいました >>13。

[16] Webアプリケーションが他の Webアプリケーションの Web API を OAuth により使う場合だと、最初の Webアプリケーションがクライアントに当たります。 両 Webアプリケーションを使う利用者は資源所有者に当たり、 OAuth におけるクライアントで無いので注意が必要です。

[17] OAuth の元の用語では消費者と言っていたので混同の虞は無かったのですが、 IETF で変更されてしまいました。

[27] クライアントは、次のエンドポイントを持つことができます。

OAuth 2.0 クライアント

[19] クライアント (client) は、資源所有者にかわって、その認可に基づき被保護資源要求を行う応用です >>18。

[20] 実装の性質は特に制限されず、鯖、デスクトップ、その他どの装置で実行される応用であっても構いません >>18。

[25] OAuth 2.0 の利用に先立ちクライアントは認可鯖に登録することになっています >>21。

[26] クライアントは、次のエンドポイントを持つことができます。

[28] クライアントは、クライアント型により分類されます。

[30] クライアントの開発者は、フィッシング防止のため、 利用者エージェントを埋め込むか外部のものを利用するかの判断や認可鯖が正しいサーバーか検証する手段の提供など配慮するべきです >>29。

[32] OpenID Connect を実装する OAuth 2.0 クライアントを Relying Party (RP) といいます >>31。 すなわち、 OpenID Provider による末端利用者の認証と claim が必要な応用をいいます >>33。

WebSocket クライアント

[41] WebSocket handshake を開始してWebSocketサーバーと通信するものを、 WebSocketクライアントといいます。

[35] 特定の通信事業者の携帯電話上のブラウザーなど、 管理された環境下で動作するクライアントは、ネットワーク上の他者に WebSocket接続の管理を委託しても構いません。その場合、 携帯電話上のソフトウェアと委託先を含めた全体をクライアントといいます >>34。

[36] 元々 WebSocket は Webブラウザーとサーバーとの通信のためのプロトコルですが、 Webブラウザー以外のクライアントが使うこともできます。

[37] 例えば、Webブラウザーと専用クライアントとで共通した WebSocket を用いたチャットアプリケーションを実装できます。
[38] Webブラウザーで使わないなら、 TCP を普通に使えば良いので、 WebSocket を使う利点は特にありません。 Webブラウザーではセキュリティー上の理由から TCP を著者にそのまま使わせることができないため、 WebSocket が開発されました。

[39] HTML Standard は Webブラウザー向けの WebSocketクライアントとして WebSocket インターフェイスを規定しています。

[40] Webブラウザー以外のクライアントはこの規定に従う必要はありませんが、 実用上、同様のものを (各プログラミング言語やフレームワークなどに合わせた形にして) 実装するのが好ましいと思われます。

実例

[49] HTTPクライアント

関連

[5] クライアントからのHTTP要求を受け取ってHTTP応答をクライアントに送信するものを、 鯖といいます。

[6] クライアントはHTTP要求に関しては送信者、HTTP応答に関しては受信者となります。

歴史

[1] HTTP (RFC 1945 1.2, RFC 2068 1.3, RFC 2616 1.3)
client
An application {1945} program that establishes connections for the purpose of sending requests.
クライアント
要求を送信する目的で接続を確立する応用プログラム。