不管有没有这个头部信息,我都看不出有什么不同。
什么叫“必要”。
如果您希望浏览器为 知道,则需要确定文件的类型。如果不覆盖它,PHP 会自动将 Content-Type头设置为 text/html,这样浏览器就会将其视为不包含任何 HTML 的 HTML 文件。如果您的输出包含任何 HTML,您将看到非常不同的结果。如果你发送:
Content-Type
text/html
<b><i>test</i></b>
Content-Type: text/html; charset=UTF-8将以粗体和斜体显示在浏览器文本中:
Content-Type: text/html; charset=UTF-8
Something OK
而 Content-Type: text/plain; charset=UTF-8会在浏览器中显示如下:
Content-Type: text/plain; charset=UTF-8
<b><i>✅ OK</i></b>
TLDR Version: 如果你真的只输出纯文本,没有像 <或 >这样的特殊字符,那么这并不重要,但是 是的是错误的。
<
>
PHP 默认使用 Content-Type text/html,这与 text/plain非常相似,这解释了为什么没有看到任何差异。
text/plain
如果要按原样输出文本(包括 <和 >符号) ,则必须使用 text/plain内容类型。
例子:
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
不是这样的,这里有一个例子来支持我的回答—— > 当你使用 HTTP压缩时,明显的区别是可见的,它允许你在从服务器到客户端的过程中压缩数据,这个数据的类型会自动变成“ gzip”,告诉浏览器 Bowser 得到了一个 压缩数据,它必须得到一个 拉链,这是一个在 Bowser 中类型真正重要的例子。
设置 Content-Type 头将影响 Web 浏览器对待内容的方式。当大多数主流 Web 浏览器遇到一个 Content-Type 文本/纯文本时,它们会在浏览器窗口中呈现原始文本源(而不是在 HTML 中呈现的源)。这就是看到
<b>foo</b>
或者
福
此外,在使用 XMLHttpRequest对象时,Content-Type 标头将影响浏览器序列化返回结果的方式。在接管像 jQuery 和 Prototype 这样的 AJAX 框架之前,AJAX 响应的一个常见问题是将 Content-Type 设置为 text/html 而不是 text/xml。如果 Content-Type 是文本/纯文本,则可能会出现类似的问题。
XMLHttpRequest
假设您希望以204: No Content HTTP 状态回答请求。 Firefox 会抱怨浏览器控制台中“没有找到任何元素”。 这是 Firefox 中的一个 bug,已经被报道了好几年,但是从来没有修复过。 通过发送“ Content-type: text/platen”头,可以在 Firefox 中防止此错误。
告诉浏览器发送的数据类型非常重要。区别应该是显而易见的。尝试在浏览器中查看以下 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>
这有什么关系?如果在 php 脚本中有下面这样的内容,例如,Ajax 请求使用了这些内容:
<?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 链接,如果用户点击了它,他们就把他们在你的网站上的所有信息暴露给了发布链接的人。如果以文本/纯文本形式提供文件,则是安全的。
注意,这是一个愚蠢的示例,更有可能的情况是攻击者将错误脚本标记添加到数据库中的字段中,或者使用表单提交。