1

我为一个嵌入式项目编写了一个小型 Web 服务器,它应该为设备提供基于 Web 的 UI。虽然使用 PC 浏览器一切正常,但移动浏览器无法加载与页面关联的所有资源(例如 css/js/图像)。

我的服务器支持没有请求流水线的持久连接。目前我已将最大并行连接数减少到 1,因此一次只能回答一个请求。

我的调试观察是客户端在首先请求 *.html 文件和样式表之后,停止请求头部中列出的任何其他资源。客户端不会断开连接。

你知道我犯了什么样的错误,PC浏览器会容忍而移动浏览器不会?

我刚刚在网上看到大多数移动浏览器实际上都实现并使用了流水线。进一步考虑,我认为我当前的实现可能在处理流水线请求时遇到问题。考虑到我的 STM32 内存不足,我将接收缓冲区重新用作发送缓冲区。我会尽快验证...

...不,尽管这里说 >>> <<<,但我无法验证 Android 标准浏览器、Dolphin 或 Firefox for Android 是否实际上在“保持活动”连接上传输他们的请求。

还有一件事......从Android SDK运行模拟器时它工作得非常好(至少对于Android 4.2.2)

请评论您可能需要的任何其他信息。

4

2 回答 2

0

原因是连接限制!

这个答案的一些功劳归于有最好预感的 Eun。在查看可由 Chrome for Android 生成并由桌面 Chrome 查看的连接日志时,我得到了答案。

我发现所有无法加载的资源都是由于服务器端拒绝连接造成的。这意味着,由于服务器端重置而排队等待连接失败的请求作业不会为另一个连接重新安排,尽管其他连接处于活动状态并且具有“连接:保持活动”标头字段。我还可以验证 chrome 不使用请求流水线。当连接到 WiFi 时。

桌面浏览器确实会重新安排失败的请求作业,这就是它与它们一起工作的原因。我有一个目前可以解决问题的解决方法。但是我不确定它的便携性。我在网页上使用了一个 java 脚本,通过监听它们的“加载”事件来连续添加所需的资源。

我将问另一个关于脚本、css、图像或更通用的资源加载器的问题,这些资源加载器会生成我想要的行为。

于 2013-07-28T08:31:07.177 回答
0

要在目标平台上节省内存资源,请尝试压缩您的 HTML、javascript 等。我建议您尝试使用 gzip HTTP 压缩。对于图像,请尝试使用或制作 .svg(可缩放矢量图形)图像。然后您还可以压缩 SVG 图像。

于 2013-07-29T06:13:42.247 回答