WinHTTP での AutoProxy の問題
WinHTTP autoproxy 機能を使用する場合は、次の重要な問題を考慮してください。
現在サポートされているプロキシ サーバーは 1 つだけです
現在、WinHTTP では、複数のプロキシ サーバーを指定するプロキシ構成はサポートされていません。 WinHttpGetProxyForUrlがプロキシ サーバーの一覧を含む WINHTTP_PROXY_INFO 構造体を返す場合、アプリケーションは WINHTTP_OPTION_PROXY オプションを使用して要求ハンドルに設定します。WinHTTP では、リスト内の最初のプロキシ サーバーのみが使用されます。 そのプロキシ サーバーにアクセスできない場合、WinHTTP はリスト内の他のどのプロキシ サーバーにもフェールオーバーしません。 WINHTTP_OPTION_PROXY オプションをリスト内の次のプロキシ サーバーと共に再度設定し、要求を再送信することで、このケースを処理するのはアプリケーションに任されます。
セキュリティ リスクの軽減
プロキシ自動構成ファイルを処理するには、ダウンロードしたスクリプト コードを実行する必要があります。 考慮すべきセキュリティ上の懸念事項: PAC ファイルが存在するサーバーが侵害された場合、PAC スクリプト コードが悪意のある可能性があります。 そのため、WinHTTP は次の予防措置を使用してクライアントを保護します。
スクリプト コードでは、ActiveX オブジェクトをインスタンス化できなくなります。 これにより、ファイルへのアクセスやネットワーク I/O の実行など、潜在的に危険な機能の多くがブロックされます。
**Windows Server 2003: **WinHttpGetProxyForUrl は、WPAD 処理全体を、低い特権のローカル サービス組み込みユーザー アカウントで実行される外部のアウトプロセス サービスである WinHTTP Web プロキシ自動検出サービスに委任します。
SP2 および Windows Server 2003 での Windows XP の : PAC スクリプトは 60 秒を超えて実行できません。その後、スクリプトの実行が終了します。
SP2 および Windows Server 2003 Windows XP: WinHTTP、1 MB を超える PAC ファイルが拒否されます。 一般的な PAC ファイルのサイズは、通常、数キロバイト以下です。
PAC スクリプト コードを処理するには COM を使用する必要があることに注意してください。WinHTTP では Microsoft JScript コンポーネントを使用してスクリプトを実行するためです。 WinHTTP が外部のアウトプロセス Web プロキシ自動検出サービスに WPAD プロトコル処理を委任できない場合、WinHttpGetProxyForUrl呼び出しの間、アプリケーション プロセス内で COM ランタイムを読み込みます。 アプリケーション自体が既に COM を使用している場合、これは問題になりません。
パフォーマンスに関する考慮事項
自動検出プロセスは、数秒の間、遅くなる可能性があります。 WinHttpGetProxyForUrl および WinHttpDetectAutoProxyConfigUrl 関数 は、ブロックしている同期関数です。 1 つの特定の自動検出メカニズム (DHCP など) が、他の自動検出メカニズム (DNS など) よりもはるかに低速である可能性があります。 WINHTTP_AUTO_DETECT_TYPE_DHCP と WINHTTP_AUTO_DETECT_TYPE_DNS_A 両方の自動検出フラグが指定されている場合、WinHTTP は WPAD 仕様に従って最初に DHCP を使用します。 DHCP 要求を発行して PAC URL が検出されない場合、WinHTTP は既知の DNS アドレスで PAC ファイルを検索しようとします。
WinHttpGetProxyForUrl は、PAC ファイルと自動検出の結果をキャッシュするために WinHTTP セッション ハンドル パラメーターを使用します。 PAC URL の検出とファイルのダウンロードの繰り返しを回避するために、可能であれば、複数の WinHttpGetProxyForUrl 呼び出しに同じセッション ハンドルを使用することをお勧めします。 PAC ファイルはメモリ内でのみキャッシュされ、アプリケーションがセッション ハンドルを閉じると破棄されます。
autoproxy のパフォーマンスへの影響のため、デスクトップ クライアント アプリケーションまたはサービスのみがこの機能を使用することをお勧めします。サーバー ベースのアプリケーションは、"ProxyCfg.exe" ユーティリティを使用してサーバー管理者に依存する必要があります。