打印时出现内部服务器错误:
这是我的代码(python):
print "HTTP/1.0 200 OK\n\r",
print "Content-Type: text/html\n\r",
print "\n\r",
错误日志显示:
malformed header from script 'bad_req.py': Bad header: HTTP/1.0 200 OK
我研究过这个问题,找不到任何解决方案。任何帮助都会非常感激。
答案 0 :(得分:1)
您要在\n\r
中结束行。 (LF
+ CR
)。
根据HTTP1.0 page(第2.2节):
HTTP / 1.0将八位位组序列
CR
LF
定义为除Entity-Body之外的所有协议元素的行尾标记(有关容忍应用程序,请参阅附录B)。
所以你应该在\r\n
中结束你的行。
答案 1 :(得分:1)
是的,肯定是错误的行尾。
你应该有" \ r \ n",但是,如果您将脚本用作CGI,则不必担心。
您只能使用" \ n"一切都会奏效。
另外,我不认为Apache会让你选择协议使用它,因此你不应该使用你的第一行:
print "HTTP/1.0 200 OK"
200 OK是一个状态,无论如何都将返回
如果确实需要更改状态,请使用Status HTTP标头,Apache将适应它:
打印"状态:400禁止"
您的脚本应如下所示:
# If you want status :D
print "Status: 200 Some nasty extra status"
print "Content-Type: text/html\n"
# End of headers
print "<h1>Some HTML here</h1>"
请注意,我使用了&#34; \ n&#34;只在最后一个标题上,而不是其他地方。
这是因为印刷品增加了&#34; \ n&#34;除非你另有说明,否则最后一个标题必须与两个新行&#34; \ r \ n \ r \ n \ n&#34;的文档正文分开,这就是为什么你应该只在最后一个标题上使用它。它表示标题的结尾。
或者你可以这样做:
print "Content-Type: text/html"
print
没有args的打印只会打印&#34; \ n&#34;而且,正如我之前所说,Apache将正确解释为&#34; \ r \ n&#34;
在您的情况下,您的标题看起来像这个repr:
"""
HTTP/1.0 200 OK
\rContent-Type: text/html
\r
\r
"""
这显然是一个错误的标题。 :d
如果您没有使用脚本,因为CGI规则可能会有所不同,但只是略有不同。
如果必须强制执行HTTP / 1.0行为,请使用标题Connection标头:
print "Connection: close"
虽然连接是否将被关闭仍然在客户端和Apache的超时。我不确定协议是否会更改为HTTP 1.0。默认值为1.1