阿帕奇2 "Response header name '<!--' contains invalid characters, aborting request"

Apache2 "Response header name '<!--' contains invalid characters, aborting request"

编辑

问题与 http header 无关。它是一个在定义之前在 cgi/python 脚本中调用的变量。以防万一其他人也尝试使用类似的错误消息但找不到原因。


我继承了一个基于 apache2/python/cgi 脚本的网站,我正在努力维护,但有时我会遇到一些无用的错误。在这种情况下,单击页面上的元素时会得到 The server encountered an internal error or misconfiguration and was unable to complete your request.。错误日志为我提供了以下信息:
[Fri Jul 28 14:11:15.150877 2017] [http:error] [pid 1727] [client 193.174.111.250:53426] AH02429: Response header name '<!--' contains invalid characters, aborting request

基于类似的 question,我假设错误是很新的,但我找不到问题所在。特别是因为 link / 脚本名称保持不变。它在第一次打开网站时有效,但当我单击不指向其他 site/script 的内容时停止工作。这怎么能是header的错呢?

以防万一,这里是生成网页开头的代码:

Code = "Content-Type: text/html\n\n"
Code += "<!DOCTYPE HTML PUBLIC '-//W3C//DTD HTML 4.0 Transitional//EN'>\n<html>\n"    
Code += "<head>\n  <title>BACTOME: RELATIVE EXPRESSIONS</title>\n"
...

据我现在的理解,第一行构成了我仅有的 HTTP header。没有错误日志中所述的'<!--'。 header 是否需要其他任何东西才能正常工作?

PS:或者,如果有任何简单的方法可以将这些一般性错误转化为更详细的错误,我也会对此非常感兴趣。

在我的例子中,问题是打印语句输出的对齐方式

之前:

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

同样的错误,在类似的打印案例中,是由于数据库整理;将其更改为 UTF-8 对我有帮助。

@eorochena 和@dogacan 的回答是特例。总的来说:

如果在 Python CGI 脚本中引发异常,您会收到此错误。

找出问题所在的一个好方法是在 CGI 脚本的开头调用 Python 的 CGI 模块调试辅助函数,如下所示:

cgitb.enable(display=0, logdir=OUTDIR)

其中 OUTDIR 是目录名称。如果您的 CGI 脚本引发了一些异常,那么 Apache 会将一个 HTML 文件放入该目录。该文件有一些垃圾名称,例如 tmpw4olz3xr.html,并且在其末尾包含包含在 HTML 注释中的 Python 堆栈跟踪(<!-- ... --> ).这些信息可以帮助您解决问题。

备注:

  1. display=0参数表示不显示错误详情 在浏览器中发送给您的用户。
  2. 你应该注释掉 cgitb.enable(...) 当您确定您的脚本工作正常时。

目的

我认为使用 cgitb 的目的是从 Web 浏览器获取全部信息以帮助 debugging.So 我们应该纠正问题,而不是避免问题。

做一些研究

我们来看一下资料:

AH02429: Response header name '<!--' contains invalid characters, aborting request

它表示 header 名称包含无效字符,因此我对 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>'''

这个函数returns字符<!--。但是 apache httpd 将其视为不应包含 <!-- 的响应 header 名称。 python.

的 Issue Tracker 中也有一个开放的 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>'''

然后就很好用了,很好view.Anyone知道在ngix是什么情况吗?