AN HTTPD ゲストブック/コメント集(2001年6月24日21:41)


中田昭雄 nakata@st.rim.or.jp 2001/06/26 21:06

ando さん、
スクリプトの問題のような気はしますね。
全体はマルチパートだとして、各パートの Content-type: はどのようにしているのでしょうか?
あるいはスクリプトを示してもらった方がいいかもしれませんが。


ando ironheart@mac.com 2001/06/25 23:39

いとさん、中田さん、ありがとうございます。
HTTP1.0にすることで、とりあえず簡単なNPHスクリプトは動くようになりました。

しかし、画像を連続して出力するようなスクリプトだと、ファイル保存の
ダイアログがでてきてうまくいきません。
ちゃんとマルチパートにして、BOUNDARYもちゃんと出力しているんですけど・・・

単純にスクリプトに問題があるんでしょうか(^^;;


中田昭雄 nakata@st.rim.or.jp 2001/06/25 21:38

ando さん、
いとさんの言うとおりですが、補足すると、

現状で AN HTTPD の HTTPバージョンが 1.1 のままでも、リクエストが HTTP/1.1 の場合、
(a)nphスクリプトが HTTP/1.1 200 OK というステータスを返し、
(b)Transfer-Encoding: chunked を出し、
(c)ボディをチャンク形式エンコーディングで出してくれれば
ブラウザ側でデータの終わりがわかりますから正常に動作するはずです。
(a)(b)(c)のいずれが欠けても、ブラウザはボディの終わりがわかりませんから、サーバの接続タイムアウトまで待ち続けてしまいます。

リクエストが HTTP/1.0 で Connection: Keep-Alive がついている場合は、スクリプトが返す内容にかかかわらず、サーバ側からは接続を切りませんから接続のタイムアウトまで待たされてしまいます。
これはバグです。

いずれにしろ、リクエストがHTTP/1.1の場合でもそこまで要求するのは酷でしょうから、対策としては
(1)nphスクリプトでは、サーバから接続を切るというオプションをつける
(2)nphスクリプトでもスクリプトが出すHTTPのバージョンなどを調べる
のいずれかにしようと思っています。


いと gfh05223@nifty.com 2001/06/25 00:02

andoさん
v1.33になって出た以下と同種のバグだと思います。
 ・1.32fから1.33gにアップ後、nphスクリプトのLocationヘッダが動かなくなった、他
 ・1.33xにバージョンアップ後、SSIが正常に動作しなくなった

オプション/一般タブの HTTPバージョンを 1.1 -> 1.0 とすればとりあえず直り、
正式には修正バージョン待ちということになると思われます。


ando ironheart@mac.com 2001/06/24 21:41

ところで、いま、nphのスクリプトのテストをしているのですが、
スクリプトを実行すると、
どうも接続持続タイムアウトの時間がくるまで内容が表示されて
いないようです。
なぜタイムアウトになるのでしょうか???

----- nph-sample.cgi ---
#!/usr/bin/perl

$| = 1;

binmode(STDOUT);
print "HTTP/1.0 200 OK\r\n";
print "Content-Type: text/html\r\n";
print "\r\n";
print "<html><body>てすてす</body></html>\n";
-------