Jak naprawić problem zamiany obrazów w iOS 8 z utrzymywaniem przy życiu + wykładanie potoków HTTP?

9

Od czasu iOS8 w zarządzanych przeze mnie witrynach występuje sporadyczny problem polegający na zamianie zdjęć na inne obrazy. Zostało to wspomniane w wielu miejscach, ale bez widocznego rozwiązania:

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/

Wygląda na to, że w przeszłości był to problem na iOS5. Nasz serwer obsługuje Lightspeed z podszewką rur i utrzymuje przy życiu. Mój administrator serwera potwierdził, że wykładanie rur zwraca zasoby w kolejności, w jakiej zostały zamówione. Wspomniał, że wyłączenie utrzymywania aktywności może rozwiązać problem, ale znacznie zwiększy obciążenie serwera, co byłoby naprawdę złe.

Wszystkie moje zasoby również poprawnie przekazują treść.

Naprawdę jestem w ślepej uliczce, aby znaleźć rozwiązanie tego problemu. Przy tak wielu moich użytkownikach korzystających z iOS, zaczyna to być wyjątkowo frustrujące dla wszystkich.

Zaczęło się to dopiero wraz z wprowadzeniem iOS8, który ma dość poważne zmiany w Safari. W każdym z 8 wydań problem wciąż występuje. Jak powiedziałem, jest sporadyczny, a nasi użytkownicy zaczynają nas obwiniać, ponieważ „żadna inna strona nie ma problemu”.

Zastanawiałem się, czy ktoś mógłby rzucić na to trochę światła? Czy ktoś jeszcze doświadczył tego problemu i / lub znalazł rozwiązanie?

Oto link do mojej strony, o której mowa.

David
źródło
Witaj w ServerFault David, czy możesz zawęzić ten problem do html strony internetowej? Czy jest to konkretnie problem z Safari? Nie mam iPhone'a do przetestowania, ale być może możesz wskazać, które obrazy są miejscami handlu, więc ktoś tutaj, kto nie jest wystarczająco bystry, aby posiadać Droida (żart), może odtworzyć problem? Spróbuj także zainstalować inną przeglądarkę w telefonie i sprawdź, czy jest to problem z Safari lub iOS.
MDMoore313
2
@BigHomie To jest specyficzne dla Safari na iOS8. Wydaje się, że nie występuje w Google Chrome. Problem nie pojawia się na żadnej innej platformie.
David
Cześć ! Mam wiele pytań, które pomogą ci skoncentrować się na prawdziwym problemie. Czy problem występuje w Safari OS X? Czy problem występuje w Safari iOS w symulatorze? Czy próbowałeś otworzyć link inspektora Safari, aby sprawdzić, czy linki do zdjęć są prawidłowe lub czy jest to problem z pamięcią podręczną Safari? Te pytania powinny nas doprowadzić do źródła problemu.
DeadEye
@DeadEye Jestem pewien, że problem występuje tylko w systemie iOS 8. Nie jestem pewien, czy dzieje się to w symulatorze, a inspektor internetowy nie pokazuje nic niezwykłego. W rzeczywistości obrazy wracają z prawidłową nazwą pliku, pomimo niewłaściwego obrazu. Moim największym problemem jest to, że raport radaru dla Apple został zamknięty bez powodu, a Openradar nie ma na nim żadnej aktywności, pomimo wszystkich informacji na forach dyskusyjnych.
David
Jeśli próbujesz przejść bezpośrednio do ścieżki obrazu zamienionego obrazu przez Safari iOS, czy jest to poprawny obraz?
DeadEye

Odpowiedzi:

2

Mieliśmy również ten problem, a rozwiązaniem dla nas było usunięcie wszystkich tagów w naszym HTML i użycie klas css z właściwością tła. Oto przykład:

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

Wiem, czuję się trochę niezręcznie, ale to był jedyny sposób, który rozwiązał dla nas problem. Wadą jest to, że musieliśmy usunąć „alt” dla obrazów, ale myślę, że można to rozwiązać za pomocą javascript, jeśli to konieczne.

