Apache 发送“Content-Length:0”,如何修复?

Apache 发送“Content-Length:0”,如何修复?

我正在使用 Apache 服务器,它发送的 Content-Length = 0 值阻止了文件下载,请参阅 -http://www.youtubedroid.com/download2.php?v=_3XcMEKNws0&title=Akhila+%2CMumbai+reloaded%2CSuper+dancer+2&hq=0,这是我的.htaccess 内容:

SetEnv no-gzip dont-vary

以下是服务器发送的标头:

HTTP/1.1 200 OK
Date: Tue, 15 Dec 2009 06:12:11 GMT
Server: Apache/2.2.14 (Unix) mod_ssl/2.2.14 OpenSSL/0.9.8e-fips-rhel5 mod_bwlimited/1.4
X-Powered-By: PHP/5.2.11
Content-Description: File Transfer
Content-Disposition: attachment; filename="Akhila ,Mumbai reloaded,Super dancer 2.mp3"
Content-Transfer-Encoding: binary
Expires: 0
Cache-Control: must-revalidate, post-check=0, pre-check=0
Pragma: public
X-Sendfile: ./tmp/64eb3b185e38af95c15405ffb0606e76.mp3
Content-Length: 0
Keep-Alive: timeout=5, max=95
Connection: Keep-Alive
Content-Type: application/octet-stream

请告诉我如何解决这个问题?

答案1

apache 不会发送 X-Sendfile 标头,因此您可能没有在该虚拟主机中启用 xsendfile。启用 XSendFile 后,apache 将删除 X-SendFile 标头并发送文件。

答案2

请求函数

如果这两个长度不同(即,如果存在 Transfer-Encoding 标头字段),则不得发送 Content-Length 标头字段。如果收到的消息同时包含 Transfer-Encoding 标头字段和 Content-Length 标头字段,则必须忽略后者。

因此,看起来您的服务器可以正确处理此特定请求。这意味着修复方法是在标头中发送正确的文件长度,而不是发送 Content-Transfer-Encoding 标头(如果您对应用程序发送的内容具有这种级别的控制权)。

相关内容