5
5

More than 5 years have passed since last update.

HTTPプロキシの設定パラメータとは、構成ファイルとは、自動検出とは

Last updated at Posted at 2015-02-02

OS問わず、HTTPアクセスするネイティブアプリを作ろうとすると避けて通れないのがプロキシの設定です。

プロキシのために一体どんな設定項目を設けてどうプログラミングすべきかについて一応の答えをまとめましたのでご参考までに。

前提、プロキシ情報とは

プロキシ設定情報とはHTTPアクセスするときに使うプロキシのURL、ぐらいに思っていたこともありました。
しかしそう単純ではない。除外アドレスというものが必ずありますし、http:, https:, ftp:それぞれのプロトコルで別々のプロキシを使わないといけないかもしれない。
そういういろいろも含めると、プロキシ設定情報とはこうだと言えます—— アクセス先URLを受け取ってプロキシURLを返す関数 であると。

急に観念的な話をしたみたいで驚かせてしまったらすみません。しかし関数だってのは本当で、実際にJavascript で関数を記述してそれをプロキシ設定にだってできるんです。

ではまずはそれの話から。

PAC - Javascript関数定義によるプロキシ設定

JSでFindProxyForUrlという関数を記述したファイルを書くと、それはプロキシ設定として機能します。WindowsでもMacでもスマホOSでも。この設定形式をPAC(Proxy Auto-Config)と呼びます。

Windowsならインターネット オプションの画面から「自動構成スクリプト」として登録できます。
proxy-setting.png
このダイアログだと上から二番目のところですね。PACファイルをURLで指定します。http:// も file:// も両方使えていいのですが、 file:// は推奨されていません。

WPAD - PACの配信

上述したPACファイル、通常はユーザーが自分でマシンに設定する機会はあまりありません。なぜなら、LAN内で配信して各マシンは自動取得するように構築できるので、そうすることが多いからです。この配信規格がWPAD(Web Proxy Autodiscovery)です。
詳しくは別途調べてもらうとして、

のどちらかの方法でPACを手に入れます。

Windows の場合だと「設定を自動的に検出する」にチェックを入れることで利用できるようになります。

つまりプロキシ設定の画面構成は

プロキシ設定を入力させるに当たって考慮点は以上のようなものがあるわけです。これに、単純なプロキシアドレス入力も含めるとどう整理できるか。

まず、判断のフローです。与えられたURLに対してプロキシが必要か、必要ならどこを使うかは、

  1. WPADは有効か。有効なら、PACファイルの取得に成功したか。 → 取得したPACに従って判断
  2. PACアドレスの直接指定はあるか。あるならそこからPACファイルの取得に成功したか。 → 取得したPACに従って判断
  3. プロキシURLと除外アドレスの直接指定はあるか。 → これらから判断

と、こういう判断を踏まないとなりません(以上を自分でプログラミングする必要があるとは限りません。Win32だとまとめてやってくれるAPIコールが用意されています)。

ともかくこれらの判断に必要な入力項目を組み上げると、こうなります。

  • ☑プロキシの自動取得をする
  • ☑プロキシ構成スクリプトを指定する【入力欄】
  • ☑プロキシサーバを指定する【入力欄】 除外アドレス【入力欄】

結局のところ、OSの設定ダイアログとほぼ同じ構成になりました。
それに加えて、アプリの場合は「OSの設定に従う」という選択肢があるはずですね。それも加えると、こう。

  • ☑OSのプロキシ設定に従う(ONだと以下3項目がグレーアウト)
  • ☑プロキシの自動取得をする
  • ☑プロキシ構成スクリプトを指定する【入力欄】
  • ☑プロキシサーバを指定する【入力欄】 除外アドレス【入力欄】

簡易版、ユーザーにあまりプロキシについて難しいことを考えさせたくない場合などは

  • ☑OSのプロキシ設定に従う(ONだと次項目がグレーアウト)
  • ☑プロキシサーバを使用する【入力欄】

という風になりますか。OSのプロキシ設定に従う場合は、WPAD,PACも含めた正式な判断が走りますが手動設定だと使うか使わないかだけです。

プログラミング

Win32の場合、必要な入力項目を揃えればあとは次の2つのAPIですべきことが全部できます。

最後に - 「プロキシを自動検出する」という言葉に気をつけて!

「プロキシを自動検出する」といった場合、

  • OSからプロキシ設定を取得する
  • LANからプロキシ設定を取得する

というレイヤーの違う別々の自動を意味する場合があります。自動検出と言われた場合、意味の確認をお忘れなく。

5
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
5