Como corrigir o problema de troca de imagem no iOS 8 com keep-alive + revestimento de tubulação HTTP?

9

Desde o iOS8, os sites que eu gerenciei estão enfrentando um problema intermitente em que as imagens estão trocando de local com outras. Isso foi mencionado em vários lugares, mas sem solução aparente:

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/

parece que houve um problema no iOS5 no passado. Nosso servidor está executando o Lightspeed com revestimento de tubos e manutenção. O administrador do meu servidor confirmou que o revestimento de tubos está retornando ativos na ordem em que foram solicitados. Ele mencionou que desativar o keep-alive pode resolver o problema, mas aumentaria enormemente a carga do servidor, o que seria uma coisa muito ruim.

Todos os meus recursos também estão passando o comprimento do conteúdo corretamente.

Estou realmente em um beco sem saída agora para uma solução para isso. Com tantos dos meus usuários usando iOS, o começo é extremamente frustrante para todos.

Só começou a ocorrer com a introdução do iOS8, que apresenta algumas mudanças bastante pesadas no Safari. Em cada versão, de 8, o problema ainda está lá. Como eu disse, é intermitente e nossos usuários estão começando a nos culpar porque "nenhum outro site tem o problema".

Fiquei me perguntando se alguém poderia lançar alguma luz sobre isso? Alguém já teve esse problema e / ou encontrou uma solução?

Aqui está um link para o meu site em questão.

David
fonte
Bem-vindo ao ServerFault David, você pode restringir esse problema até o html do site? Ou isso é especificamente um problema do Safari? Eu não tenho um iPhone para testar, mas talvez você possa indicar quais imagens são locais de troca, para que alguém aqui que não seja suficientemente experiente para possuir um Droid (piada) possa reproduzir o problema? Além disso, tente instalar um navegador diferente no telefone e veja se é um problema do Safari ou iOS.
MDMoore313
2
@BigHomie É específico para o Safari no iOS8. Parece não ocorrer no Google Chrome. E o problema não parece ocorrer em nenhuma outra plataforma.
David David
Oi ! Tenho muitas perguntas para ajudar você a se concentrar no problema real. O problema ocorre no Safari OS X? O problema ocorre no Safari iOS em um simulador? Você tentou abrir um link do inspetor do Safari para verificar se os links das imagens estão corretos ou se há um problema de cache do Safari? Essas perguntas devem nos levar à raiz do problema.
23915 DeadEye
@DeadEye Tenho certeza de que o problema ocorre apenas no iOS 8. Não tenho certeza se isso acontece em um simulador e se o inspetor da web não mostra nada de incomum. De fato, as imagens retornam com o nome de arquivo correto, apesar da imagem errada. Meu maior problema é que o relatório de radar para a apple foi fechado sem motivo e o openradar também não tem atividade, apesar de todas as informações nos fóruns de discussão.
David David
Se você tentar ir diretamente para o caminho da imagem de uma imagem trocada pelo Safari iOS, é a imagem correta?
23915 DeadEye

Respostas:

2

Também tivemos esse problema e a solução para nós foi remover todas as tags em nosso HTML e usar as classes css com a propriedade background. Aqui está um exemplo:

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

Parece meio estranho, eu sei, mas essa foi a única maneira de resolver o problema para nós. Uma desvantagem é que tivemos que remover o "alt" das imagens, mas acho que você pode resolver isso com algum javascript, se necessário.

Espero que isto ajude!

Mikael Lundberg
fonte
2

Eu estava lidando com esse problema em um novo site que acabamos de lançar. Tudo parecia bom no FF / Opera / Chrome, etc., mas eu tinha problemas de troca de imagem no iOS8 +. Percebi que muitos sites que relatam esse problema executam o servidor Litespeed. Eu mudei para o Apache por um momento para testar e, com certeza, o site foi carregado perfeitamente. Meu host (wiredtree.com, excelente serviço) e eu examinamos algumas das opções de configuração no Litespeed e desabilitei essas duas opções:

  • Habilitar a compactação
  • Ativar compactação dinâmica

Depois de desativar esses dois, os sites foram carregados sem problemas. Foi um desempenho muito leve, mas definitivamente valeu a pena.

Inicialmente, tentamos desativar o keep-alive para desativar efetivamente o pipelining HTTP, mas isso não resolveu o problema. O acima é a única coisa que eu vi que ofereceu uma solução real.

Espero que isso ajude alguém a lidar com os mesmos problemas!

Kevin
fonte
1

Não é uma resposta, mas uma abordagem para resolver o problema:

  1. Reproduza o problema sozinho usando uma versão de desenvolvimento do aplicativo usando os servidores da web em produção. Apenas certificando-se de cobrir isso.
  2. Crie uma nova entrada de nome de host / CNAME e o host virtual correspondente no servidor da web ou, se necessário, na etapa 3, um servidor HTTP separado em uma porta separada. Isso é conhecido como "servidor HTTP de teste"
  3. Aponte sua versão de teste / desenvolvimento para esse novo servidor HTTP e reproduza o problema. Não vá para o passo 4 até conseguir fazer isso!
  4. Agora, neste servidor HTTP de teste, por meio de redirecionamentos ou configuração inteligente (possível com Apache), desative keepalives, compactação, https, cache, pipelining e qualquer outra coisa que você possa imaginar. Reproduza o problema e anote todas as tuplas de configuração que fazem isso e aquelas que não fazem.
  5. Troque o servidor Litespeed pelo Apahce. Novamente, deve ser bastante trivial para um bom administrador de sistema. ( ahem ). Reproduza o problema.

Se você puder reproduzir o problema até a etapa 5, e nenhum conjunto de alterações na configuração ou no software do servidor fizer a diferença, o problema é o iOS e, provavelmente, nada que você possa fazer. (Mas isso é improvável.)

Se, no entanto, houver um conjunto de alterações na configuração que não depende do Litespeed (isto é, também ocorre com o Apache), podemos fazer uma solução alternativa: use as BrowserMatchdiretivas para detectar os (conjuntos de) navegadores específicos; defina os parâmetros de configuração para este conjunto BrowserMatch. Você encontrará exemplos desse tipo de coisa desde os navegadores IE 3.0 e Netscape.

Se o problema for o Litespeed, use a abordagem acima e registre um bug com o suporte do Litespeed. Você está pagando pelo suporte, não está?

Otheus
fonte
1

usando o protocolo http / 2 parece ter resolvido o problema no meu caso. Mas, tenho certeza de que pode haver uma correção / solução real para esse problema.

David
fonte