76

この頭の情報がある場合とない場合の違いはまだわかりません。

4

6 に答える 6

121

「必要」を定義します。

ブラウザにファイルの種類を認識させたい場合に必要ですヘッダーをオーバーライドしない場合、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 バージョン:<またはのような特殊文字を使用せずにプレーン テキストのみを出力している場合>、それは問題ではありませんが、間違っています。

于 2009-09-12T04:59:44.343 に答える
62

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
于 2009-09-12T05:08:14.057 に答える
23

送信するデータの種類をブラウザに伝えることは非常に重要です。違いは明らかなはずです。次の 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 として提供すれば安全です。

これはばかげた例であることに注意してください。攻撃者がデータベースのフィールドに、またはフォーム送信を使用して、不正なスクリプト タグを追加する可能性が高くなります。

于 2016-11-04T12:43:37.660 に答える
7

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の場合、同様の問題が発生する可能性があります。

于 2009-09-12T05:35:10.093 に答える
1

204: No Content HTTP ステータスのリクエストに応答したいとします。Firefox は、ブラウザのコンソールに「要素が見つかりません」というエラーを表示します。これは Firefox のバグで、数年間報告されていましたが、修正されていません。「Content-type: text/plain」ヘッダーを送信することで、Firefox でこのエラーを防ぐことができます。

于 2015-08-03T08:42:10.233 に答える
0

いいえ、そうではありません。ここに私の答えをサポートするための例があります---->サーバーからクライアントへの移動中にデータを圧縮できるHTTP圧縮を使用すると、明確な違いが見られます。このデータは自動的に「gzip」になり、クッパが圧縮されたデータを取得したことをブラウザに通知し、それをアップジップする必要があります。これは、クッパでタイプが本当に重要な例です。

于 2009-09-12T05:13:42.373 に答える