2012-09-28 11 views
9

iOS6 ajax Cache na żądanie POST staje się ogromnym problemem dla naszej aplikacji webowej. Większość naszych użytkowników dodała aplikację do ekranu głównego. Od czasu aktualizacji większość żądań POST do backendu nie działa, a dane są nieaktualne z ponad 6 dni temu i są zliczane. Znamy dwa sposoby rozwiązania tego problemu: jednym jest zmienianie każdego żądania POST, tak aby było inaczej, poprzez dodawanie znacznika czasu lub losowych danych wejściowych, a drugim jest wyłączanie buforowania na serwerze internetowym.iOS6 - Czy istnieje sposób, aby wyczyścić buforowane żądania ajax POST dla webapp dodane do ekranu głównego?

Oba obejścia są opisane w następujący wpis: Is Safari on iOS 6 caching $.ajax results?

Wyłączenie buforowania na serwerze internetowym byłby rozwiązany problem, jeśli został ustawiony przed uaktualnieniem iOS6 (lub zaraz po). Wydaje się jednak, że wszystkie żądania POST, które zostały wprowadzone od czasu aktualizacji i dopóki nie wyłączyliśmy buforowania z aplikacji dodanych do ekranu głównego, są nadal buforowane! i nie możemy znaleźć sposobu na ich usunięcie. usunięcie aplikacji na ekranie głównym i ponowne uruchomienie urządzenia nie działa! Jedyną dostępną opcją jest zmiana adresu URL lub dodanie sygnatury czasowej do każdego żądania, a także wyłączenie buforowania na serwerze internetowym.

Czy ktoś wie o sposobie wyczyszczenia pamięci podręcznej aplikacji ekranu głównego, oprócz przywracania do fabryki? proszę podać szczegóły.

Ostrzeżenie dla każdego, kto wdrożył obejście, dodając znacznik czasu do swoich żądań bez wyłączania buforowania na serwerze. Jeśli Twoja aplikacja zostanie dodana do ekranu głównego, KAŻDA odpowiedź na post zostanie teraz zapisana w pamięci podręcznej i nie wygaśnie. O ile ktoś nie ma sposobu, aby to wyczyścić, wygląda na potencjalny wyciek pamięci!

+1

Buforowanie iOS6 jest wyraźnie sprzeczne ze specyfikacją HTTP (patrz http://www.mnot.net/blog/2012/09/24/caching_POST). Nie spodziewaj się, że będzie tam w 6.01 – Alnitak

+2

Jest to rzeczywiście sprzeczne ze specyfikacją, ale w pełni oczekuję, że nadal będzie tam w 6.01, ponieważ Apple nie uznał błędu i prawdopodobnie po prostu założy, że ludzie naprawią go samodzielnie i mogą zachowajcie ich "poprawę wydajności". Grr. – Kieran

Odpowiedz

1

Jedynym sposobem, aby delikatnie pokonać ten problem z pamięcią podręczną, jest skorzystanie z podejścia Google i dodanie identyfikatora żądania w adresie URL. Następnie możesz użyć mod_rewrite lub innego takiego silnika dla twojego serwera, aby uczynić to przezroczystym dla twoich skryptów backendu.

+1

Uzgodnione. Dodaj identyfikator żądania (zapisz go do sesji), który wygasa po otrzymaniu danych o wpisie. Opcjonalnie możesz dodać to jako ukryty element formularza zamiast parametru URL, ale tak czy inaczej to by działało. –

Powiązane problemy