为什么可以';当Python可以的时候,我是否只向文本文件添加内容类型:text/html?

为什么可以';当Python可以的时候,我是否只向文本文件添加内容类型:text/html?,python,html,http-headers,Python,Html,Http Headers,对你们大多数人来说,这似乎是一个愚蠢的问题,但为什么我不能这样做: Content-Type:text/html <html> <head><title>Hello</title></head> <body> <h1>Hello, World!</h1> </body> </html> 一切正常。我看不出有什么区别,它们都在浏览器请求的信息顶部打印内容类型:text/htm

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

Content-Type:text/html

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

一切正常。我看不出有什么区别,它们都在浏览器请求的信息顶部打印
内容类型:text/html

当浏览器直接从文件读取时,它们不寻找http头。当python脚本响应浏览器的http请求时,情况就不同了,浏览器希望第一行是http头,然后按照预期进行解释。

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

因此,在第一种情况下,您的Web服务器从扩展猜测内容类型,并在发送文件内容之前发送适当的头。在第二种情况下,脚本发送了内容类型的覆盖头。然后,就插入其他标准http头而言,web服务器将决定如何处理此问题

编辑: Apache使用mod_mine和/etc/mime.types将文件扩展名映射到内容类型。它可能默认为text/plain,表示任何它不理解的扩展名

只有当浏览器没有可使用的内容类型时,它才可能关闭扩展


普通文件被假定为只包含数据,头由web服务器生成,而cgi脚本被期望/允许生成它们自己的头。

第二个是服务器端cgi脚本?你在用什么框架?我没有用任何框架。这纯粹是出于我自己的好奇心,我从来没有真正探索过头是如何工作的。如果你能说服你的浏览器通过
http
而不是
file
访问文件系统,你就可以了。浏览器如何决定是否查找头?它是否关闭了扩展名?@MrMisterMan将有一个配置,告诉服务器是将文件作为脚本运行,还是仅作为数据使用。这可以是它所在的目录,也可以是文件扩展名。而决定内容类型的是服务器机器,而不是浏览器。浏览器什么时候不会从扩展猜出内容类型?我没有尝试任何扩展名,但它仍然将其解释为文本文件。是否在httpd.conf文件中指定了有关如何处理某些文件的规则?请告诉我们有关如何设置web服务器以及如何测试它的更多信息。我正在共享主机帐户上使用cpanel。我没有访问httpd.conf的权限。我的.htaccess文件中没有什么特别的内容。我正在通过上传文件进行测试,正如你在我的问题中看到的那样,上传到我的服务器的根目录和/cgi-bin/Bare中。我并不是真的想实现什么,这纯粹是出于我自己的好奇心,也是为了更好地理解服务器/头等。谢谢,我没有其他问题了,法官大人。
#!/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>'