热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

iOS应用程序-在某些设备上无法蜂窝访问我们的域

如何解决《iOS应用程序-在某些设备上无法蜂窝访问我们的域》经验,为你挑选了1个好方法。

使用React Native应用程序(仅测试了使用生成的应用程序create-react-app),一些iPhone用户遇到了一个问题,即当通过蜂窝数据连接时,该应用程序几乎永远无法向我们的API发出Web请求。出现问题的域指向Amazon Elastic Load Balancer(第7层,SSL终止),后者指向Nginx反向代理(位于EKS Kubernetes集群内部)。该应用程序调用的其他API(例如Mapbox)可以在蜂窝数据上正常工作,包括在专用服务器上托管的其中一种。唯一不起作用的请求是我们ELB域上的请求。当用户切换到WiFi时,我们的应用能够向该域发出Web请求。在均运行iOS 12.3.1的iPhone 7,iPhone 8和iPhone X上已经观察到这种情况。一种设备是Verizon,其他5种是AT&T。每个API调用都是HTTPS。删除并重新安装应用程序并重新启动设备不能解决问题。我们在所有情况下都确认了在Settings > Cellular > [App name]和中为该应用程序启用了蜂窝数据Settings > [App name] > Use Cellular Data

该应用程序是使用React Native构建的,Web请求是通过cross-fetch库执行的。

我们能够找到有问题的设备并通过Xcode运行它。这是Xcode中捕获的错误堆栈的子集:

