ネットワーク用語 (WinHTTP)
Microsoft Windows HTTP Services (WinHTTP) を使用するアプリケーションを開発する場合は、一般的なネットワークと特に HTTP プロトコルに関連する次の概念と用語を理解することが重要です。
HTTP トランザクション
HTTP トランザクションを使用する場合は、ネットワーク上の他の場所にある別のコンピューターと情報を交換します。 交換される情報は、テキストまたはマルチメディアを含むファイル、またはデータベース クエリの結果である可能性があります。 ネットワーク経由で交換される情報の一部をリソースと呼 びます。 通常、リソースを送信するコンピューターはサーバーであり、そのリソースを受け取るコンピューターはクライアントです。 ただし、クライアントがサーバーにデータをポストすることもできます。 HTTP トランザクションに中間層サーバーが含まれる場合があります。 中間層サーバーは、他のサーバーから複数のリソースを収集し、その情報を 1 つのリソースにコンパイルして、そのリソースをクライアントに送信します。
HTTP プロトコルを使用してリソースを取得するプロセスでは、クライアントとサーバーの間で一連のメッセージを交換する必要があります。 クライアントは、リソースを要求するメッセージを送信してトランザクションを開始します。 このメッセージは HTTP 要求と呼ばれるか、単なる要求と呼ばれることもあります。 HTTP 要求は、次のコンポーネントで構成されます。
- メソッド、Uniform Resource Identifier (URI)、プロトコル のバージョン番号
- ヘッダー
- エンティティ本文
サーバーが要求を受信すると、クライアントにメッセージを送信して応答します。 サーバーによって送信されるメッセージは、HTTP 応答と呼ばれます。 HTTP 応答は、次のコンポーネントで構成されます。
- プロトコルのバージョン番号、状態コード、状態テキスト
- ヘッダー
- エンティティ本文
応答は、要求を処理できないことを示すか、要求された情報を提供します。 要求の種類によっては、リソースに関する情報 (サイズや種類など) を指定することも、リソース自体の一部またはすべてを指定することもできます。 要求されたリソースの一部またはすべてを含む応答の部分は、"応答データ" または "エンティティ本文" と呼ばれ、すべての応答データを受信するまで応答は完了しません。
HTTP トランザクションと HTTP プロトコルの詳細については、「 RFC 2616、ハイパーテキスト転送プロトコル — HTTP/1.1」を参照してください。
プロキシ サーバー
クライアントから送信された要求は最終的にターゲット サーバーによって受信されますが、トランザクションが最初にプロキシ サーバーを通過する場合があります。 プロキシは要求をインターセプトし、要求をサーバーに送信する前に変更することもできます。 サーバーが応答すると、応答はプロキシを通過してからクライアントに転送されます。 プロキシは、この応答のヘッダーを変更できます。
ネットワーク トランザクションをインターセプトして変換することで、プロキシは次のことができます。
- 潜在的に危険なトランザクションを監視してクライアントを保護します。
- クライアント ソフトウェアによって実装されていない可能性があるプロトコルを使用して、クライアントが通信できるようにします。
- プライベート ネットワークとパブリック ネットワークの間のゲートウェイとして機能します。
WinHTTP API には、HTTP トランザクションをインターセプトするすべてのプロキシ サーバーに関する情報を WinHTTP に提供できるプロキシ構成ツールが含まれています。 プロキシ構成ツールの使用方法については、「プロキシ構成ツール ProxyCfg.exe」を参照してください。
同期モードと非同期モード
WinHTTP を使用してネットワーク経由でリソースを取得するには、同期モデルと非同期モデルの 2 つのプログラミング モデルがあります。 同期モデルでは、関数またはメソッドの呼び出しは、要求された操作が完了するまで、またはエラーが発生するまで終了しません。 たとえば、アプリケーションが WinHTTP を使用してリソースを同期的に要求した場合、要求されたデータが受信されるまで、次の手順は続行されません。
一方、非同期モデルを使用すると、アプリケーションはリソースの取得を待機しながら、他のタスクを実行できます。 別の WinHTTP 関数またはメソッドが呼び出され、前の操作が完了していない場合、関数はエラーを返します。 WinHTTP を非同期的に使用する場合、コンポーネント オブジェクト モデル (COM) イベントとコールバックを使用して、HTTP 操作の進行状況をアプリケーションに通知できます。
認証
認証とは、リソースへのアクセスを許可する前に、HTTP プロキシまたは HTTP サーバーがユーザーのログイン情報を検証するプロセスです。 インターネットでは、さまざまな認証スキームが使用されます。 通常、ユーザーの名前とパスワードは承認されたリストと比較され、システムが一致を検出すると、ユーザーのアクセス許可リストで指定されたエクステントへのアクセスが許可されます。
WinHTTP 関数では、HTTP セッションのサーバー認証とプロキシ認証の両方がサポートされます。 WinHTTP では、基本、ダイジェスト ( RFC 2617 を参照)、 NTLM 認証、ネゴシエート/ Kerberos、Microsoft Passport 1.4 の認証スキームがサポートされています。 認証の詳細と、Microsoft Visual C++ アプリケーションでの認証の使用例については、「WinHTTP での認証」を参照してください。
基本認証とパスポート認証に関するセキュリティに関する考慮事項については、「 WinHTTP セキュリティに関する考慮事項」を参照してください。