我有一个 iOS 应用,用于从我的服务器下载文件。最近,我将服务器从 Windows Server 2012 升级到 Windows Server 2016。升级后,我的 iOS 应用突然开始无法从新服务器下载文件。
在升级服务器时,我还更改了 SSL 证书并开始使用 Wilcard SSL 证书。这就是为什么我认为某些 SSL 问题就是原因。但是当我在旧服务器上尝试时,我发现我的应用程序从旧服务器下载文件没有任何问题。
然后我以为我的服务器有数据包丢失。当我在大约 9000 个数据包之后测试它时,我只看到一个数据包丢失;所以情况并非如此。
然后我想可能是 IIS 中出现了问题,导致连接丢失。当我测试它(IIS 失败请求日志)时,我没有发现任何问题。
当我调试 iOS 应用时,我看到以下日志。这看起来像是 http 的问题。
知道为什么我只在 IIS 10 上遇到问题吗?
先前的操作系统和 ISS 版本:Windows Server 2012(内部版本 9200)/IIS 8(8.0.9200.16384)
先前的操作系统和 ISS 版本:Windows Server 2016(1607 - 内部版本 1493.1593)/IIS 10(10.0.14393.0)
iOS 应用网络库:AF网络
iOS 错误日志:
[] nw_socket_set_receive_low_water_mark setsockopt SO_RCVLOWAT 3537 fd 28 失败: [22] 参数无效
[] nw_endpoint_handler_add_write_request [49.1 MyIP:443 failed socket-flow (satisfied)] 无法接受写入请求
[] tcp_connection_write_eof_block_invoke 写关闭回调收到错误:[22] 参数无效
答案1
这全都是关于 IIS 10 上的默认 HTTP/2。没有选项可以关闭它,但我使用以下注册表项在服务器上将其完全关闭。现在我的文件从 iOS 下载没有问题。
当然,我必须解决 iOS 上的问题并让它通过 HTTP/2 下载文件,但现在它可以正常工作。
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\HTTP\Parameters
EnableHttp2Tls REG_DWORD 0
EnableHttp2Cleartext REG_DWORD 0