nw_connection_copy_connected_local_endpoint [C12] Connection has no local endpoint
2019-06-27 11:26:16.841347-0400 myapp[23700:1527268] [BoringSSL] 
nw_protocol_boringssl_get_output_frames(1301) [C10.1:2][0x117d5a050] get output frames failed, state 8196
2019-06-27 11:26:22.465855-0400 myapp[23700:1527305] [BoringSSL] nw_protocol_boringssl_error(1584) [C20.1:2][0x119b0e420] Lower protocol stack error: 54
2019-06-27 11:26:22.466665-0400 myapp[23700:1527305] TIC TCP Conn Failed [20:0x280022400]: 1:54 Err(54)
2019-06-27 11:26:23.040101-0400 myapp[23700:1527399] Task .<7> HTTP load failed (error code: -1005 [1:54])
2019-06-27 11:26:23.040408-0400 myapp[23700:1527305] Task .<7> finished with error - code: -1005
load failed with error Error Domain=NSURLErrorDomain Code=-1005 "The network connection was lost." UserInfo={_kCFStreamErrorCodeKey=54, NSUnderlyingError=0x283a521f0 {Error Domain=kCFErrorDomainCFNetwork Code=-1005 "(null)" UserInfo={NSErrorPeerAddressKey={length = 16, capacity = 16, bytes = 0x100201bb3416ca8a0000000000000000}, _kCFStreamErrorCodeKey=54, _kCFStreamErrorDomainKey=1}}, _NSURLErrorFailingURLSessiOnTaskErrorKey=LocalDataTask .<7>, _NSURLErrorRelatedURLSessiOnTaskErrorKey=(
    "LocalDataTask .<7>"
), NSLocalizedDescription=The network connection was lost.

对此特定[ELB]-> [Nginx容器]-> [Service容器]设置的查询有时会起作用,但随后会停止。它几乎表明了这种问题的持续发展态势。我们将ELB空闲超时设置为默认值(60s),并将其增加到300s,但没有明显影响。我们尝试将Nginx的keep-alive设置为360s和0s(完全禁用)。

对于有问题的域,我们在Kubernetes集群中托管了多种服务,例如Java和Node.js。这个问题对所有人都有同等的影响。

没有任何Android应用程序用户报告此问题。

遇到此问题的设备都始终如此,这不是间歇性的。

由于错误的类型,请求永远不会到达我们的Nginx日志。



1> jowo..:

不幸的是,我们从未找到解决该问题的明确答案,但是我们确实实现了解决方法。

蜂窝网络上的某些iOS 12.3.1 iPhone似乎存在一个问题,即亚马逊的ELB Classic总是发送“ Connection:keep-alive”响应标头。您可以更改负载均衡器的空闲超时,但不能将其设置为0(最小为1秒)。我们可以通过使用生成的新应用来重现iOS连接错误create-react-app。请求始终总是首先工作,然后开始始终失败。

我们通过从ELB切换到网络负载平衡器(AWS NLB)来解决此问题。NLB直接与Nginx入口控制器对话。由于它位于TCP级别,因此NLB层不会更改标头。默认的Nginx控制器根本不发送“连接”响应头。使用此新设置,iOS应用程序可在所有设备上正常运行。


推荐阅读
  • 开机自启动的几种方式
    0x01快速自启动目录快速启动目录自启动方式源于Windows中的一个目录,这个目录一般叫启动或者Startup。位于该目录下的PE文件会在开机后进行自启动 ... [详细]
  • 为了确保iOS应用能够安全地访问网站数据,本文介绍了如何在Nginx服务器上轻松配置CertBot以实现SSL证书的自动化管理。通过这一过程,可以确保应用始终使用HTTPS协议,从而提升数据传输的安全性和可靠性。文章详细阐述了配置步骤和常见问题的解决方法,帮助读者快速上手并成功部署SSL证书。 ... [详细]
  • Cookie学习小结
    Cookie学习小结 ... [详细]
  • 用阿里云的免费 SSL 证书让网站从 HTTP 换成 HTTPS
    HTTP协议是不加密传输数据的,也就是用户跟你的网站之间传递数据有可能在途中被截获,破解传递的真实内容,所以使用不加密的HTTP的网站是不 ... [详细]
  • 零拷贝技术是提高I/O性能的重要手段,常用于Java NIO、Netty、Kafka等框架中。本文将详细解析零拷贝技术的原理及其应用。 ... [详细]
  • oracle c3p0 dword 60,web_day10 dbcp c3p0 dbutils
    createdatabasemydbcharactersetutf8;alertdatabasemydbcharactersetutf8;1.自定义连接池为了不去经常创建连接和释放 ... [详细]
  • 原文网址:https:www.cnblogs.comysoceanp7476379.html目录1、AOP什么?2、需求3、解决办法1:使用静态代理4 ... [详细]
  • 本文详细介绍了 InfluxDB、collectd 和 Grafana 的安装与配置流程。首先,按照启动顺序依次安装并配置 InfluxDB、collectd 和 Grafana。InfluxDB 作为时序数据库,用于存储时间序列数据;collectd 负责数据的采集与传输;Grafana 则用于数据的可视化展示。文中提供了 collectd 的官方文档链接,便于用户参考和进一步了解其配置选项。通过本指南,读者可以轻松搭建一个高效的数据监控系统。 ... [详细]
  • Web开发框架概览:Java与JavaScript技术及框架综述
    Web开发涉及服务器端和客户端的协同工作。在服务器端,Java是一种优秀的编程语言,适用于构建各种功能模块,如通过Servlet实现特定服务。客户端则主要依赖HTML进行内容展示,同时借助JavaScript增强交互性和动态效果。此外,现代Web开发还广泛使用各种框架和库,如Spring Boot、React和Vue.js,以提高开发效率和应用性能。 ... [详细]
  • 深入探索HTTP协议的学习与实践
    在初次访问某个网站时,由于本地没有缓存,服务器会返回一个200状态码的响应,并在响应头中设置Etag和Last-Modified等缓存控制字段。这些字段用于后续请求时验证资源是否已更新,从而提高页面加载速度和减少带宽消耗。本文将深入探讨HTTP缓存机制及其在实际应用中的优化策略,帮助读者更好地理解和运用HTTP协议。 ... [详细]
  • 在Ubuntu系统中安装Android SDK的详细步骤及解决“Failed to fetch URL https://dlssl.google.com/”错误的方法
    在Ubuntu 11.10 x64系统中安装Android SDK的详细步骤,包括配置环境变量和解决“Failed to fetch URL https://dlssl.google.com/”错误的方法。本文详细介绍了如何在该系统上顺利安装并配置Android SDK,确保开发环境的稳定性和高效性。此外,还提供了解决网络连接问题的实用技巧,帮助用户克服常见的安装障碍。 ... [详细]
  • 在PHP中实现腾讯云接口签名,以完成人脸核身功能的对接与签名配置时,需要注意将文档中的POST请求改为GET请求。具体步骤包括:使用你的`secretKey`生成签名字符串`$srcStr`,格式为`GET faceid.tencentcloudapi.com?`,确保参数正确拼接,避免因请求方法错误导致的签名问题。此外,还需关注API的其他参数要求,确保请求的完整性和安全性。 ... [详细]
  • 本文详细介绍了在Linux系统上编译安装MySQL 5.5源码的步骤。首先,通过Yum安装必要的依赖软件包,如GCC、GCC-C++等,确保编译环境的完备。接着,下载并解压MySQL 5.5的源码包,配置编译选项,进行编译和安装。最后,完成安装后,进行基本的配置和启动测试,确保MySQL服务正常运行。 ... [详细]
  • 在iOS开发中,基于HTTPS协议的安全网络请求实现至关重要。HTTPS(全称:HyperText Transfer Protocol over Secure Socket Layer)是一种旨在提供安全通信的HTTP扩展,通过SSL/TLS加密技术确保数据传输的安全性和隐私性。本文将详细介绍如何在iOS应用中实现安全的HTTPS网络请求,包括证书验证、SSL握手过程以及常见安全问题的解决方法。 ... [详细]
  • 在当前的软件开发领域,Lua 作为一种轻量级脚本语言,在 .NET 生态系统中的应用逐渐受到关注。本文探讨了 Lua 在 .NET 环境下的集成方法及其面临的挑战,包括性能优化、互操作性和生态支持等方面。尽管存在一定的技术障碍,但通过不断的学习和实践,开发者能够克服这些困难,拓展 Lua 在 .NET 中的应用场景。 ... [详细]
author-avatar
9位特权QQ号码连号
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有