2006年10月28日

WindowsのHTTPスタック(大阪弁版)

この記事は、先日の「WindowsのHTTPスタック」をHiro Kannoさんの標準語→大阪弁変換ツールで(無意味に)変換した記事です。 Life is beautifulの「大阪弁変換で遊んでみた」に感化されてなんとなくやってみました。技術文書もいい味が出ますね。

今日はWindowsのHTTPスタックを紹介しまんねん。

HTTPスタックとは、HTTPを使うための各種ライブラリを集めたものや。 図を書くと、各レイヤのライブラリを積み重ねたように見えるので、スタックと呼ぶのだそうや。
アプリケーションレイヤから見ると単なるライブラリに見えまんねんけどね。

Windowsには、WinInetとWinHttpの2つのHTTPスタックがあるんや。 この2つのHTTPスタックの特徴を紹介しまんねん。

WinInet

古くさいHTTPスタックやけどアンタ、今でも広く使われていまんねんわ。 インターフェースはInternetOpenやInternetReadFileやらなんやらいくつかのWin32APIから構成されていまんねんわ。 プロキシ設定はInternetExplorerの設定から行いまんねんわ。HTTPだけではなく、FTPやGopherも使えまんねん。

WinInetを使っとるライブラリやツールは、以下のようなものがあるんや。

  • MFCのCInternetSession、CHttpConnection クラスやらなんやら
  • XMLHTTP ActiveX オブジェクト。Ajaxで使うときもあるんやね。(情報源)
  • Internet Explorerのバージョン6.0以下(7.0は分かりまへん)

また、以下のような制約やバグを抱えていまんねんわ。

  • サーバあたりの接続数が2~4に制限されていまんねんわ。(情報源)
    サーバあたりの、とあるんやが、複数サーバにアクセスするアプリケーションでもこの制約があるのを見たことがあるので、もうちーとばかし範囲は広いのかもしれまへん。
  • Internet Explorerの設定次第では、HTTP 1.0が使えまへん。(情報源)
    おかげでHTTP 1.0が必須ときは苦労しまんねん。
  • HTTP 1.1を使い、エンコード方式がchunkedのデータを受信しとるときに、接続を強制中断するとハングすることがあるんや。(情報源)
    個人的にはこれがWinInetの最悪のバグだと思うで。 このバグのため、タイムアウト機能が必要なアプリケーションでは、HTTP 1.1が使えまへん。

わいにとってはつきあいの長いHTTPスタックやけどアンタ、バグや制約が厳しいので、そろそろお別れしたいや。

WinHttp

新しいスタックやけどアンタ、あまり広く使われていまへん。 インターフェースはWinHttp ActiveX オブジェクトが提供していまんねんわ。 プロキシ設定は、proxycfgちうWindows同梱のコマンドラインツールを使って行いまんねんわ。WinInetと違い、HTTPしか使えまへん。

WinHttpを使っとるライブラリやツールは、以下のようなものがあるんや。

  • Windows UpdateやWindows インストーラ(情報源)
  • ServerXMLHTTP ActiveX オブジェクト(情報源)

WinHttpの制約やバグはちーとばかし分かりまへん。WinInetが抱えとる制約やバグは大体解決されとるようや。

わいにとっては今後お付き合いしたいHTTPスタックや。WinInetのバグにはもう近づきたくおまへん。 プロキシ設定がちょいと難儀なのが難点やけどね。


一応ケツに細くしておきまっけど、上記のバグやライブラリやらなんやらは、わいが開発をしていく中で見つけたものやので、網羅的に探したものではおまへん。
抜けはそれなりにあると思うでのでご注意くれへんかの。

投稿者 MASATO : 2006年10月28日 00:25 | トラックバック
コメント
コメントする









名前、アドレスを登録しますか?