Wie behebe ich das Problem des Bildaustauschs in iOS 8 mit Keep-Alive + HTTP-Pipe-Lining?

9

Seit iOS8 treten bei den von mir verwalteten Sites zeitweise Probleme auf, bei denen Bilder Standorte mit anderen Bildern austauschen. Dies wurde an mehreren Stellen erwähnt, jedoch ohne offensichtliche Lösung:

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/

Es scheint, dass es in der Vergangenheit ein Problem in iOS5 war. Auf unserem Server läuft Lightspeed mit Pipe-Lining und Keep-Alive. Mein Serveradministrator hat bestätigt, dass Pipe-Lining Assets in der Reihenfolge zurückgibt, in der sie angefordert wurden. Er hat erwähnt, dass das Deaktivieren von Keep-Alive das Problem möglicherweise behebt, aber die Serverlast massiv erhöhen würde, was eine wirklich schlechte Sache wäre.

Alle meine Assets übergeben auch die Länge des Inhalts korrekt.

Ich bin jetzt wirklich in einer Sackgasse, um eine Lösung dafür zu finden. Bei so vielen meiner Benutzer, die iOS verwenden, ist es für alle sehr frustrierend.

Es begann erst mit der Einführung von iOS8, das einige ziemlich starke Änderungen an Safari enthält. In jeder Version von 8 ist das Problem immer noch vorhanden. Wie gesagt, es ist zeitweise und unsere Benutzer geben uns die Schuld, dass "keine andere Website das Problem hat".

Ich habe mich gefragt, ob jemand etwas Licht ins Dunkel bringen kann. Hat jemand anderes dieses Problem erlebt und / oder eine Lösung gefunden?

Hier ist ein Link zu meiner fraglichen Seite.

David
quelle
Willkommen bei ServerFault David. Können Sie dieses Problem auf das HTML der Website eingrenzen? Oder ist dies speziell ein Safari-Problem? Ich habe kein iPhone zum Testen, aber vielleicht können Sie angeben, welche Bilder Handelsplätze sind, damit jemand hier, der nicht klug genug ist, um einen Droiden (Witz) zu besitzen, das Problem reproduzieren kann? Versuchen Sie auch, einen anderen Browser auf dem Telefon zu installieren, und prüfen Sie, ob es sich um ein Safari- oder ein iOS-Problem handelt.
MDMoore313
2
@ BigHomie Es ist spezifisch für Safari unter iOS8. Es scheint in Google Chrome nicht vorzukommen. Und das Problem scheint auf keiner anderen Plattform aufzutreten.
David
Hallo ! Ich habe viele Fragen, die Ihnen helfen sollen, sich auf das eigentliche Problem zu konzentrieren. Tritt das Problem unter Safari OS X auf? Tritt das Problem in Safari iOS in einem Simulator auf? Haben Sie versucht, einen Safari Inspector- Link zu öffnen, um zu überprüfen, ob die Links zu Bildern korrekt sind oder ob es sich um ein Cache-Problem von Safari handelt? Diese Fragen sollten uns zur Wurzel des Problems führen.
DeadEye
@DeadEye Ich bin mir ziemlich sicher, dass das Problem nur in iOS 8 auftritt. Ich bin mir nicht sicher, ob es in einem Simulator auftritt und der Webinspektor nichts Ungewöhnliches anzeigt. Tatsächlich werden die Bilder trotz des falschen Bildes mit dem richtigen Dateinamen zurückgegeben. Mein größtes Problem ist, dass der Radarbericht an Apple ohne Grund geschlossen wurde und openradar trotz aller Informationen in den Diskussionsforen auch nichts zu tun hat.
David
Wenn Sie versuchen, über Safari iOS direkt zum Bildpfad eines ausgetauschten Bildes zu wechseln, ist es das richtige Bild?
DeadEye

Antworten:

2

Wir hatten auch dieses Problem und die Lösung für uns bestand darin, alle Tags in unserem HTML zu entfernen und stattdessen CSS-Klassen mit Hintergrundeigenschaften zu verwenden. Hier ist ein Beispiel:

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

Fühlt sich irgendwie unangenehm an, ich weiß, aber nur so konnte das Problem für uns gelöst werden. Ein Nachteil ist, dass wir das "Alt" für die Bilder entfernen mussten, aber ich denke, Sie können das bei Bedarf mit etwas Javascript lösen.

