この頭の情報がある場合とない場合の違いはまだわかりません。
6 に答える
「必要」を定義します。
ブラウザにファイルの種類を認識させたい場合に必要です。ヘッダーをオーバーライドしない場合、PHP はContent-Type
ヘッダーを自動的に に設定text/html
するため、ブラウザーはヘッダーを HTML を含まない HTML ファイルとして扱います。出力に HTML が含まれている場合は、まったく異なる結果が表示されます。送信する場合:
<b><i>test</i></b>
Content-Type: text/html; charset=UTF-8
ブラウザのテキストに太字と斜体で表示されます。
✅OK
一方Content-Type: text/plain; charset=UTF-8
、ブラウザには次のように表示されます。
<b><i>✅ OK</i></b>
TLDR バージョン:<
またはのような特殊文字を使用せずにプレーン テキストのみを出力している場合>
、それは問題ではありませんが、間違っています。
PHP は Content-Typetext/html
をデフォルトとして使用します。これは とよく似てtext/plain
おり、これが違いが見られない理由を説明しています。
text/plain
<
テキストをそのまま (および>
記号を含む) 出力する場合は、content-type が必要です。
例:
header("Content-Type: text/plain");
echo "<b>hello world</b>";
// Displays in the browser: <b>hello world</b>
header("Content-Type: text/html");
echo "<b>hello world</b>";
// Displays in the browser with bold font: hello world
送信するデータの種類をブラウザに伝えることは非常に重要です。違いは明らかなはずです。次の PHP ファイルの出力をブラウザで表示してみてください。
<?php
header('Content-Type:text/html; charset=UTF-8');
?>
<p>Hello</p>
以下が表示されます。
こんにちは
(この場合、ヘッダー行を見落としても同じ結果が得られることに注意してください - text/html は php のデフォルトです)
テキスト/プレーンに変更します
<?php
header('Content-Type:text/plain; charset=UTF-8');
?>
<p>Hello</p>
以下が表示されます。
<p>こんにちは</p>
なぜこれが重要なのですか?たとえば、ajax リクエストで使用される php スクリプトに次のようなものがあるとします。
<?php
header('Content-Type:text/html; charset=UTF-8');
print "Your name is " . $_GET['name']
誰かがhttp://example.com/test.php?name=%3Cscript%20src=%22http://example.com/eviljs%22%3E%3C/script%3Eのような URL へのリンクを自分のサイトであり、ユーザーがそれをクリックすると、サイト上のすべての情報がリンクを張った人に公開されます。ファイルを text/plain として提供すれば安全です。
これはばかげた例であることに注意してください。攻撃者がデータベースのフィールドに、またはフォーム送信を使用して、不正なスクリプト タグを追加する可能性が高くなります。
Content-Typeヘッダーを設定すると、Webブラウザーがコンテンツを処理する方法に影響します。ほとんどの主流のWebブラウザーは、コンテンツタイプのテキスト/プレーンに遭遇すると、(HTMLでレンダリングされるソースではなく)ブラウザーウィンドウに生のテキストソースをレンダリングします。それは見ることの違いです
<b>foo</b>
また
foo
さらに、XMLHttpRequest
オブジェクトを使用する場合、Content-Typeヘッダーは、ブラウザーが返された結果をシリアル化する方法に影響します。jQueryやPrototypeなどのAJAXフレームワークが引き継がれる前は、AJAX応答に関する一般的な問題は、Content-Typeがtext/xmlではなくtext/htmlに設定されていたことでした。Content-Typeがtext/plainの場合、同様の問題が発生する可能性があります。
204: No Content HTTP ステータスのリクエストに応答したいとします。Firefox は、ブラウザのコンソールに「要素が見つかりません」というエラーを表示します。これは Firefox のバグで、数年間報告されていましたが、修正されていません。「Content-type: text/plain」ヘッダーを送信することで、Firefox でこのエラーを防ぐことができます。
いいえ、そうではありません。ここに私の答えをサポートするための例があります---->サーバーからクライアントへの移動中にデータを圧縮できるHTTP圧縮を使用すると、明確な違いが見られます。このデータは自動的に「gzip」になり、クッパが圧縮されたデータを取得したことをブラウザに通知し、それをアップジップする必要があります。これは、クッパでタイプが本当に重要な例です。