修改
问题与http标头无关。它是在定义之前在cgi / python脚本中调用的变量。以防其他人也尝试使用这样的错误消息但无法找到原因。
我继承了一个基于apache2 / python / cgi脚本的网站,我试图维护它,但有时候我正在努力解决真正无用的错误。在这种情况下,我得到服务器遇到内部错误或配置错误,无法完成您的请求。
点击页面上的元素。错误日志为我提供了以下信息:
[Fri Jul 28 14:11:15.150877 2017] [http:error] [pid 1727] [client 193.174.111.250:53426] AH02429:响应头名称'<! - '包含无效字符,中止请求代码>
基于类似的问题,我假设错误是相当新的,但我找不到问题。特别是因为链接/脚本名称保持不变。它在第一次打开网站时有效,但是当我点击不引用我不同网站/脚本的内容时它会停止工作。怎么可能是标题的错?
以防万一,以下是生成网页开头的代码:
Code =“Content-Type:text / html \ n \ n”
代码+ =“<!DOCTYPE HTML PUBLIC' - // W3C // DTD HTML 4.0 Transitional // EN'> \ n \ n”
代码+ =“ \ n BACTOME:RELATIVE EXPRESSIONS \ n”
...
代码>
据我所知,第一行构成了我唯一的HTTP头。错误日志中没有'<! - '
。标题是否需要其他任何功能?
PS:或者,如果有任何简单的方法可以将这些通用错误转换为更冗长的错误,我也会对此非常感兴趣。
答案 0 :(得分:1)
@eorochena和@dogacan的回答是特殊情况。一般来说:
如果Python CGI脚本中引发了异常,则会出现此错误。
找出问题所在的好方法是在CGI脚本的开头调用Python的CGI模块调试助手功能,如下所示:
cgitb.enable(display=0, logdir=OUTDIR)
其中OUTDIR
是目录名称。如果您的CGI脚本引发某些异常,则Apache将HTML文件放入该目录。该文件具有一些垃圾名称,例如tmpw4olz3xr.html
,并且文件末尾包含HTML注释(<!--
... -->
内的Python堆栈跟踪。这是可以帮助您解决问题的信息。
注意:
display=0
参数表示未显示错误详细信息
在浏览器中找到您的用户。cgitb.enable(...)
,当您确定脚本可以正常运行时。答案 1 :(得分:1)
我认为使用cgitb的目的是从Web浏览器获取全部信息以帮助调试。因此,我们建议纠正问题,而不是避免出现问题。
让我们看一下这些信息:
AH02429: Response header name '<!--' contains invalid characters, aborting request
它指示标题名称包含无效字符,因此我对cgitb.py代码进行了如下研究:
def reset():
"""Return a string that resets the CGI and browser to a known state."""
return '''<!--: spam
Content-Type: text/html
<body bgcolor="#f0f0f8"><font color="#f0f0f8" size="-5"> -->
<body bgcolor="#f0f0f8"><font color="#f0f0f8" size="-5"> --> -->
</font> </font> </font> </script> </object> </blockquote> </pre>
</table> </table> </table> </table> </table> </font> </font> </font>'''
此函数返回字符<!--
。但是apache httpd将其视为不应包含<!--
的响应标头名称。
python的问题跟踪器中还有一个打开的issue8704。
我不知道我们应该删除cgitb.py中的代码还是调整apache httpd的配置。我的解决方案是删除一些代码,如下所示:
return '''
<body bgcolor="#f0f0f8"><font color="#f0f0f8" size="-5"> -->
<body bgcolor="#f0f0f8"><font color="#f0f0f8" size="-5"> --> -->
</font> </font> </font> </script> </object> </blockquote> </pre>
</table> </table> </table> </table> </table> </font> </font> </font>'''
那它工作得很好,而且视野很好。任何人都知道ngix的情况吗?
答案 2 :(得分:0)
在我的情况下,问题是print语句输出的对齐方式
在:
try:
if <some-condition>
message = "%s" % filename
else:
message = "file not found"
print """\n
Content-Type: text/html\n
<html><body>
<p>%s</p>
</body></html>
""" % (message,)
except Exception as e:
print e
后:
try:
if <some-condition>:
message = "%s" % filename
else:
message = "file not found"
print """\
Content-Type: text/html\n
<html><body>
<p>%s</p>
</body></html>
""" % (message,)
except Exception as e:
print e
答案 3 :(得分:0)
对于同样的错误,在类似的打印案例中,这是由于数据库整理;把它换成UTF-8对我有帮助。