我有一个报摊应用程序,它使用一个栏来显示下载进度。它的工作原理是从文件下载中获取内容长度。这曾经在我们的开发服务器上工作,但是我们使用nginx服务器进行生产,它似乎不会返回content-length标头。
有人知道为什么这会是一个更好的解决方案吗?
谢谢
发布于 2013-10-03 22:56:43
缺少Content-Length头部可能是因为您在活动服务器上启用了压缩,但在开发服务器上没有启用压缩。因为Nginx在发送数据时会进行压缩,所以不可能在响应开始时发送Content-Length报头,因为服务器无法知道数据压缩后的大小。
如果您需要下载进度的Content-Length标头,那么最好的选择是自己压缩内容,将Content-Length标头设置为压缩数据的大小,然后提供压缩数据。
虽然对于第一个下载该内容的用户来说,这会稍微慢一些,但是如果您对压缩文件使用唯一的文件名,并且文件名是从用户请求中的参数生成的,那么您可以将其用作有效的缓存机制。然后,您还可以使用Nginx的x-sendfile功能来减少服务器上的负载。
顺便说一句,如果你正在使用亚马逊CloudFront CDN (可能还有其他人),你真的应该设置Content-Length报头,因为如果没有Content-Length报头,并且从服务器到CloudFront的下载在传输过程中中断,那么它们可能会服务于部分(也就是损坏的)文件。
https://stackoverflow.com/questions/19134428
复制相似问题