【发布时间】:2021-10-17 12:59:18
【问题描述】:
我有一个通过自定义网络服务器提供服务的网站,当从笔记本电脑/台式机浏览器加载时,它可以正常加载并运行良好,但在移动浏览器上加载不一致。 (就我而言,我专门测试了 Android 上的三星 Internet 和 Chrome)
(确切的行为是:加载网页,刷新,然后在几次刷新后它有时将无法加载背景图像或页面上的任何资源 - 但仅限于移动浏览器)
如果这只是一些缓存数据问题,我已清除所有浏览器数据,重新启动手机,请朋友在他们的设备上试用等,但我只能在移动设备上重现此问题。
我的 Web 服务器是使用 liburing 编写的,nginx 作为反向代理,但我怀疑这会是问题
我阅读了Can Anyone Explain These Long Network Stalled Times?,我发现一个问题可能是我使用多个不同的 HTTP 请求来获取资源(我还没有实现 Connection: Keep-Alive),但我在 WiFi 上也遇到了这个问题,我得到了即使在加载单个资产(例如背景图像)时也会出现问题
其他可能相关的信息:
- 我最初在桌面上也遇到了类似的问题,我通过在 HTTP 请求上调用
close()之前使用shutdown()修复了它 - 我正在使用以下响应标头:
Keep-Alive: timeout=0, max=0Connection: closeCache-Control: no-cache
- 我正在使用以下套接字选项:
-
SO_REUSEADDR(主要是调试方便) -
SO_REUSEPORT(多线程中的套接字绑定并监听同一个端口) -
SO_KEEPALIVE、TCP_KEEPIDLE、TCP_KEEPINTVL和TCP_KEEPCNT(杀死不活跃的客户)
-
- 奇怪的是,我认为重启手机后它会消失一段时间
- 我尝试不使用 nginx,而是使用
WolfSSL进行 TLS,但我遇到了同样的问题
我倾向于认为这可能是我在响应中设置的标头的问题(或者可能是我缺少的一些 HTTPS 特定细节?),但我不确定 如果有人想验证问题,这里是实际站点https://servertest.erewhon.xyz/
【问题讨论】:
标签: sockets http mobile https webserver