真的发生了。我在PHP中进行了测试以确认这一点。
我创建了一个test.php文件并放置:
<?php
error_log('Downloading...');
header('Content-type: application/force-download');
header('Content-Disposition: attachment; filename="test.txt"');
echo 'test android download';
?>
所以,当我通过任何Android移动浏览器打开www.myurl / test.php时,在error_log.log中我会“下载...”两次。
当我在任何其他移动操作系统(Windows,IOS等)中打开相同的URL时,我在error_log.log文件中只有一次“正在下载...”。
有谁知道发生了什么以及如何避免这种情况?
这对我来说是个大问题,因为当有人下载文件时我会执行用户收费。而现在Android手机有1个下载文件的收费。
答案 0 :(得分:1)
我走到了尽头:(
http://code.google.com/p/android/issues/detail?id=1978
浏览器需要点击服务器以确定某些内容是下载的,并且下载管理器必须单独联系服务器进行下载。
因此,Android启动了第一个请求打开对话框“你确定吗? - 是/否”。 并且如果用户点击“是”Android转发请求到Android DownloadManager并且经理发送第二个请求下载文件。 (某些Android版本立即向DownloadManager发送请求)
问题是请求,第一和第二,都是GET(不是HEAD)的类型。
答案 1 :(得分:0)
在我的情况下,我收到两个请求。 第一个抛出带有描述java.net.SocketException的org.apache.catalina.connector.ClientAbortException:通过peer重置连接:socket
所以我抓住了那个异常并写了日志。 我想你也可以这样做,只有在成功下载后才能向客户收费