首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从后台启动混合Android应用程序时HTTP调用中的奇怪行为

从后台启动混合Android应用程序时HTTP调用中的奇怪行为
EN

Stack Overflow用户
提问于 2019-03-27 19:26:50
回答 1查看 94关注 0票数 0

也许,这个问题的标题被认为是,不是一个有效的问题,但是我们已经花费了4-5天的时间来调试这个问题。以下是背景:

  1. 我们有一个混合应用程序(Ionic3 + Cordova)
  2. 我们在欧洲有一家电信网络运营商
  3. 我们已经为他们提供了一个要白名单的URL,当用户使用该运营商的移动网络时,当用户使用该移动网络时,这个URL就会以用户的移动号码来充实(该电信运营商)。
  4. 该URL必须是http URL,而不是https
  5. 因此,我们在代码库中添加了一个角形HTTP拦截器,将https转换为仅用于该URL的http。
  6. Android移动应用程序一启动就会点击该URL

现在是工作/预期行为:

当应用程序刚刚启动(没有背景或者被主屏幕杀死)时,应用程序点击该URL,网络操作员识别该URL,然后我们收到用户的移动电话号码。

这里是不起作用的场景:

现在,我们按下Android的后退按钮,优雅地退出应用程序。这意味着Android应用程序处于后台&被杀。现在,我们再次从应用程序的图标启动该应用程序,并且头文件的浓缩不起作用。

现在,我们使用tcpflow命令添加了各种tcp级别日志:

代码语言:javascript
复制
sudo tcpflow -i eth0 port 443 -C -e http
sudo tcpflow -i eth0 port 80 -C -e http

我们发现,每当应用程序从后台重新启动(因此点击该URL),整个请求都是加密的,但是我们接收的URL是http 端口是443

我们在我们的http拦截器和Android手机中添加了各种日志,但是我们无法确定根本原因。有人能指出一个不同的方向来寻找这个问题。

编辑1:

  1. 在5种不同Android操作系统和设备制造商的设备上进行测试
  2. Android应用程序是发布的版本。
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-03-30 06:02:30

经过一整天的研究,我终于找出了这个问题的根源。

在这里,我发现了下面的线索(万一有人从中得到帮助):

  1. 我了解了launchMode类型的安卓应用程序
  2. 我盯着谷歌用安卓的launchMode和这个http加密
  3. 我登陆一篇博文,上面写着Android放弃确保TLS版本回退
  4. 我在谷歌上搜索了更多关于TLS版本的备份
  5. 搜索不同的关键词,让我来到Android8.0行为变化,在那里我读到了关于网络和HTTP(S) Connectivity的文章,在那里我看到了一个新的概念(对我来说),即TLS重新协商。
  6. 我开始阅读有关TLS重新协商的文章,并开始将其与Nginx &它的更改日志联系起来,因此我发现这与Nginx & HTTP通信有关。
  7. 到目前为止,我只查看了Nginx服务器配置中的HTTP块,但是我查看了Nginx中的HTTPs块,并看到了一个不清楚的(对我来说)头配置Strict-Transport-Security,它被设置为max-age=31536000 always
  8. 我研究了这个头配置,整个问题立刻在我的脑海中被澄清了,这不是一个问题,这是默认行为,当浏览器看到一个成功的HTTPs请求并看到那个头时,下一个非HTTP请求默认尝试使用HTTPs,这就是我们遇到的问题。

我删除了标题(第一次将它的值降到10毫秒,这样浏览器就可以生效),并用相同的场景测试我的应用程序,一切都像预期的那样开始工作。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55385072

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档