【PerlでHTTPヘッダの最後の\nを1つでも外すとエラーになります】
初歩的なことですみません。
HTTPヘッダーの最後の\n\nなんですが、ヘッダーの文字列の後に改行が2つ?? と思って
この\nを外して、
print "content-type:text/html;charset=utf-8"; とすると、「500 Internal Server Error」
print "content-type:text/html;charset=utf-8\n"; と\nが1つでも 「500 Internal Server Error」
となります。
「\n\n」と2つあればエラーにはならないんですが、なぜ必ず2つ必要なのでしょうか?これは改行が2つって意味ですかね?
print "<html>\n"などの\nはソース上やコンソール出力結果上での改行なのはわかります。
この\nは改行したくなければ書かなくてもエラーになりませんよね。(当たり前ですが・・
#!/usr/bin/perl
print "content-type:text/html;charset=utf-8\n\n"; ←HTTPヘッダーの\n\n
print "<html>\n";
print "<body>\n";
print "<p>テキスト</p>\n";
print "</body>\n";
print "</html>\n";
No.2ベストアンサー
- 回答日時:
エラーになるのは、CGIとして間違っているからであって、Perlとしての間違いではありません。
http://oshiete.goo.ne.jp/qa/8060013.html
> ヘッダ(複数行の場合あり、空行不可)
> 空行
> 本体
print "content-type:text/html;charset=utf-8\n\n";
は
print "content-type:text/html;charset=utf-8\n"; # HTTPヘッダ:改行までが一つの項目
print "\n"; # ヘッダの終端
を1つにまとめたものです。
皆さんとても分かりやすいご説明ありがとうございました。
はっきり言って基礎の勉強不足でした。
Perlとしてはあっているが、CGIとして記述するときはHTTPの仕様では
「HTTPヘッダー +ヘッダーの終端(空行)」が必要なんですね。
それを2つ目の空行はHTTPヘッダーにくっつけて1行で書いてもいいし、
2行目に単独で空行を書いてもいいってことなんですね。
No.4
- 回答日時:
そういう決まりだからです。
詳しくは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) で決まっているレスポンスメッセージとは色々違います。
No.3
- 回答日時:
インターネットで行われる通信プロトコルでは、データの種類などを知らせるheaderとbodyが送られます。
HTTP/Mail/FTP/など・・言い換えれば、headerに続いて、空行をはさむことで、その区別をしているのです。もし空行がないと、header自体が終わらなかったり、本文がなかったりですからEroorになるのです。言い換えれば提供サーバーのエラーになります。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- PHP PHPでCookieを使った訪問回数について 1 2023/05/28 14:10
- PHP PHP MySql 画像を取得 1 2022/06/04 14:05
- PHP Content-Typeが機能していない? 2 2022/07/17 11:10
- PHP PHPのエラーの解消法について教えて下さい。 1 2023/02/06 10:48
- CGI perlで書いたcgiでsqliteの使い方を教えてください 2 2023/05/08 21:29
- CGI htmlからパラメータで、cgiに渡したい。 1 2023/02/06 16:15
- JavaScript セレクトボックスを2つ設けて選択して初めてメッセを表示 1 2022/07/27 12:15
- JavaScript javascript作成してます。ラジオボタンで判定するコードを書いてます。 1 2023/07/18 11:03
- PHP if(preg_match("/[^0-9]/",$gu_d)){意味を教えてください。 1 2022/05/06 05:37
- Excel(エクセル) PHPプログラムをエクセルに張り付けると検索ボックスがでてくる! 3 2022/05/08 07:10
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・【大喜利】【投稿~11/22】このサンタクロースは偽物だと気付いた理由とは?
- ・お風呂の温度、何℃にしてますか?
- ・とっておきの「まかない飯」を教えて下さい!
- ・2024年のうちにやっておきたいこと、ここで宣言しませんか?
- ・いけず言葉しりとり
- ・土曜の昼、学校帰りの昼メシの思い出
- ・忘れられない激○○料理
- ・あなたにとってのゴールデンタイムはいつですか?
- ・とっておきの「夜食」教えて下さい
- ・これまでで一番「情けなかったとき」はいつですか?
- ・プリン+醤油=ウニみたいな組み合わせメニューを教えて!
- ・タイムマシーンがあったら、過去と未来どちらに行く?
- ・遅刻の「言い訳」選手権
- ・好きな和訳タイトルを教えてください
- ・うちのカレーにはこれが入ってる!って食材ありますか?
- ・おすすめのモーニング・朝食メニューを教えて!
- ・「覚え間違い」を教えてください!
- ・とっておきの手土産を教えて
- ・「平成」を感じるもの
- ・秘密基地、どこに作った?
- ・【お題】NEW演歌
- ・カンパ〜イ!←最初の1杯目、なに頼む?
- ・一回も披露したことのない豆知識
- ・これ何て呼びますか
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・これ何て呼びますか Part2
- ・許せない心理テスト
- ・この人頭いいなと思ったエピソード
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・好きなおでんの具材ドラフト会議しましょう
- ・餃子を食べるとき、何をつけますか?
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
[C#]ListView一覧表示時の幅設...
-
VBAでExcelのヘッダーに文字列+...
-
perlでHTTP Request Headersの...
-
レスポンスヘッダの出力方法
-
HTTPヘッダの大きさ
-
perl5について
-
ルータでのMTU、MSS設定値の検...
-
SpreadDesignerの列ヘッダ
-
メールをPDF化する際に、ヘッダ...
-
ヘッダのinclude順
-
PerlでHTTPヘッダの\\nを外すと...
-
月の第一週とは
-
エクセルで相対パスの書き方を...
-
エクセルで毎月第2週日の水曜日...
-
毎○曜日って、使いますか?
-
週2回のペースって だいたい何...
-
よくある 『 第○(1・2・3・4・...
-
アンケートなどの1日1回の投...
-
perlの環境変数 ENV{'REMOTE_A...
-
apacheでPerl CGIが作動せず、5...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBAでExcelのヘッダーに文字列+...
-
[C#]ListView一覧表示時の幅設...
-
ヘッダのinclude順
-
リストコントロールの列幅を固...
-
AccessVBAで「このフィールドに...
-
perlでHTTP Request Headersの...
-
PerlでのHTTPヘッダのStatus変更
-
ftpでのネットワークバイトオー...
-
LinuxでRTPヘッダを作りたいの...
-
SpreadDesignerの列ヘッダ
-
Content-type: text/htmlが表示...
-
cookieを表示させたい。(ブラウ...
-
メールをPDF化する際に、ヘッダ...
-
受信した電子メールのIPアドレス
-
file_get_contents でリダイレ...
-
基本認証の内部に自動でログイ...
-
自作ヘッダファイルについて (C...
-
Ruby CGI HTTPヘッダ
-
TCPヘッダのチェックサム算出方法
-
Wininetを使ったDigest認証
おすすめ情報