- ベストアンサー
PerlでHTTPヘッダの改行を外すとエラーになるのはなぜ?
- PerlでHTTPヘッダの最後の改行を外すとエラーが発生します。改行を外す場合には注意が必要です。
- 改行の数が2つ必要なのは、HTTPヘッダーの仕様に基づくものです。改行は2つ必要なため、1つだけ外すとエラーになります。
- 改行はソースコード上やコンソール出力結果上の改行であり、指定しない場合でもエラーにはなりません。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
エラーになるのは、CGIとして間違っているからであって、Perlとしての間違いではありません。 http://okwave.jp/qa/q8060013.html > ヘッダ(複数行の場合あり、空行不可) > 空行 > 本体 print "content-type:text/html;charset=utf-8\n\n"; は print "content-type:text/html;charset=utf-8\n"; # HTTPヘッダ:改行までが一つの項目 print "\n"; # ヘッダの終端 を1つにまとめたものです。
その他の回答 (3)
- hanabutako
- ベストアンサー率54% (492/895)
そういう決まりだからです。 詳しくはCGIについての決まり事が書かれたRFC 3875を見てください。 http://tools.ietf.org/html/rfc3875#section-6 CGIではヘッダー、改行文字 (ドキュメントではNLと書いてあります)、もしあったらボディという流れでレスポンスを出さなくてはなりません。 6.3節 (http://tools.ietf.org/html/rfc3875#section-6.3) にある通り、各ヘッダーは改行で終わります。また、6.2節 (http://tools.ietf.org/html/rfc3875#section-6.2) にある通り、ヘッダーを出力した後には必ず改行文字を入れることが決まっています。 つまり、\n\nというのは各ヘッダーの行末に置く\nとすべてのヘッダーを出力したあとに置く\nを連続して書いただけということです。 ちなみに、これはHTTPの仕様 (RFC 2616 / http://tools.ietf.org/html/rfc2616#section-4) で決まっているレスポンスメッセージとは色々違います。
- ORUKA1951
- ベストアンサー率45% (5062/11036)
インターネットで行われる通信プロトコルでは、データの種類などを知らせるheaderとbodyが送られます。HTTP/Mail/FTP/など・・ 言い換えれば、headerに続いて、空行をはさむことで、その区別をしているのです。もし空行がないと、header自体が終わらなかったり、本文がなかったりですからEroorになるのです。言い換えれば提供サーバーのエラーになります。
- shiren2
- ベストアンサー率47% (139/295)
これはPerlの問題ではなく、HTTPの仕様です。 ヘッダ部分とコンテンツ本体を区別するために、間に空行を一つ挟みます。 メールとかもそうですね。
お礼
皆さんとても分かりやすいご説明ありがとうございました。 はっきり言って基礎の勉強不足でした。 Perlとしてはあっているが、CGIとして記述するときはHTTPの仕様では 「HTTPヘッダー +ヘッダーの終端(空行)」が必要なんですね。 それを2つ目の空行はHTTPヘッダーにくっつけて1行で書いてもいいし、 2行目に単独で空行を書いてもいいってことなんですね。