このページは福井県立大学の田中求之が2006年1月まで運用していた Mac のサーバ運用に関する会議室 「Web Scripter's Meeting」の記録です。情報が古くなっている可能性がありますのでご注意ください。

about $ENV{CONTENT_TYPE} on WebSTAR

発言者:西窪洋平
( Date Thursday, January 09, 1997 19:41:00 )


初めてついでにもう一つ質問させていただきます.

WebSTARが吐き出す
$ENV{CONTENT_TYPE}
は,enctype="multipart/form-data"で送ったとしても,boundary以降が
削られてしまうようです.
このために特にPerlの場合,ほとんどのCGIのためのライブラリーあるいは
モジュールが利用できません.
調べてみると,
$ENV{FULL_REQUEST}(でしたか?)
にはしっかりboundaryが含まれています.
何故わざわざこんなことをするのでしょうか?
理解に苦しみます.
WebSTARのMailing Listにも同様の質問を寄せたのですが,
全く返答がありませんでした.
WebSTARユーザーにとっては常識なのでしょうか?
ただ,Perlでスクリプトを組む際,困ることには変わりがないのですが.
みなさんはどのように解決を図っているのでしょうか?
また,この件に関する詳しい事情をご存じの方がいらっしゃったら,
ご教示いただけませんでしょうか?

田中求之 さんからのコメント
( Friday, January 10, 1997 13:56:42 )

>WebSTARが吐き出す
>$ENV{CONTENT_TYPE}
>は,enctype="multipart/form-data"で送ったとしても,boundary以降が
>削られてしまうようです.

そんなことはありません。

別の発言として、アップロード用 CGI のサンプルスクリプトをポストしますが、
このスクリプトで、複数のファイルの同時アップロードがちゃんとできています。
(ただし、AppleEvent の制約により、個々のファイルのサイズは小さくないと
エラーになりますが)。

もし boundary 以降がカットされているとすれば、それは WebSTAR の問題では
なく、WebSTAR からの AppleEvent を MacPerl に渡すためのモジュール
(確か、AppleEvent を環境変数及び標準入出力に変換するモジュールを使い
ますよね)の問題だと思います。こちらの作者に問い合わせるか、自分で Applevent
を処理するようにしてみてください。

西窪洋平 さんからのコメント
( Friday, January 10, 1997 19:52:21 )

お返事ありがとうございます.

私の質問の仕方が悪かったようなので,補足します.

田中さんのスクリプトはpost_argsを元に組んでおられるので,
正常に動くものと思われます.
結局私も同様の手法でWebSTAR上での問題は回避しましたが,
WebSTAR上でのファイルのアップロード自体は,
「AppleEvent の制約」のためのファイルサイズの制限のため断念しました.

HTTPの規格を詳しく読んだわけではないので,はっきりとしたことは
言えませんが,
一般に,method=post enctype=multipart/form-data で送られた場合,
$ENV{CONTENT_TYPE} は,
multipart/form-data; boundary=----------(略)134567897987
等のような形で送られます.
私の確認した範囲では,
Apache (on MkLinux),Netscape (on NT or UNIX),他多数
また,Netpresenzもこうした形で送ります.
ところが,WebSTARでは,
multipart/form-data; 
という形で送られます.
このため,$ENV{CONTENT_TYPE} から boundary の情報を得ようと
するスクリプトは全て正常に動作しません.
困ったことに,PerlのCGI用のライブラリー,モジュールは
全て上記に当てはまるようです.

ちなみに NetpresenzとWebSTARで動かしているスクリプトは全く同一のもの
です.(MPCGI_06Feb96を使用)

ですから,あくまでWebSTARの問題(「問題」としてとらえるべきなのか
どうかも分かりませんが)として,$ENV{CONTENT_TYPE} の特殊性は
存在しているといえます.

というわけで,どなたか,詳しい事情,理由他をお教え願えませんでしょうか?

補足1:
私の環境だけかもしれませんが,Perl5以降においては
普通のやり方では%ENVが表示されないようです.
ただし,認識はされているようなので,利用する形でのスクリプトは動作します.

補足2:
Netpresenz + Perl5 でファイルサイズ制限が1分間で送られる量という
(つまり,スクリプトの限界ではなく,NetpresenzのTimeOUTに
ひっかかってしまう)
スクリプトは作ってみました.
興味のある方はご連絡下さい.
(有料とか,そういうことではありません.
公開できるほど検証していないからです.念のため.)

e-mail: yohei@archiweb.com

上記のメールアドレスは1/31まで有効です.

田中求之 さんからのコメント
( Friday, January 10, 1997 20:06:25 )

あ、そういうことでしたか。私の方も勘違いしていました。

CONTENT-TYPE に Boundary が含まれないのは WebSTAR の仕様のようです。
AppleEvent のメッセージのパラメーター(class ctyp)を念のためチェック
してみましたが、おっしゃるように bounndary の情報は含まれません。

ですから、WebSTAR の場合は、post_args から直接 boundary を取り出す
しかないですね。