Android 如果在股票浏览器上受密码保护的站点之后,APK下载失败

Android 如果在股票浏览器上受密码保护的站点之后,APK下载失败,android,ruby-on-rails,Android,Ruby On Rails,我在使用rails的服务器上为APK提供服务时遇到问题。如果下载链接是公开的,我可以为APK服务。但是,我想用密码保护它。如果我将文件移到需要HTTP身份验证的URL后面,那么它将在股票浏览器上失败,并立即出现下载不成功的 如果我安装并运行firefox,firefox就能够下载APK并正确安装 有人知道如何使用Android的股票浏览器来实现这一点吗 我已将MIME类型添加到服务器: Mime::Type.register "application/vnd.android.package-ar

我在使用rails的服务器上为APK提供服务时遇到问题。如果下载链接是公开的,我可以为APK服务。但是,我想用密码保护它。如果我将文件移到需要HTTP身份验证的URL后面,那么它将在股票浏览器上失败,并立即出现
下载不成功的

如果我安装并运行firefox,firefox就能够下载APK并正确安装

有人知道如何使用Android的股票浏览器来实现这一点吗

我已将
MIME类型添加到服务器:

Mime::Type.register "application/vnd.android.package-archive", :apk
我在HTTP身份验证后尝试发送_文件:

send_file "android.apk", :type => 'application/vnd.android.package-archive'
~  curl -s -D- private/android.apk -o/dev/null      
HTTP/1.1 200 OK
Server: nginx/1.4.1
Date: Thu, 11 Jul 2013 20:11:53 GMT
Content-Type: application/octet-stream
Transfer-Encoding: chunked
Connection: keep-alive
Status: 200 OK
X-Frame-Options: SAMEORIGIN
X-XSS-Protection: 1; mode=block
X-Content-Type-Options: nosniff
X-UA-Compatible: chrome=1 
Content-Disposition: attachment; filename="SironaVideoSurvey.apk"
Content-Transfer-Encoding: binary
Cache-Control: private
Set-Cookie: request_method=GET; path=/
X-Request-Id: 6b99f5e5-87f8-4f8c-816c-0034265b3991
X-Runtime: 0.016140
来自/public的成功HTTP头:

~  curl -s -D- android.apk -o/dev/null
HTTP/1.1 200 OK
Server: nginx/1.4.1
Date: Thu, 11 Jul 2013 20:06:43 GMT
Content-Type: application/octet-stream
Content-Length: 38673086
Last-Modified: Thu, 11 Jul 2013 20:05:12 GMT
Connection: keep-alive
ETag: "51df0ff8-24e1abe"
Accept-Ranges: bytes
HTTP身份验证后面的HTTP标头失败:

send_file "android.apk", :type => 'application/vnd.android.package-archive'
~  curl -s -D- private/android.apk -o/dev/null      
HTTP/1.1 200 OK
Server: nginx/1.4.1
Date: Thu, 11 Jul 2013 20:11:53 GMT
Content-Type: application/octet-stream
Transfer-Encoding: chunked
Connection: keep-alive
Status: 200 OK
X-Frame-Options: SAMEORIGIN
X-XSS-Protection: 1; mode=block
X-Content-Type-Options: nosniff
X-UA-Compatible: chrome=1 
Content-Disposition: attachment; filename="SironaVideoSurvey.apk"
Content-Transfer-Encoding: binary
Cache-Control: private
Set-Cookie: request_method=GET; path=/
X-Request-Id: 6b99f5e5-87f8-4f8c-816c-0034265b3991
X-Runtime: 0.016140
这看起来是安卓系统中的一个(~6岁!!)bug:

显然,我们所能做的就是把这件事曝光。在互联网上还可以找到其他的黑客解决方法,你可以自己找到,但我不推荐它们中的大多数作为通用解决方案

也许可以尝试将文件扩展名更改为全部大写,如下所示:

因此,这条线变成:

内容配置:附件;filename=“SironaVideoSurvey.APK”


如果这不起作用,我建议您告诉您的客户使用不同的非库存(非Chrome!)浏览器。:/祝你好运。

提供登录页面,而不是使用HTTP身份验证。

使用PHP和Apache2,您可以执行以下操作:

.htaccess 您还可以将其放入Apache2的
站点启用
文件夹中的
*.conf
文件中。如果要使用
.htaccess
文件,请确保在Apache2配置中启用了
AllowOverride All
,否则Apache2将忽略
.htaccess
文件

login.php 笔记
  • 您可以为其他脚本语言(如JSP或RubyonRails)或web服务器(如Nginx)调整该策略。请注意,
    Options-index
    是可选的,但建议使用,因为它可以防止目录列表

  • 默认情况下,会话在24分钟不活动后过期。这是由
    php.ini
    中的
    session.gc\u maxlifest
    定义的。可以使用PHP添加注销功能来删除会话的临时文件

  • 这个例子是一个只有一个密码的简单登录页面。有了PHP的强大功能,您可以将其扩展到您可以想象的任何庞大的身份验证管理中。无论是多个用户名用户、用户配置文件的数据库存储、有限的访问控制、基于web的用户管理等等

  • 是的,这适用于在Android的旧股票浏览器上进行的下载,名为“浏览器”,其中HTTP身份验证失败


  • “立即”是指没有提示您进行身份验证吗?或者您提供了凭据,但失败了?抱歉-将更新问题以反映这一点。首先提示我进行身份验证,然后开始下载。下载一开始就失败了。该文件仅在下载历史中命名为“您可以使用
    curl
    或其他方法转储成功请求的HTTP头吗?我怀疑这些标题可能会给我们一些线索。例如,如果标题包括
    内容处置:附件
    ,则可能需要对所提供的内容进行一些调整:作为编辑转储。在内容头中,successful from/public看起来要简单得多。我尝试过使用你链接的建议,但没有成功。我将尝试模仿内容标题/public正在提供的功能,尽管一位同事可以在他的Android设备上使用最新版本的Chrome beta(28.0.1500.64)下载该功能。但Chrome版本27却没有。Android 4.2.2的股票浏览器也失败了,谢谢你挖掘出了确切的问题!我最终尝试将扩展名重命名为all caps,但不幸的是,这没有起作用。我们在一个公共目录中提供APK,并尽力隐藏URL。APK不包含任何私人或敏感数据,所以这次我们很幸运!
    Options -Indexes
    RewriteEngine off