• ベストアンサー

content-typeヘッダを先に出力してもいいでしょうか?

SSIでCGIを呼び出し、ひととおりの処理をして最後にcontent-typeヘッダを出力しています。 アクセス解析用の環境変数を取得するだけで、ページ上には何も表示しない(ブラウザに何も返す必要がない)場合、  print "content-type: text/html\n\n";  print ""; としていますが、これを先に出力してもいいものでしょうか? ヘッダを先に出力してしまえば、その後スクリプトで時間がかかる処理をしても、ブラウザの「待ち時間」を最小にできるのではないかと思うのですが。

  • Perl
  • 回答数1
  • ありがとう数1

質問者が選んだベストアンサー

  • ベストアンサー
  • sion_fs
  • ベストアンサー率36% (152/416)
回答No.1

先に表示して問題有りません。 但し、クッキーなど、content-typeヘッダ以外のHTTPヘッダを送出する必要がありうる場合は注意して下さい。そのままですと他のHTTPヘッダがヘッダとしてではなく本文として認識されてしまいます。 (\n\nを区切りに、それ以前がhttpヘッダ、それ以降が本文と認識します) また、蛇足ですが、待ち時間の後に一気に本文が表示されるのと、少しずつ本文を表示しながら待ち時間が過ぎていくのと、時と場合によって使い分けた方がいい場合もあるかも知れません。

maomao55
質問者

お礼

早速の回答ありがとうございます。