Hoffe das hilft!

Mikael Lundberg
quelle
2

Ich habe dieses Problem auf einer neuen Website behandelt, die wir gerade gestartet haben. In FF / Opera / Chrome usw. sah alles gut aus, aber ich hatte große Probleme beim Austausch von Bildern in iOS8 +. Ich habe festgestellt, dass auf vielen Websites, auf denen dieses Problem gemeldet wird, der Litespeed-Webserver ausgeführt wird. Ich wechselte für einen Moment zu Apache, um zu testen, und sicher wurde die Website einwandfrei geladen. Mein Host (wiredtree.com, exzellenter Service) und ich haben uns einige der Konfigurationsoptionen in Litespeed angesehen und diese beiden Optionen deaktiviert:

  • Komprimierung aktivieren
  • Aktivieren Sie die dynamische Komprimierung

Nach dem Deaktivieren dieser beiden wurden die Websites problemlos geladen. Es hat einen sehr geringen Leistungseinbruch gebracht, aber es hat sich definitiv gelohnt.

Zuerst haben wir versucht, Keep-Alive zu deaktivieren, um HTTP-Pipelining effektiv zu deaktivieren, aber das Problem wurde dadurch nicht gelöst. Das Obige ist das einzige, was ich gesehen habe, das eine echte Lösung bietet.

Hoffentlich kann dies jemandem helfen, der sich mit den gleichen Problemen befasst!

Kevin
quelle
1

Keine Antwort, sondern ein Ansatz zur Lösung des Problems:

  1. Reproduzieren Sie das Problem selbst mithilfe einer Entwicklungsversion der App auf den produktionsbezogenen Webservern. Stellen Sie nur sicher, dass Sie das abdecken.
  2. Erstellen Sie einen neuen Hostnamen / CNAME-Eintrag und einen entsprechenden virtuellen Host auf dem Webserver oder, falls erforderlich, für Schritt 3 einen separaten HTTP-Server an einem separaten Port. Dies wird als "Test-HTTP-Server" bezeichnet.
  3. Zeigen Sie mit Ihrer Test- / Entwicklungsversion auf diesen neuen HTTP-Server und reproduzieren Sie das Problem. Fahren Sie nicht mit Schritt 4 fort, bis Sie dies tun können!
  4. Deaktivieren Sie auf diesem Test-HTTP-Server Keepalives, Komprimierung, https, Caching, Pipelining und alles andere, was Sie sich vorstellen können, entweder durch Weiterleitungen oder durch intelligente Konfiguration (wie mit Apache möglich). Reproduzieren Sie das Problem und notieren Sie sich alle Konfigurationstupel, die dies tun, und diejenigen, die dies nicht tun.
  5. Tauschen Sie den Litespeed-Server gegen Apahce aus. Auch hier sollte es für einen guten Systemadministrator ziemlich trivial sein. ( ähm ). Problem reproduzieren.

Wenn Sie das Problem bis zum Ende von Schritt 5 reproduzieren können und keine Konfigurationsänderungen oder Änderungen an der Serversoftware den Unterschied ausmachen, liegt das Problem bei iOS und wahrscheinlich bei nichts, was Sie tun können. (Aber das ist unwahrscheinlich.)

Wenn es jedoch eine Reihe von Konfigurationsänderungen gibt, die nicht von Litespeed abhängig sind (dh auch bei Apache auftreten), können wir eine Problemumgehung durchführen: Verwenden Sie die BrowserMatchAnweisungen, um die bestimmten (Gruppen von) Browsern zu erkennen. Legen Sie die Konfigurationsparameter für dieses Set fest. BrowserMatch-Set. Beispiele für solche Dinge reichen bis in die Browser IE 3.0 und Netscape zurück.

Wenn sich herausstellt, dass das Problem Litespeed ist, verwenden Sie den obigen Ansatz und melden Sie einen Fehler bei der Litespeed-Unterstützung. Sie zahlen für Unterstützung, nicht wahr?

Otheus
quelle
1

Die Verwendung des http / 2-Protokolls scheint das Problem in meinem Fall behoben zu haben. Ich bin mir jedoch sicher, dass es tatsächlich eine Lösung für dieses Problem gibt.

David
quelle