1. はじめに
社用パソコンでネットワークに接続するためにPACファイルの使用を求められましたが、中身の理解はできていませんでした。
そこで、PACファイルについて調べた内容を記事としてまとめます。
2. PACファイルとは
PACファイル(プロキシ自動設定ファイル)は、Webブラウザの動作を指定する設定ファイルであり、特定のプロキシサーバを経由してアクセスするかどうかを指定するためのものです。このファイルでは、ホスト名やURLに基づいて直接アクセスとプロキシ経由の使い分けが可能です。一般的なファイル拡張子は「.pac」です。
補足するとプロキシサーバは、WebブラウザがWebサーバにアクセスする際に中継してくれるサーバです。プライベートネットワークからインターネットへのアクセスなど、直接通信が難しい場合には、クライアントの代理(proxy)としてデータの送受信を行います。
3. PACファイルの具体例
スクリプトの処理内では、条件に合ったプロキシサーバーの宛先 (URL、もしくはIPアドレス) とポート番号を返します。
PAC ファイルを記載する場合は、必ず FindProxyForURL関数を記載する必要があります。PACファイルの処理時には、このFindProxyForURLの関数が実行されます。
FindProxyForURL 関数の第一引数である url はアクセス先の URL、第二引数である host はアクセス先の URL から取得したホスト名を表します。例えば、http://shuncask.com/ という URL にアクセスする際には、url が http://shuncask.com/ 、host が shuncask.com/ となります。これらの値を様々な関数を用い条件分けし、最終的に経由するサーバーを返す (return) するような処理を作成します。以下に PAC ファイルの具体例を挙げて、説明します。
function FindProxyForURL (url, host) {
if (isPlainHostName (host)) {
return "DIRECT";
} else {
if (shExpMatch(url, "http://shuncask.com/")) {
return "PROXY shuncask-proxy.com:6060";
} else if (shExpMatch(url, "http://www.microsoft.com/")) {
return "PROXY microsoft-proxy.com:7070";
} else {
return "PROXY other-proxy.com:8080";
}
}
}
先述のPACファイルには、isPlainHostName関数とshExpMatch関数が含まれています。isPlainHostName関数は、引数のhostにピリオドが含まれていなければtrueを、含まれていればfalseを返す関数です。一方で、shExpMatch関数は文字列の部分比較を行い、第一引数の文字列が、シェル表現パターンを使用した第二引数の文字列にマッチする場合はtrueを、マッチしない場合はfalseを返します。
このPACファイルを用いて、例えば http://shuncask.com/ にアクセスした場合、戻り値としては shuncask-proxy.com というプロキシサーバーに 6060 番ポートでアクセスするよう指定されます。同様に、http://www.google.com/ にアクセスした場合の戻り値は www.other-proxy.com となり、プロキシサーバーには 8080 番ポートで接続されます。ブラウザでは、これらの戻り値に基づき、対応するプロキシサーバーへの接続を試み、接続が確立されるとHTTP通信がプロキシ経由で行われます。
また、hostにピリオドが含まれていない場合、isPlainHostNameがtrueとなり、return DIRECTが戻り値となります。IEでは、return DIRECTが返されると、プロキシサーバーを経由せずに直接接続が行われる動作になります。
4. おわりに
PACファイルについて理解を深めていただけたら幸いです。