2016-07-22 7 views
2

は、上のプログラムは、我々が使用しています。しかし、\n\nは意味がありませんので、HTML本体の中では<br>タグを使用しています。ヘッダーを印刷する際にCGIスクリプトで ` n`を使用するのはなぜですか?それは実行されません<code>n</code>を使用しない</p> <pre><code>print "Content-type: text/htmlnn"; </code></pre> <p>:CGIスクリプトで

なぜ\nがヘッダ行に必要なのですか?

+6

これはPerlとは関係がありません。[HTTP仕様](http://www.w3.org/Protocols/rfc2616/rfc2616-sec4.html) –

+1

と同様に、すべてのフレームワークにCGIの '$ q-> header;も入力しなくてもヘッダを作成することができます。 –

答えて

3

Content-type: text/html HTTPヘッダではなく、HTMLです。 HTTPヘッダーの終わりを検出するには、空の行を1つ指定する必要があります。現在の行の末尾には最初に\n、新しい空の行には2番目に\nです。

+3

実際はCGIヘッダです。サーバーはCGI応答を受け取り、HTTP応答に変換します。これには、裸の改行をキャリッジリターン - HTTPに必要な改行のペアに変換することが含まれます。 –

2

CGIスクリプトの最初の行はContent-Type: text/htmlでなければならず、print文は2つの\n文字を持っている必要があります。

  • 一つは、現在の行を終了します。
  • CGIヘッダーとデータの間に空白行が必要です。

    print "Content-Type: text/html\n\n";

1

すべてのHTTP応答(コンテンツがHTMLであるかどうかに関係なく)は、ステータスコード(通常はCGIプログラムではなくWebサーバーによって追加されます)、Content-Typeヘッダー、より多くの追加ヘッダー。各ヘッダーは別の行にある必要があります(つまり、\nで終了)。すべてのヘッダーが送信された後、ヘッダーが完全で応答の本文が続くことを示すために空白行が使用されます。

ヘッダが完了したら、コンテンツをレンダリングするときにHTMLがそれを無視するので、その後、HTML(または他の)身体が始まる\nは、もはや、どんな本当の意味を持ちません。

+0

HTTPはヘッダー行とCRLFを区切ります。ほとんどのCGIプログラムが出力するCGIヘッダーは、サーバーが正しい形式にマングルして展開するためのものです。 –

関連する問題

 関連する問題