Apache AH01328行过长尝试下载损坏的文件时出错

时间:2019-07-02 07:41:54

标签: apache tomcat tomcat8

使用Apache作为Apache Tomcat服务器的反向代理时,我一直收到此错误,每当我尝试下载损坏的PDF时,服务器的响应就为空,并在Apache日志中得到此错误:

AH01328: Line too long, URI /uri/moreruri/docNum, referer: https://example.com/uri/moreruri/docNum

我试图在本地服务器上再次遇到相同的错误(同样是Apache和Apache Tomcat),并且没有发生。

有什么想法可能会发生这种情况吗?预先感谢。

1 个答案:

答案 0 :(得分:0)

由于/conf/httpd.conf配置文件中的这一行而发生此错误:

AddOutputFilterByType SUBSTITUTE application/pdf

Apache试图做的是,只要完成GET并且该GET返回PDF文件,它就会尝试读取该文件并替换特定的文本字符串。

这些替代定义在此行:

Substitute "s|http://localhost:8081|https://example.com|in"

当apache收到GET并发现我们正在请求PDF文件时,它会尝试读取它并替换那些字符串,但是由于文件损坏,apache无法读取它。

然后将所有PDF内容都放入响应主体内的一行中,该行恰好(在我们的特定情况下)大于默认的最大行长(以MB为单位)。

这导致响应被削减,而我们最终得到的是空响应。

我们也有这行:

SubstituteMaxLineLength 5M

它会更改默认的最大行长,但是文件的权重为20MB,此处我们将最大长度设置为5MB,因此在这种情况下不适用。

我们解决该问题的方法是仅删除第一行,因为我们不需要更改PDF的内容:

AddOutputFilterByType SUBSTITUTE application/pdf

但是,您可能希望使用此行更改最大长度:

SubstituteMaxLineLength LENGTH

我不建议这样做,因为出于安全原因默认情况下该限制较低。