【问题标题】:Android is sending 2 requests to download one file via mobile browserAndroid 正在发送 2 个请求以通过移动浏览器下载一个文件
【发布时间】:2013-01-10 13:28:43
【问题描述】:

这真的发生了。我在 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 个文件需要 2 次费用。

【问题讨论】:

  • "有谁知道发生了什么以及如何避免这种情况?" -- 如果我不得不猜测,Android 会发出一个 HTTP HEAD 请求,然后是 HTTP GET/POST/whatever 请求。
  • .. 所以如果用户用这个 url 刷新它的浏览器,他将被收取两次费用??? (小心这种解决方案)
  • @CommonsWare 我不确定我理解你吗?文件下载成功。
  • “下载文件成功”——这让我很吃惊,因为Content-Disposition: attachment 从来没有工作过,但如果是现在,这是一个可喜的改进。您当然应该在 Android 2.x 上进行测试,看看您的方法是否有效。 “我不确定我是否理解你?” -- 如果你不知道什么是 HTTP HEAD 请求,那我就无能为力了。

标签: android download billing mobile-browser


【解决方案1】:

我在死胡同:(

http://code.google.com/p/android/issues/detail?id=1978

浏览器需要访问服务器来确定某个东西是下载,然后下载管理器必须单独联系服务器进行下载。

因此,Android 会启动第一个请求以打开“您确定吗? - 是/否”对话框。 如果用户单击“是”Android 转发请求到 Android 下载管理器和管理器发送第二个请求以下载文件。 (某些Android版本会立即向DownloadManager发送请求)

问题是第一个和第二个请求都是 GET 类型(不是 HEAD)。

【讨论】:

  • 我遇到了同样的问题。但在第一个请求中,我得到了 org.apache.catalina.connector.ClientAbortException,描述为 java.net.SocketException: Connection reset by peer: socket
【解决方案2】:

就我而言,我收到了两个请求。 第一个抛出 org.apache.catalina.connector.ClientAbortException,描述为 java.net.SocketException: Connection reset by peer: socket

所以我只是捕获该异常并写入日志。 我想你也可以这样做,只有在成功下载后才向客户收费

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-10-16
    • 1970-01-01
    • 2018-08-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-26
    • 2010-11-05
    相关资源
    最近更新 更多