为什么我不能在Python可以的时候将Content-Type:text / html添加到文本文件中?

时间:2011-10-21 07:30:03

标签: python html http-headers

这对大多数人来说似乎是一个愚蠢的问题,但为什么我不能这样做:

Content-Type:text/html

<html>
<head><title>Hello</title></head>
<body>
<h1>Hello, World!</h1>
</body>
</html>

在一个名为test.txt的文件中,当我的Python脚本可以执行此操作时,在我的浏览器中将其作为html打开:

#!/usr/bin/python

print "Content-type:text/html\r\n\r\n"
print '<html>'
print '<head>'
print '<title>Hello Word - First CGI Program</title>'
print '</head>'
print '<body>'
print '<h2>Hello Word! This is my first CGI program</h2>'
print '</body>'
print '</html>'

一切正常。我看不出有任何区别,他们都在浏览器请求的信息顶部打印Content-Type:text/html

2 个答案:

答案 0 :(得分:4)

HTTP响应由标题和正文组成,由收到的第一个\r\n\r\n分隔。当Web服务器发送普通文件时,它已经发送了所有标头和分隔符 但是,当运行脚本时,标题不会自动发送。

因此,在第一种情况下,您的网络服务器在发送文件内容之前从扩展中猜出了内容类型,并发送了相应的标头。在第二个脚本中,脚本发送了一个覆盖内容类型的标题。然后,就插入其他标准http标头而言,它是如何处理这个网络服务器的。

编辑: Apache使用mod_mine和/etc/mime.types将文件扩展名映射到Content-Types。对于没有它理解的扩展名的任何东西,它可能默认为text / plain。

只有在没有要使用的Content-Type时,浏览器才可以使用扩展程序。

假设普通文件只包含数据,标题由Web服务器生成,而cgi脚本需要/允许生成自己的标题。

答案 1 :(得分:3)

当浏览器直接从文件中读取时,他们不会查找http标头。当python脚本回答浏览器的http请求时,情况会有所不同,浏览器希望第一行是http标题,然后按照您的预期解释。