Mam nadzieję że to pomoże!

Mikael Lundberg
źródło
2

Miałem do czynienia z tym problemem na nowej stronie internetowej, którą właśnie uruchomiliśmy. Wszystko wyglądało dobrze w FF / Opera / Chrome itp., Ale miałem poważne problemy z zamianą obrazów w iOS8 +. Zauważyłem, że wiele stron zgłaszających ten problem działa na serwerze Litespeed. Na chwilę przełączyłem się na Apache, aby przetestować, i oczywiście strona ładowała się dobrze. Mój host (wiredtree.com, doskonała usługa) i ja sprawdziliśmy niektóre opcje konfiguracji w Litespeed i wyłączyliśmy te dwie opcje:

  • Włącz kompresję
  • Włącz kompresję dynamiczną

Po wyłączeniu tych dwóch witryn załadowano w porządku bez żadnych problemów. Zajęło to bardzo niewielki hit wydajności, ale zdecydowanie warto.

Na początku próbowaliśmy wyłączyć utrzymywanie aktywności, aby skutecznie wyłączyć potokowanie HTTP, ale to nie rozwiązało problemu. Powyższe jest jedyną rzeczą, jaką widziałem, która oferowała prawdziwe rozwiązanie.

Mam nadzieję, że może to pomóc komuś, kto ma takie same problemy!

Kevin
źródło
1

Nie odpowiedź, ale podejście do rozwiązania problemu:

  1. Odtwórz problem samodzielnie, korzystając z wersji programistycznej aplikacji przy użyciu produkcyjnych serwerów WWW. Tylko upewniając się, że to obejmuje.
  2. Utwórz nowy wpis nazwy hosta / CNAME i odpowiedni host wirtualny na serwerze WWW lub, jeśli to konieczne dla kroku 3, oddzielny serwer HTTP na oddzielnym porcie. Nazywa się to „testowym serwerem HTTP”
  3. Skieruj swoją wersję testową / programistyczną na ten nowy serwer HTTP i odtwórz problem. Nie idź do kroku 4, dopóki nie możesz tego zrobić!
  4. Teraz na tym testowym serwerze HTTP, albo poprzez przekierowania lub inteligentną konfigurację (jak to możliwe w Apache), wyłącz keepalives, kompresję, https, buforowanie, potokowanie i cokolwiek innego, co możesz wymyślić. Odtwórz problem i zwróć uwagę na wszystkie krotki konfiguracyjne, które to robią, i te, które tego nie robią.
  5. Zamień serwer Litespeed na Apahce. Ponownie, powinno być dość trywialne dla dobrego administratora. ( ahem ). Odtwórz problem.

Jeśli możesz odtworzyć problem przez cały krok 5 i żaden zestaw zmian konfiguracji lub zmian oprogramowania serwera nie robi różnicy, problem dotyczy iOS i prawdopodobnie nic nie możesz zrobić. (Ale to mało prawdopodobne).

Jeśli jednak istnieje zestaw zmian w konfiguracji, który nie jest zależny od Litespeed (tj. Występuje również w Apache), możemy to obejść: Użyj BrowserMatchdyrektyw, aby wykryć określoną (zestaw) przeglądarki; ustaw parametry konfiguracyjne dla tego zestawu Zestaw BrowserMatch. Znajdziesz przykłady tego rodzaju rzeczy sięgające wstecz przeglądarki IE 3.0 i Netscape.

Jeśli okaże się, że problem dotyczy Litespeed, skorzystaj z powyższego podejścia i zgłoś błąd z obsługą Litespeed. Płacisz za wsparcie, prawda?

Otheus
źródło
1

wydaje się, że użycie protokołu http / 2 rozwiązało problem w moim przypadku. Ale jestem pewien, że może istnieć faktyczna poprawka / rozwiązanie tego problemu.

David
źródło