【问题标题】:Content-Length header is not getting in Android 2.3 above browserContent-Length 标头未在 Android 2.3 以上的浏览器中获取
【发布时间】:2013-01-16 19:12:22
【问题描述】:

我有一个混合应用程序,其中一个简单的 php 页面将打开其中包含一些文件链接的内容,并且从我的 android 包装器中我已经实现了文件的下载功能。

因此,为了方便用户,我在下载文件时显示了下载的长度和进度,因为我的应用程序服务器设置了一个内容长度标头来传递设备上的大小,但我面临的问题令人惊讶。 文件长度在 Android 2.2 中运行良好。我得到了正确的内容标题,但在上面的 Android 2.3 中,我得到了较小文件的内容长度,但对于较大的文件,我什至没有得到标题字段。

con.getHeaderField("content-length");

在 Android 2.3 以上的情况下返回 null。

那么 2.3 以上的用户代理是否有大小限制,因为如果它在 2.2 中工作正常,则意味着服务器端没有问题,只有设备用户代理有问题。

更新

我已经尝试过使用不同大小的文件,并且在 Android 2.3 以上版本中也可以正常工作到 60KB。

【问题讨论】:

    标签: php android content-length


    【解决方案1】:

    听起来客户端可能正在对文件进行分块。检查是否存在以下标头:

    Transfer-Encoding: chunked
    

    如果存在,则请求被分块,您将不会获得 Content-Length 标头。

    更多详情请见http://en.wikipedia.org/wiki/Chunked_transfer_encoding

    【讨论】:

    • 我发现了一个帖子:stackoverflow.com/questions/11472997/…,声称 Android 中的分块编码是在 2.3 中首次支持的。
    • FWIW,分块编码的优点是上传速度更快,客户端不必读取整个文件。相反,它可以流式传输文件。这样做的缺点是文件大小未预先指示,因此您无法轻松显示上传进度。
    • 那么为什么我要获得较小长度文件的标题。
    • 可能是一种优化。我猜测分块会在某个阈值处开始。对于小文件,分块不会节省太多时间。对于较大的,它确实如此。
    • 我已经检查了不同大小的文件,并且在 Android 2.3 以上版本中对于小于 60KB 的文件也可以正常工作。
    猜你喜欢
    • 2016-08-25
    • 1970-01-01
    • 2022-06-10
    • 1970-01-01
    • 2017-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-26
    相关资源
    最近更新 更多