【发布时间】:2010-11-27 17:04:25
【问题描述】:
我还没有看到有或没有这个头部信息的任何区别。
【问题讨论】:
标签: php http-headers content-type head response-headers
我还没有看到有或没有这个头部信息的任何区别。
【问题讨论】:
标签: php http-headers content-type head response-headers
定义“必要”。
如果您希望浏览器知道文件的类型是什么,这是必要的。如果您不覆盖它,PHP 会自动将 Content-Type 标头设置为 text/html,因此您的浏览器会将其视为不包含任何 HTML 的 HTML 文件。如果您的输出包含任何 HTML,您会看到非常不同的结果。如果您要发送:
<b><i>test</i></b>
Content-Type: text/html; charset=UTF-8 将以粗体和斜体显示在浏览器文本中:
✅ 好的
而Content-Type: text/plain; charset=UTF-8 会像这样在浏览器中显示:
<b><i>✅ OK</i></b>
TLDR 版本:如果您真的只输出纯文本,没有像 < 或 > 这样的特殊字符,那么这并不重要,但它是 错了。
【讨论】:
PHP 使用 Content-Type text/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
【讨论】:
告诉浏览器你发送什么类型的数据是非常重要的。区别应该很明显。尝试在浏览器中查看以下 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 的链接,如果用户点击它,他们就会将他们在您网站上的所有信息暴露给任何放置链接的人。如果您将文件作为文本/纯文本提供,那么您是安全的。
请注意,这是一个愚蠢的示例,攻击者更有可能将错误的脚本标记添加到数据库中的字段或使用表单提交。
【讨论】:
设置 Content-Type 标头将影响 Web 浏览器如何处理您的内容。当大多数主流 Web 浏览器遇到 text/plain 的 Content-Type 时,它们会在浏览器窗口中呈现原始文本源(而不是在 HTML 中呈现的源)。这就是看到的区别
<b>foo</b>
或
富
此外,当使用XMLHttpRequest 对象时,您的 Content-Type 标头将影响浏览器如何序列化返回的结果。在接管 jQuery 和 Prototype 等 AJAX 框架之前,AJAX 响应的一个常见问题是 Content-Type 设置为 text/html 而不是 text/xml。如果 Content-Type 是 text/plain,可能会出现类似的问题。
【讨论】:
假设您想以 204: No Content HTTP 状态回答请求。 Firefox 将在浏览器的控制台中抱怨“找不到元素”。 这是 Firefox 中的一个错误,多年来一直被报告,但从未修复。 通过发送“Content-type: text/plain”标头,您可以防止在 Firefox 中出现此错误。
【讨论】:
不,不是这样,这是支持我的答案的示例---->明显的区别是可见的,当您使用 HTTP 压缩时,它允许您在从服务器到客户端传输时压缩数据,并且此数据的类型自动变为“gzip”,它告诉浏览器 bowser 获得了 压缩数据,它必须 upzip 它,这是类型真正重要的示例鲍泽。
【讨论】: