我一直在开发一个使用ASIHTTPRequest下载一些PDF文件的iPad应用程序。我一直在使用progress delegate为显示文件下载进度的用户显示进度条。这是ASIHTTPRequest设置代码。
request = [ASIHTTPRequest requestWithURL:url];
[request setShouldContinueWhenAppEntersBackground:YES];
[request setDownloadDestinationPath:issue.pdfFilepath];
[request setDownloadProgressDelegate:vc.progressView];
request.showAccurateProgress = YES;
[request setDelegate:self];
[request startAsynchronous];
从我的开发服务器(“好的服务器”)读取这一切都非常好。但是,是时候将此应用程序的服务器端移动到我的客户端服务器(“坏服务器”)。我把所有东西都移了过来,我仍然可以成功下载PDF,但进度条在下载完成之前不会更新(而不是整个下载过程)。
这是我用来输出PDF的PHP :(请注意,我也在根据请求的URL在我的数据库中增加视图计数等,所以我不能直接从应用程序访问PDF。我需要从PHP脚本输出PDF。)
header('Content-type: application/pdf');
header('Content-Disposition:inline filename="downloaded.pdf"');
header('Content-Length: '.remote_filesize($pdfUrl) );
readfile($pdfUrl);
我已经能够确定该应用未更新进度条,因为该应用最初并不知道PDF的总大小。我已经通过在Safari中打开这两个文件来确定这一点。
我已经检查过了,我的remote_filesize()函数在两台服务器上都返回21331445(大约20 MB)。
所以,我在这一点上的结论是,由于某种原因,即使我已经指定了“坏服务器”,也没有正确设置Content-Length标头。 php.ini文件中是否有可能阻止此操作的设置?任何人都可以提供有关如何进一步解决或解决此问题的任何其他建议吗?
谢谢!
更新5/18/11
感谢AJ在Firefox中检查标题的出色建议,我发现“坏服务器”正在使用gzip压缩,而不是设置我的Conent-Length。这是比较:
良好的服务器
Server: Apache
X-Powered-By: PHP/5.3.3
Content-Disposition: inline filename="downloaded.pdf"
Content-Length: 21331445
Keep-Alive: timeout=15, max=100
Connection: Keep-Alive
Content-Type: application/pdf
200 OK
糟糕的服务器
Server: Apache
X-Powered-By: PHP/5.2.17
Content-Disposition: inline filename="downloaded.pdf"
Vary: Accept-Encoding
Content-Encoding: gzip
Keep-Alive: timeout=10, max=30
Connection: Keep-Alive
Transfer-Encoding: chunked
Content-Type: application/pdf
200 OK
我发现有些文章建议通过确保php.ini文件中的“output_buffering = Off”和“zlib.output_compression = Off”来关闭gzip。但情况确实如此,我的两个服务器的phpinfo()都显示output_buffering和output_compression已关闭。
我们当然走在正确的轨道上。有什么建议来解释为什么这会被gzip压缩?以及如何预防?
谢谢!
最终更新:已解决
我在托管服务提供商的网站上找到了一个论坛,有人解释说gzip最近已经开启,并详细介绍了如何阻止它。 http://www.bluehostforum.com/showthread.php?18996-Turning-off-Gzip
基本上,我将以下内容添加到我的.htaccess文件中,该文件关闭了gzip压缩。然后,我得到了Content-Length标题和我的进度条。
SetEnv no-gzip dont-vary
非常感谢!
答案 0 :(得分:3)
只需将结果作为答案发布,这样我就可以将问题标记为已回答。感谢大家的有益评论!
我在托管服务提供商的网站上找到了一个论坛,有人解释说gzip最近已经开启,并详细介绍了如何阻止它。 http://www.bluehostforum.com/showthread.php?18996-Turning-off-Gzip
基本上,我将以下内容添加到我的.htaccess文件中,该文件关闭了gzip压缩。然后,我得到了Content-Length标题和我的进度条。
SetEnv no-gzip dont-vary