如何使用保持活动+ HTTP管道修复iOS 8中的图像交换问题?


9

自iOS8起,我管理的网站就遇到了一个间歇性问题,即图像与其他图像交换位置。许多地方都提到了这一点,但没有明显的解决方案:

https://discussions.apple.com/thread/6574663

http://tech.vg.no/2011/12/14/safari-on-ios-5-randomly-switches-images/

http://tech.vg.no/2012/02/01/safari-on-ios-5-randomly-switches-images-part-3/

它过去曾经是iOS5中的一个问题。我们的服务器正在通过管道和保持活动状态运行Lightspeed。我的服务器管理员已确认管道正在按要求的顺序返回资产。他提到禁用保持活动可能会解决该问题,但会大大增加服务器负载,这确实是一件坏事。

我所有的资产也正确地传递了内容长度。

我现在真的要解决这个问题。在我有这么多用户使用iOS的情况下,每个人对它的使用都感到无奈。

它始于iOS8的引入,它对Safari进行了相当重大的更改。在每个版本的8中,问题仍然存在。正如我所说,这是断断续续的,我们的用户开始责怪我们,因为“其他网站都没有问题”。

我想知道是否有人可以对此有所了解?其他人是否遇到过此问题和/或找到了解决方案?

是我所关注网站的链接。


欢迎使用ServerFault David,您可以将这个问题缩小为网站的html吗?还是专门针对Safari的问题?我没有要测试的iPhone,但是也许您可以指出正在交易的图像,所以这里的人如果不懂Droid(笑话),就可以重现此问题?另外,尝试在手机上安装其他浏览器,看看是Safari问题还是iOS问题。
MDMoore313 2015年

2
@BigHomie它特定于iOS8上的Safari。它似乎没有出现在谷歌浏览器上。而且该问题似乎在任何其他平台上都没有发生。
戴维(David)

嗨!我有很多问题可以帮助您专注于实际问题。在Safari OS X上是否会出现问题?模拟器中的Safari iOS是否会出现问题?您是否尝试打开Safari检查器链接以检查图像链接是否正确,或者这是Safari的缓存问题?这些问题应使我们找到问题的根源。
DeadEye

@DeadEye我很确定问题仅在iOS 8中发生。我不确定问题是否发生在模拟器中,并且Web检查器没有显示任何异常情况。实际上,尽管映像错误,但映像仍以正确的文件名返回。我最大的问题是,苹果雷达报告无故关闭,尽管讨论论坛上提供了所有信息,openradar上也没有任何活动。
大卫

如果您尝试通过Safari iOS直接转到交换图像的图像路径,那么它是正确的图像吗?
DeadEye 2015年

Answers:


2

我们也遇到了这个问题,对我们来说,解决方案是删除HTML中的所有标签,并使用具有背景属性的css类。这是一个例子:

.img_logo {
  background: url(../images/logo.png?v=20150427) no-repeat;
  width: 175px;
  height: 49px;
  display: block;
}

我知道有些尴尬,但这是为我们解决问题的唯一方法。一个缺点是我们必须删除图像的“ alt”,但是我想如果需要的话,您可以使用一些javascript解决此问题。

希望这可以帮助!


2

我正在刚刚启动的新网站上处理此问题。在FF / Opera / Chrome等系统中,一切看起来都不错,但是在iOS8 +中我遇到了主要图像交换问题。我注意到,许多报告此问题的站点都在运行Litespeed Web服务器。我切换到Apache进行了一段时间的测试,并且可以肯定的是,该网站的加载情况还不错。我的主机(wiredtree.com,优质的服务)和我查看了Litespeed中的一些配置选项,并禁用了这两个选项:

  • 启用压缩
  • 启用动态压缩

禁用这两个网站之后,这些网站就可以正常加载了,没有任何问题。它对性能的影响很小,但是绝对值得。

起初,我们尝试禁用keep-alive以有效禁用HTTP Pipelining,但是并不能解决问题。以上是我所见过的唯一提供真正解决方案的东西。

希望这可以帮助某人处理相同的问题!


1

不是答案,而是解决问题的一种方法:

  1. 使用生产中的Web服务器使用应用程序的开发版本自行重现问题。只要确保您涵盖了这一点即可。
  2. 在Web服务器上创建一个新的主机名/ CNAME条目和相应的虚拟主机,或者如果需要执行步骤3,则在一个单独的端口上创建一个单独的HTTP服务器。这就是所谓的“测试HTTP服务器”
  3. 将您的测试/开发版本指向此新的HTTP服务器并重现该问题。在执行此操作之前,请不要执行第4步!
  4. 现在,在此测试HTTP服务器上,通过重定向或智能配置(可能使用Apache),禁用keepalive,压缩,https,缓存,流水线以及您可以想到的任何其他功能。重现此问题,并记下执行此操作的所有配置元组和不执行此操作的所有元组。
  5. 与Apahce交换Litespeed服务器。同样,对于一个好的sysadmin来说,它应该是微不足道的。()重现问题。

如果您可以在步骤5的整个过程中重现该问题,并且没有任何配置更改或服务器软件更改有所作为,则问题是iOS,您可能无能为力。(但这不太可能。)

但是,如果存在一组依赖Litespeed 的配置更改(即Apache也会发生),那么我们可以采取一种变通方法:使用BrowserMatch指令检测特定的(一组)浏览器;设置此浏览器集的配置参数。您会找到这类事例,可追溯到IE 3.0和Netscape浏览器。

如果问题出在Litespeed上,请使用上述方法并在Litespeed支持下提交错误。您正在支付支持费用,不是吗?


1

使用http / 2协议似乎已经解决了我的问题。但是,我肯定对此问题可能有实际的解决方案。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.