Come risolvere il problema di scambio di immagini in iOS 8 con keep-alive + HTTP Pipe-lining?


9

Sin da iOS8, i siti che ho gestito hanno riscontrato un problema intermittente in cui le immagini scambiano posizioni con altre immagini. Questo è stato menzionato in diversi punti, ma senza una soluzione apparente:

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/

sembra che sia stato un problema in iOS5 in passato. Il nostro server esegue Lightspeed con rivestimento interno e keep-alive. Il mio amministratore del server ha confermato che il pipe-lining sta restituendo le risorse nell'ordine in cui sono state richieste. Ha menzionato che la disabilitazione di keep-alive potrebbe risolvere il problema, ma aumenterebbe notevolmente il carico del server, il che sarebbe davvero una brutta cosa.

Anche tutte le mie risorse stanno passando correttamente la lunghezza dei contenuti.

Sono davvero in un vicolo cieco ora per una soluzione a questo. Con così tanti dei miei utenti che usano iOS, inizia a essere estremamente frustrante per tutti.

Ha iniziato a verificarsi solo con l'introduzione di iOS8 che presenta alcune modifiche piuttosto pesanti a Safari. In ogni versione, di 8, il problema è ancora presente. Come ho detto, è intermittente e i nostri utenti stanno iniziando a incolpare noi perché "nessun altro sito ha il problema".

Mi chiedevo se qualcuno potesse far luce su questo? Qualcun altro ha riscontrato questo problema e / o trovato una soluzione?

Ecco un link al mio sito in questione.


Benvenuto in ServerFault David, puoi restringere questo problema forse al codice HTML del sito Web? O questo è specificamente un problema di Safari? Non ho un iPhone da testare, ma forse puoi indicare quali immagini vengono scambiate, quindi qualcuno qui che non è abbastanza esperto da possedere un droide (scherzo) può riprodurre il problema? Inoltre, prova a installare un browser diverso sul telefono e verifica se si tratta di un problema di Safari o iOS.
MDMoore313

2
@BigHomie È specifico per Safari su iOS8. Non sembra accadere su Google Chrome. E il problema non sembra verificarsi su nessuna altra piattaforma.
David,

Ciao ! Ho molte domande per aiutarti a concentrarti sul vero problema. Il problema si verifica su Safari OS X? Il problema si verifica in Safari iOS in un simulatore? Hai provato ad aprire un link dell'ispettore Safari per verificare se i collegamenti alle immagini sono corretti o se si tratta di un problema di cache di Safari? Queste domande dovrebbero portarci alla radice del problema.
DeadEye,

@DeadEye Sono abbastanza sicuro che il problema si verifica solo in iOS 8. Non sono sicuro che accada in un simulatore e l'ispettore web non mostra nulla di insolito. In effetti, le immagini tornano con il nome file corretto nonostante l'immagine sbagliata. Il mio problema più grande è che il rapporto radar su Apple è stato chiuso senza motivo e openradar non ha avuto alcuna attività su di esso, nonostante tutte le informazioni nei forum di discussione.
David,

Se provi ad accedere direttamente al percorso dell'immagine di un'immagine scambiata tramite Safari iOS, è l'immagine corretta?
DeadEye,

Risposte:


2

Abbiamo riscontrato anche questo problema e la soluzione per noi era rimuovere tutti i tag nel nostro HTML e utilizzare invece le classi css con proprietà in background. Ecco un esempio:

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

Mi sento un po 'imbarazzante, lo so, ma questo è stato l'unico modo che ha risolto il problema per noi. Uno svantaggio è che abbiamo dovuto rimuovere "alt" per le immagini ma immagino che puoi risolverlo con un po 'di javascript, se necessario.

Spero che sia di aiuto!


2

Stavo affrontando questo problema su un nuovo sito Web che abbiamo appena lanciato. Tutto sembrava a posto in FF / Opera / Chrome, ecc. Ma avevo problemi di scambio di immagini MAJOR in iOS8 +. Ho notato che molti siti che segnalano questo problema eseguono il server web Litespeed. Sono passato ad Apache per un momento per testare e, sicuramente, il sito web è stato caricato bene. Il mio host (wiredtree.com, un servizio eccellente) e io abbiamo esaminato alcune delle opzioni di configurazione in Litespeed e abbiamo disabilitato queste due opzioni:

  • Abilita la compressione
  • Abilita compressione dinamica

Dopo aver disabilitato quei due, i siti web si sono caricati bene senza problemi. Ci è voluto un colpo di prestazione molto leggero, ma sicuramente ne vale la pena.

Inizialmente, abbiamo provato a disabilitare keep-alive per disabilitare efficacemente il pipelining HTTP, ma non ha risolto il problema. Quanto sopra è l'unica cosa che ho visto che ha offerto una soluzione reale.

Spero che questo possa aiutare qualcuno a gestire gli stessi problemi!


1

Non una risposta, ma un approccio per risolvere il problema:

  1. Riproduci il problema da solo utilizzando una versione di sviluppo dell'app utilizzando i server Web in produzione. Mi sto solo assicurando di coprirlo.
  2. Creare un nuovo nome host / voce CNAME e corrispondente host virtuale sul server Web o, se necessario per il passaggio 3, un server HTTP separato su una porta separata. Questo è noto come "test server HTTP"
  3. Puntare la versione di test / sviluppo su questo nuovo server HTTP e riprodurre il problema. Non andare al passaggio 4 finché non puoi farlo!
  4. Ora su questo server di prova HTTP, tramite reindirizzamenti o configurazione intelligente (come possibile con Apache), disabilita keepalive, compressione, https, cache, pipelining e qualsiasi altra cosa ti venga in mente. Riprodurre il problema e prendere nota di tutte le tuple di configurazione che fanno questo e quelle che non lo fanno.
  5. Scambia il server Litespeed con Apahce. Ancora una volta, dovrebbe essere abbastanza banale per un buon amministratore di sistema. ( ahem ). Riprodurre il problema.

Se riesci a riprodurre il problema fino in fondo attraverso il passaggio 5 e nessuna serie di modifiche alla configurazione o al software del server fa la differenza, il problema è iOS e probabilmente nulla che tu possa fare. (Ma questo è improbabile.)

Se tuttavia, esiste una serie di modifiche alla configurazione che non dipende da Litespeed (vale a dire, si verifica anche con Apache), allora possiamo fare una soluzione: usare le BrowserMatchdirettive per rilevare i particolari (set di) browser; imposta i parametri di configurazione per questo set BrowserMatch set. Troverai esempi di questo tipo di cose che risalgono ai browser IE 3.0 e Netscape.

Se il problema risulta essere Litespeed, utilizzare l'approccio sopra e presentare un bug con il supporto Litespeed. Stai pagando per il supporto, vero?


1

l'utilizzo del protocollo http / 2 sembra aver risolto il problema nel mio caso. Ma sono sicuro che potrebbe esserci una soluzione / soluzione effettiva a questo problema.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.