是标题('Content-Type:text / plain');有必要吗?

时间:2009-09-12 04:57:50

标签: php head

我还没有看到有没有此头信息的任何差异。

6 个答案:

答案 0 :(得分:100)

定义“必要”。

如果您希望浏览器 知道 ,该文件的类型是必要的。如果您不覆盖它,PHP会自动将Content-Type标头设置为text/html,以便您的浏览器将其视为不包含任何HTML的HTML文件。如果您的输出包含任何HTML,您会看到非常不同的结果。如果你要发送:

<b><i>test</i></b>

Content-Type: text/html会输出:

<强> 测试

Content-Type: text/plain会输出:

<b><i>test</i></b>

TLDR版本:如果你真的只是输出文字那么它并不重要,但 IS 错误。

答案 1 :(得分:48)

PHP使用Content-Type“text / html”作为默认值 - 这与“text / plain”非常相似 - 这解释了为什么你没有看到任何差异。如果要按原样输出文本(包括&lt;&gt; -symbols),则必须使用text / plain。例子:

header("Content-Type: text/plain");
echo "<b>hello world</b>";
// Output: <b>hello world</b>

header("Content-Type: text/html");
echo "<b>hello world</b>";
// Output: hello world

答案 2 :(得分:11)

告诉浏览器发送它的数据类型非常重要。差异应该是显而易见的。尝试在浏览器中查看以下PHP文件的输出;

<?php
header('Content-Type:text/html');
?>
<p>Hello</p>

你会看到:

  

您好

(请注意,如果在这种情况下错过了标题行,你将得到相同的结果 - text / html是php的默认值)

将其更改为text / plain

<?php
header('Content-Type:text/plain');
?>
<p>Hello</p>

你会看到:

  

&LT; p为H.你好&LT; / p为H.

为什么这很重要?如果你在php脚本中有类似的东西,例如,ajax请求使用它:

<?php
header('Content-Type:text/html');
print "Your name is " . $_GET['name']

有人可以在其网站上添加指向http://example.com/test.php?name=%3Cscript%20src=%22http://example.com/eviljs%22%3E%3C/script%3E等网址的链接,如果用户点击该网址,他们会将您网站上的所有信息公开给任何提供链接的人。如果您将文件作为text / plain提供,那么您就是安全的。

请注意,这是一个愚蠢的例子,攻击者可能会将错误的脚本标记添加到数据库中的字段或使用表单提交。

答案 3 :(得分:7)

设置Content-Type标头将影响Web浏览器处理您的内容的方式。当大多数主流Web浏览器遇到Content-Type of text / plain时,它们将在浏览器窗口中呈现原始文本源(与HTML呈现的源相反)。这是看到

之间的区别
<b>foo</b>

  

FOO

此外,使用XMLHttpRequest对象时,Content-Type标头将影响浏览器序列化返回结果的方式。在收购jQuery和Prototype等AJAX框架之前,AJAX响应的一个常见问题是将Content-Type设置为text / html而不是text / xml。如果Content-Type是text / plain,则可能会出现类似的问题。

答案 4 :(得分:1)

假设您要回答具有204:无内容HTTP状态的请求。 Firefox会在浏览器的控制台中抱怨“找不到任何元素”。 这是Firefox中的一个错误,已被报道,但从未修复过几年。 通过发送“Content-type:text / plain”标题,您可以在Firefox中阻止此错误。

答案 5 :(得分:0)

不,不是这样,这里是支持我的答案的示例----&gt;当您进行HTTP压缩时,可以看到明显的区别,它允许您在从服务器到客户端的同时压缩数据并且此数据的类型自动变为“gzip”,告诉浏览器bowser获得压缩数据并且必须 upzip ,这是Type真正重要的示例在Bowser。