Jer*_*gan 103
定义"必要".
如果您希望浏览器知道文件的类型是必要的.如果您不覆盖它,PHP会自动将Content-Type标头设置为text/html,以便您的浏览器将其视为不包含任何HTML的HTML文件.如果您的输出包含任何HTML,您会看到非常不同的结果.如果您要发送:
<b><i>test</i></b>
Run Code Online (Sandbox Code Playgroud)
一个Content-Type: text/html输出:
测试
而Content-Type: text/plain输出:
<b><i>test</i></b>
Run Code Online (Sandbox Code Playgroud)
TLDR版本:如果你真的只输出文本那么它并不重要,但它是错误的.
Kri*_*ann 49
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
Run Code Online (Sandbox Code Playgroud)
rjm*_*nro 13
告诉浏览器发送它的数据类型非常重要.差异应该是显而易见的.尝试在浏览器中查看以下PHP文件的输出;
<?php
header('Content-Type:text/html');
?>
<p>Hello</p>
Run Code Online (Sandbox Code Playgroud)
你会看见:
你好
(请注意,如果在这种情况下错过了标题行,你将得到相同的结果 - text/html是php的默认值)
将其更改为text/plain
<?php
header('Content-Type:text/plain');
?>
<p>Hello</p>
Run Code Online (Sandbox Code Playgroud)
你会看见:
<p>您好</ P>
为什么这很重要?如果你在php脚本中有类似的东西,例如,ajax请求使用它:
<?php
header('Content-Type:text/html');
print "Your name is " . $_GET['name']
Run Code Online (Sandbox Code Playgroud)
有人可以在http://example.com/test.php?name=%3Cscript%20src=%22http://example.com/eviljs%22%3E%3C/script%3E上添加指向其网址的链接网站,如果用户点击它,他们会将您网站上的所有信息公开给任何提供链接的人.如果您以text/plain方式提供文件,那么您就是安全的.
请注意,这是一个愚蠢的例子,攻击者更可能将坏脚本标记添加到数据库中的字段或使用表单提交.
设置Content-Type标头将影响Web浏览器处理您的内容的方式.当大多数主流Web浏览器遇到Content-Type of text/plain时,它们将在浏览器窗口中呈现原始文本源(与HTML呈现的源相反).这是看见之间的区别
<b>foo</b>
Run Code Online (Sandbox Code Playgroud)
要么
FOO
此外,在使用XMLHttpRequest对象时,Content-Type标头将影响浏览器序列化返回结果的方式.在收购jQuery和Prototype等AJAX框架之前,AJAX响应的一个常见问题是将Content-Type设置为text/html而不是text/xml.如果Content-Type是text/plain,则可能会出现类似的问题.