第1.0版/1.1版との主な違い
目次
2002/08/24
1.1版は1.0版を Plan9 4ed に移植しただけで仕様上の違いは存在しない。
以下に 1.2版と1.0版の違いを載せます。
HTTPS のサポート
Pegasus 1.2 版では HTTPS がサポートされています。但し Plan9 第4版には以下に述べる問題点があり、factotum にパッチをあてる必要があります。
Plan9 の第4版では TLS がサポートされました。TLS を使用すると容易に HTTPS が実現するのですが、factotum の現在の仕様では TLS は hostowner のプロセスしか使えません。この場合実際のサービスをどのユーザの名前で行うかに関しては3つの選択肢があります。
- hostowner の権限のままサービスを行う。
これは危険であり採用しずらい。
- none に変身してサービスを行う。
実際に HTTPS が必要になるのは CGI を使っての書き込みです。none の権限で書き込みアクセスを許すのは抵抗がある。
- ユーザ web に変身してサービスを行う。
HTTPS の要求がある度に認証サーバに web のパスワードを知っている事を証明しなくてはならない。これはレスポンスを悪くするとともに、httpd のメモリの中に web のパスワードを持つことを意味し、危険である。(認証が終了後直ちに消すとしても、どこかに残っているかもしれない。)
筆者にはどれも不満なので、factotum にパッチをあてることにしました。
方法についてはパッチの充て方 を参照して下さい。
これによってユーザ web として HTTPS のサービスが行われ、HTTP との整合性がとれます。
実行ハンドラの {$target}
Pegasus 1.0 では {/etc/handler} の中に
# path mimetype ramfs execpath arg ...
*.http - 0 $target
*.html text/html 1 $target
*.dx_html text/html 0 /bin/dx
の最後の行のように {$target} が無い場合には、{/bin/dx} の後に {$target} を付加して解釈したのですが、これは廃止します。{$target} が必要なら省略しないで書いて下さい。
ですから次のように書きます。
# path mimetype ramfs execpath arg ...
*.http - 0 $target
*.html text/html 1 $target
*.dx_html text/html 0 /bin/dx $target
namespace.cgi による名前空間の編成の時期
Pegasus 1.0 では CGI が実行される直前に {namespace.cgi} が参照されていました。
そのために実行ハンドラの中にユーザ定義のハンドラを使用できませんでした。(これはむしろバグと言った方がよいですね。)
Pegasus 1.2 ではハンドラを判定する段階で {namespace.cgi} を参照する事にしたので実行ハンドラの中にユーザ定義のハンドラが使用できるようになりました。
httpd の起動オプション
サーバモードで
-a が廃止になり、代わりに -p が導入されました。
-c が追加され HTTPS が使えるようになりました。
-f が追加されました。
httpd のライブラリのバグ
Pegasus 1.0 はライブラリのバグのために、非常に混雑した際どい状況(例えば1秒間に10人程度の混み具合)で、httpd が無限ループに陥る事がありました。Plan9 第4版の httpd ライブラリでこのバグがとれているかもしれません。(あるいはまだ残っているかもしれません。)