ASP.NET MVC 页面不能在3G网络或某些代理服务器上提供服务。

8
我们刚刚发布了一款基于ASP.NET MVC的新Web应用程序,它在所有桌面连接和所有移动设备(如iPhone等)上都可以正常工作。然而,在通过3G连接查看某些页面时(无论是通过笔记本电脑上的3G dongle还是直接在移动设备上),都会出现一个空白的白色页面,没有任何内容。看起来好像我们返回了一个空请求。
在某些代理网络上,我们遇到了类似的问题,他们说我们的请求大小太大了。这有点说得通,因为它只影响某些页面,并且我会认为移动网络提供商在他们那边操作各种代理服务器。
但是,我找不到任何关于构成请求过大的信息。我对其中一个页面进行了分析,以下是一些我认为可能相关的统计数据:
HTML内容大小: 33.04KB压缩,50.65KB未压缩
所有样式表的总大小(4个文件): 32.39KB压缩,181.65KB未压缩
所有外部JS的总大小(24个文件): 227.82KB压缩,851.46KB未压缩
对我来说,内容的压缩大小并不过分,但也许我是错的。有人能指导我如何解决这个问题吗?因为我很难找到任何明确的信息。

你是否打错了未压缩的CSS文件的大小?我希望是这样。 - thirtydot
我已经修复了,对此很抱歉。 - pauldunlop
你尝试过关闭压缩吗?也许你的Web服务器正在以某种方式实现压缩,而一些Web代理或3G网络中介可能无法处理。至少,请分享压缩设置,以便我们可以查看问题是否出在那里。 - Jacob
@Jacob 这是一个有趣的想法。我们启用了 GZIP 压缩,这给一些 Windows XP 客户端带来了问题。我手头没有完整的压缩设置细节,但我会向我们的基础设施团队查询并确认。我之前没有考虑过这个选项。 - pauldunlop
@Jacob - 不幸的是,在我们的服务器上禁用压缩并没有解决这个问题。 - pauldunlop
我们实际上解决了这个问题,原因是响应头中Set-Cookie项的大小和数量。我们发现有一个错误,即头部中有近100个Set-Cookie项。解决这个错误并减小值的大小解决了这个问题。 - pauldunlop
2个回答

2
就MVC而言,3G网络与Wifi没有区别。但是移动设备可以缓存的文件大小有限制。在这种情况下,这些文件将在每次postback时从服务器请求。
由于某些页面能够正常工作,我认为将问题隔离到特定的故障点比在茫茫无际中搜索更好。
您可以使用3G dongle和Firefox或Chrome开发人员工具中的Firebug轻松调试问题。
  • 首先确保没有JavaScript错误导致了问题
  • 确认JavaScript/css/html文件确实已经传递给客户端(客户端上的Firebug)。在服务器上检查IIS日志或MS Network Monitor,或创建一个http代理来监视流量。尝试您熟悉的任何一种方法。
  • 您几乎有30个请求仅用于css/javascript/html,如果有图像,则数量可能更高。完成所有这些请求可能需要永远在3G上等待。尝试捆绑Java Script文件并减少请求计数。浏览器对它们可以同时进行的请求数量有限制,增加了总时间(我相信Firefox可以同时发出大约10个请求)。

感谢您的建议。问题在于,我们目前的JS/CSS加载不是高度优化的,因此我们在站点上的每个页面上提供完全相同的、最小化和捆绑的JS和CSS负载。对我来说,这排除了与JS/CSS相关的可能性。我还会假设它排除了缓存/加载问题,因为同样的移动设备在WiFi连接下都没问题等等。我的假设是它一定与初始HTML数据包的大小有关,但我找不到任何信息来确认是否可能存在问题,如果有,那么这个大小限制是多少。 - pauldunlop

0
我们实际上已经解决了这个问题,原因是响应头中Set-Cookie项的大小和数量。我们发现有一个错误,即头部中有近100个Set-Cookie项。解决这个错误并减小值的大小后,问题得到了解决。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接