関連するQ&A

  • perl CGIでのhttpヘッダー出力 (Content-type:

    perl CGIでのhttpヘッダー出力 (Content-type: text/html\n\n) が不要な場合について perlでCGIを作成しています。 多くの場合は、httpのヘッダー出力(Content-type: text/html\n\)を行っています。 毎回ではないですが、HTTPヘッダーの出力が不要な場合が存在します。 (HTMLにContent-type: text/html\n\が出力され表示されます。) そこで、HTTPヘッダーの出力が不要の場合の判断方法を教えていただければと思います。 よろしくお願いいたします。

  • ヘッダでのContent-Typeの指定は不要?

    windwos2000,apache2.0.55でいろいろとテストしていたのですが、 apacheに対してhtmlファイルをリクエストすると、そのレスポンスでapacheが Content-Type: text/htmlをhttpヘッダに自動でつけてくれているようなのです。 (telnetでapacheへ接続してGETリクエストを送ってその応答で確かめました。) ということは、htmlファイルの<head>セクションで <meta http-equiv="Content-Type" Content="text/html"> を指定しなくてもよいということになるのでしょうか?

    • ベストアンサー
    • HTML
  • print "Content-type: text/html\n"; の行方

    以下のようなスクリプトを作ってみました。 #!/usr/local/bin/perl print "Content-type: text/html\n"; print "\n"; print "<HTML>\n"; @week = ('Sunday','Monday','Tuesday','Wednesday','Thursday'); print $week[3],"\n"; print "</HTML>\n"; ------------------- 二つ疑問があります。 (1)ブラウザで表示されるページのソースを見ると、<HTML>から始まっています。 print "Content-type: text/html\n"; print "\n"; この部分はどこかにprintされているのでしょうか。 (2)Internet ExplorerとFirefoxでは表示されるのに、Lunascapeではエラーとなり表示されません。 どうしてそうなるのでしょうか。 よろしくお願いいたします。

    • ベストアンサー
    • CGI
  • sendmail でのヘッダ部分Content-Transfer-Encodingについて

    あまりPerlに精通しておりませんが、よろしくお願いします。 Perl でフォームからメールを送信するページを作成しましたが、メールヘッダの部分に --------------- print OUT "Content-Type: text/plain; charset=iso-2022-jp\n"; print OUT "Content-Transfer-Encoding: 7bit\n"; print OUT "MIME-Version: 1.0\n"; --------------- という風に書いているのに、届くメールは Content-Type: text/plain; charset=iso-2022-jp MIME-Version: 1.0 になって、Content-Transfer-Encoding: 7bit が抜け落ちます。(場合によっては、Content-Transfer-Encoding: base64 になる) どういった原因が考えられるか、アドバイスいただければ幸いです。よろしくお願いします。

    • ベストアンサー
    • Perl
  • "Content-type:text/html;charset=shift_JIS\n\n" がテキスト表示されてしまう。

    CGIで print "Content-type:text/html;charset=shift_JIS\n\n"; を出力すると その文字列がそのままブラウザにテキスト表示され、その後ろの操作、 例えば、 print "Status: 301 Move Permanent\n"; print "Location: http://localhost/file/data-1.lzh\n\n"; も、単純に文字列として表示されてしまいます。 ところが、print "Content-type:text/html;charset=shift_JIS\n\n"; の行を削除すると、 もともとの目的の動作(上記の例ではファイルのダウンロード画面ポップアップ)になります。 このように、print "Content-type:text/html;charset=shift_JIS\n\n";を書かなくて済む (あるいは書かない方が良い場合)というのは、なぜでしょうか。 サーバによっては動作が変わるのでしょうか。 ※そのCGI内で、print "Content-type:text/html;charset=shift_JIS\n\n"; を2行書いてあるというようなことはありません。 よろしくお願いいたします。

    • ベストアンサー
    • CGI
  • PerlでHTTPヘッダの\nを外すとエラー

    【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";

    • ベストアンサー
    • Perl
  • Content-type: を切り替える方法

    cgi で、 print "Content-type: text/html\n\n"; で、テキストやINPUT タグ等を表示した後、  print "Content-type: image/jpg\n\n"; で、Content-type を切り替えて画像を表示させ たいのですが、画像イメージがどうもテキストと 認識されるらしく、文字化けのテキストがずらずらっと表示されます。  上の順序を逆にすると今度は画像は表示されるものの、テキスト、タグが表示されなくなります。 どう書けば、両方の表示に対応できるようになるでしょうか。

  • Content-type: text/htmlが表示されてしまう

    PerlでCGIを作成しております。 海外のサーバーでCGIをアップしたところなぜかすべてのCGIで Content-type: text/html がページ上部に表示されてしまいます。 そのファイルは日本のサーバーでは問題なく動作しております。 print "Content-type: text/html\n\n"; print "<html><head><title>$site_title</title></head>\n"; 上のようにプログラムは書いております。 これは言語に依存するのですか? ご教示お願いします。

  • headerのContent-Typeの出力制御

    お世話になります。 PHPの問題なのか、Apacheの問題なのか分かりかねましたので、とりあえずPHPのカテゴリーに質問させて頂きます。 ■問題点 mmfファイルにアクセスしているように見せかけてPHPを実行するプログラムにおいて、Headerの出力として"Content-Type:application/x-smaf" だけ出力したいのだが、"Content-Type: text/html; charset=Shift_JIS" も同時に出力されてしまう。 ■出力されるHeader(一部修正しています) HTTP/1.1 200 OK Date: Wed, 25 May 2005 01:46:37 GMT Server: Apache/1.3.27 (Unix) X-Powered-By: PHP/4.3.6 Accept-Ranges: bytes Content-Type:application/x-smaf Content-length:11212 Connection: close Content-Type: text/html; charset=Shift_JIS (↑この一行が邪魔) ■PHPプログラム 拡張子mmf(smafファイル)でphpを実行し、smafファイルを出力する。 <?php $melody_file = "hoge.mmf"; $melody_filesize = @filesize( $melody_file ); $fd = fopen ($melody_file, "rb"); $contents = fread ($fd, $melody_filesize ); fclose ($fd); header("Content-Type:application/x-smaf\nContent-length:${melody_filesize}\n\n"); echo $contents; ?> ■Apache設定 AddType application/x-httpd-php .php .php4 .php3 .phtml .mmf ■動作環境 ReadHat7.2 Apache 1.3.27 PHP 4.3.6 上記の件につきまして、対応方法をご存知の方がいらっしゃいましたら宜しくお願いいたします。

    • ベストアンサー
    • PHP
  • CGIで作ったHTMLの文字化けについて

    CGIのヘッダを "Content-type: text/html\n\n" として、HTMLをブラウザに出力するcgiを作っているのですが、 「表示」という文字が「侮ヲ」と文字化けしてしまいます。 HTMLの<head></head>内には print "<meta http-equiv=\"Content-Type\" content=\"text/html; charset=shift-jis\">"; と記述して日本語を指定しています。 文字化けの原因がまったくわかりません。 心当たりありませんでしょうか?

    • ベストアンサー
    • Perl

専門家に質問してみよう