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

我没有看到有没有这个头部信息的任何差异呢。

定义“必要”。

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

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

Content-Type: text/html会输出:

testing

Content-Type: text/plain会输出:

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

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

PHP使用Content-Type“text / html”作为默认值 – 这与“text / plain”非常相似 – 这就解释了为什么你没有看到任何区别。 如果要按原样输出文本(包括<> – 符号),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 

设置Content-Type标题将影响Web浏览器如何处理您的内容。 当大多数主streamWeb浏览器遇到Content-Type文本/纯文本时,它们将在浏览器窗口中呈现原始文本源(与在HTML中呈现的源相反)。 这是看到的区别

 <b>foo</b> 

要么

FOO

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

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

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

你会看见:

你好

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

将其更改为text / plain

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

你会看见:

<p>您好</ P>

为什么这很重要? 如果在php脚本中有类似下面的内容,例如,由ajax请求使用:

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

有人可以在上放置链接网站,如果用户点击了它们,他们已经把你网站上的所有信息都公开给谁。');" rel="nofollow ugc">http://example.com/test.php?name=%3Cscript%20src=%22http://example.com/eviljs%22%3E%3C/script%3E上放置链接网站,如果用户点击了它们,他们已经把你网站上的所有信息都公开给谁。; 如果您以文本/纯文本forms提供该文件,则您是安全的。

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

假设你想用204:No Content HTTP状态来回答一个请求。 Firefox会在浏览器的控制台中抱怨“找不到任何元素”。 这是Firefox中的一个漏洞,已经有好几年了,但从未被修复。 通过发送“Content-type:text / plain”标题,您可以防止在Firefox中发生此错误。

没有它不是这样的,这里是我的答案的支持的例子—->清晰的差异是可见的,当你去HTTP压缩,它允许你压缩数据,而从服务器到客户端和types这个数据会自动变成“gzip”,告诉浏览器bowser得到了一个压缩的数据 ,并且必须将其压缩 ,这是一个在Bowser真正重要的例子。