WinHTTP について

Important

HTTP スタックWindows適切な選択

シナリオ 推奨される API
サービス、デーモン、またはサーバー側コードをWindowsする WinHTTP — サービス用に設計されています。は、偽装、セッションの分離をサポートします
インターネット オプション (IE) プロキシ設定、Cookie、または資格情報プロンプトを必要とするデスクトップ アプリ WinINet — ユーザーのインターネット オプション構成を自動的に継承します
モダン C++ アプリ (UWP またはデスクトップ) Windows。Web.Http (C++/WinRT) - 最新の非同期優先の最新 TLS サポート
.NET アプリケーション System.Net.Http.HttpClient — マネージド、クロスプラットフォーム、プールされた接続
クロスプラットフォーム C/C++ libcurl またはプラットフォーム HTTP ライブラリ ( Windows固有ではありません)

WinINet との主な違い: WinHTTP は、Cookie、キャッシュ、または資格情報をユーザーのブラウザーと共有 しません 。 UI プロンプトはありません。 サービス アカウントと偽装での実行がサポートされます。 完全な機能の比較については、 WinINet と WinHTTP を参照してください。

Note

セキュリティの既定値 — WinHTTP は、TLS バージョン ネゴシエーションの OS Schannel 構成に従います。 常にサーバー証明書を検証します。運用環境の証明書エラーを無視するように WINHTTP_OPTION_SECURITY_FLAGS を設定しないでください。 TLS の構成については、「 WinHTTP のセキュリティに関する考慮事項」を参照してください。

Note

Windows 10以降のアプリ コンテナーとシステム サービスの場合、バージョン 1709、HTTP/2 (RFC7540を参照) は既定でオンになっています。

Microsoft Windows HTTP サービス (WinHTTP) は、サーバーでサポートされる、HTTP/2 および 1.1 インターネット プロトコルへの高度なインターフェイスを提供します。 WinHTTP は、主に HTTP サーバーと通信するサーバー アプリケーションによってサーバー ベースのシナリオで使用されるように設計されています。

WinINet は、対話型デスクトップ アプリケーション用の HTTP クライアント プラットフォームとして設計されました。 WinINet には、ユーザー資格情報の収集などの一部の操作のユーザー インターフェイスが表示されます。 ただし、WinHTTP はこれらの操作をプログラムで処理します。 HTTP クライアント サービスを必要とするサーバー アプリケーションでは、WinINet ではなく WinHTTP を使用する必要があります。 詳細については、「 WinINet アプリケーションを WinHTTP に移植する」を参照してください

WinHTTP は、システム サービスおよび HTTP ベースのクライアント アプリケーションでも使用するように設計されています。 ただし、FTP プロトコル機能、Cookie 永続化、キャッシュ、資格情報ダイアログの自動処理、Internet Explorer互換性、またはダウンレベル プラットフォームのサポートを必要とするシングル ユーザー アプリケーションでは、WinINet の使用を検討する必要があります。

このインターフェイスには、WinHTTP アプリケーション プログラミング インターフェイス (API) を使用するか、IWinHttpRequest インターフェイスと IWinHttpRequestEvents インターフェイスを使用して、C/C++ からアクセスできます。 WinHTTP には、スクリプトからアクセスし、WinHTTP オブジェクトを介してMicrosoft Visual Basicすることもできます。 個々の関数の詳細と説明については、特定の言語の WinHTTP 関数リファレンスを参照してください。

Windows 8以降、WinHTTP は、WinHttpWebSocketSendWinHttpWebSocketReceive などの WebSocket プロトコル l を使用して接続を有効にする API を提供します。

Caution

WinHTTP は、非同期完了コールバック中を除いて再入可能ではありません。 つまり、スレッドは WinHttpSendRequest、WinHttpReceiveResponse、WinHttpQueryDataAvailable、WinHttpSendData、WinHttpWriteData などの WinHTTP 関数のいずれかに対して保留中の呼び出しを持ちますが、最初の呼び出しが完了するまで WinHTTP を 2 回目に呼び出すことはありません。 2 回目の呼び出しが発生する可能性があるシナリオの 1 つは、アプリケーションが WinHTTP を呼び出すスレッドに非同期プロシージャ コール (APC) をキューに入れ、WinHTTP が内部的に警告可能な待機を実行する場合、APC を実行できることです。 APC ルーチンが WinHTTP の呼び出しも行われると、WinHTTP API が再入力され、WinHTTP の内部状態が破損する可能性があります。

WinHTTP 5.1 の機能

WinHTTP のバージョン 5.1 では、次の機能が追加されました。

  • IPv6 のサポート。
  • AutoProxy 機能。
  • キープアライブ (永続的) 接続とセッション Cookie のサポートを含む HTTP/1.0 プロトコル。
  • HTTP/1.1 チャンク転送による HTTP 応答のサポート。
  • セッション間での匿名接続のキープアライブ プール。
  • クライアント証明書を含む Ssl (Secure Sockets Layer) 機能。 サポートされている SSL プロトコルには、SSL 2.0、SSL 3.0、トランスポート層セキュリティ (TLS) 1.0 が含まれます。
  • Microsoft Passport 1.4 および Negotiate/Kerberos パッケージの統合サポートを含む、サーバーとプロキシ認証のサポート。
  • 抑制されない限り、リダイレクトの自動処理。
  • API に加えてスクリプト可能なインターフェイス。
  • 問題のトラブルシューティングに役立つトレース ユーティリティ。

WinHTTP では、URL キャッシュと永続的な Cookie、自動proxy、自動ダイアログ、オフライン サポート、ファイル転送プロトコル (FTP) など、 WinINet の機能の数はサポートされていません。

バージョン 5.1 で導入された変更の詳細については、「 WinHTTP 5.1 の新機能」を参照してください。

WinHTTP の概要

WinHTTP の詳細については、次のトピックを参照してください。