是否有必要使用标题(‘ Content-Type: text/clean’) ?

不管有没有这个头部信息,我都看不出有什么不同。

313216 次浏览

什么叫“必要”。

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

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

Content-Type: text/html; charset=UTF-8将以粗体和斜体显示在浏览器文本中:

Something OK

Content-Type: text/plain; charset=UTF-8会在浏览器中显示如下:

<b><i>✅ OK</i></b>

TLDR Version: 如果你真的只输出纯文本,没有像 <>这样的特殊字符,那么这并不重要,但是 是的是错误的。

PHP 默认使用 Content-Type text/html,这与 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 是文本/纯文本,则可能会出现类似的问题。

假设您希望以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 链接,如果用户点击了它,他们就把他们在你的网站上的所有信息暴露给了发布链接的人。如果以文本/纯文本形式提供文件,则是安全的。

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