0

我有一个使用栏显示下载进度的报亭应用程序。它通过从文件下载中获取内容长度来工作。这曾经在我们的开发服务器上工作,但是我们使用 nginx 服务器进行生产,它似乎没有返回内容长度标头。

有谁知道为什么会这样或更好的解决方案?

谢谢

4

1 回答 1

0

缺少 Content-Length 标头可能是由于您在实时服务器上启用了压缩,但在开发服务器上未启用。由于 Nginx 在发送数据时会对其进行压缩,因此无法在响应开始时发送 Content-Length 标头,因为服务器无法知道压缩后数据的大小。

如果下载进度需要 Content-Length 标头,那么最好的选择是自己压缩内容,将 Content-Length 标头设置为压缩数据的大小,然后提供压缩数据。

虽然这对于第一个用户下载该内容的速度会稍慢一些,但如果您对压缩文件使用唯一的文件名,并且文件名由用户请求中的参数生成,则可以将其用作有效的缓存机制。然后,您还可以使用 Nginx 的x-sendfile功能来减少服务器上的负载。

顺便说一句,如果您使用的是 Amazon CloudFront CDN(可能还有其他),那么您真的应该设置 Content-Length 标头,因为如果没有 Content-Length 标头并且从您的服务器下载,它们可以提供部分(又名损坏)文件到 CloudFront 在传输过程中中断。

于 2013-10-03T14:56:43.213 回答