2012-05-16 11 views
8

Mam pobrane pliki, które są uruchamiane przez przekierowanie w elemencie iframe.Dlaczego pobieranie moich użytkowników losowo przeciąga w IE?

  1. użytkownik kliknie przycisk „Pobierz”
  2. nasz JS pobiera URL pobierania z serwera (jest to url timing-out więc to musi być zrobione w ten sposób)
  3. iframe jest przekierowywany do pobierz adres URL, który zawiera treść załącznika, więc przeglądarka rozpoczyna pobieranie bez zmiany lokalizacji strony.

działa to dobrze dla wszystkich użytkowników i przeglądarek ... z wyjątkiem niektórych użytkowników IE.

Próbowałem odtworzyć problem i oto co mam wymyślić:

  • jeśli „Zapisz lub otwarte” Okienka są kliknęli szybko, pobieranie zawsze działa
  • if okna dialogowe "zapisz lub otwórz" są klikane powoli (np. 10-20 sekund), czasami pobieranie nie działa, czasami nie. nie byłem w stanie znaleźć wzorca.

Oto jak to wygląda, gdy utknie:

enter image description here

Problem nie jest z limitu czasu łącza na S3 - moje eksperymenty powyżej są również w oknie czasowym.

Co może być przyczyną tych sporadycznych błędów pobierania?

dzienniki aktualizacji

Server sugerują, że pliki do pobrania są całkowicie wysłana do użytkownika.

+0

Normalnie dialogowe pobieranie wygaśnie pokazuje ile danych zostało pobranych, czy to jest to samo za każdym razem, gdy się zawiesza? (jest to związane z odpowiedzią @ ixe013) – Robert

+0

@Robert nope, to nie jest consiste nt między awariami.ma różny postęp w każdej awarii. –

+0

Jeśli działa w innych przeglądarkach, czy widzisz różnice w ruchu IE za pomocą Wireshark? – NoBugs

Odpowiedz

4

Nie wiem, jak IE to obsługuje, ale w innych przeglądarkach, gdy wybierasz miejsce, w którym chcesz przechowywać plik, pobieranie już się rozpoczęło. Jaki jest limit czasu twojego adresu URL pobierania? Czy próbowałeś ustawić go wyżej? Czy działa więcej niż jeden raz? (jeśli nie, sprawdź swój log pod kątem nieudanych prób dostępu). Powodzenia.

PS: jeśli nic nie działa, try this.

+0

Pomyślałem, że to może mieć z tym coś wspólnego, ale 1) jeśli zacznie się przed czasem, to nadal będzie tylko uzyskiwać dostęp do niego raz 2), nawet jeśli w jakiś sposób zrobi coś sprytnego/głupiego, co kończy się dwukrotnym dostępem, URL będzie nadal działał dla wielu wejść w terminie, który wynosi 1 minutę - również w czasie moich testów. –

+0

IE także rozpoczyna pobieranie, gdy wybierasz, co z nim zrobić. –

+0

To się zgadza. Po prostu brakuje spustu, cokolwiek to może być, który mówi, że pobieranie zostało zakończone. –

0

Która wersja IE? IE8 czasami zachowuje się niewłaściwie, jeśli nie zdecydujesz, co zrobić z pobieraniem, zanim zostanie ukończone ...

Jeśli serwer zarejestruje dane, które zostały wysłane do klienta/przeglądarki, należy wykonać następującą operację: proxy i przeglądarkę.

A twój zrzut ekranu rzeczywiście wygląda jak okno dialogowe pobierania, ale NIE wybrano jeszcze wyboru. Czy gdzieś w tle jest ekran wyboru?

+0

Zrobiłem zrzut ekranu po dokonaniu wyboru, a okna wyboru zniknęły. Czy mógłbyś rozwinąć czasami "złe zachowanie"? –

+0

Napotkałem sytuację, gdy IE8 "zapomniałem/straciłem ścieżkę" pobranego pliku, gdy dialog zapisywania/otwierania nie działał przez długi czas [godzin w moim przypadku]. To może nie być istotne, ale wciąż jest faktem. –

6

Zrobiłem kilka testów pobierając LLVM test suite, plik 78 Megs za pomocą IE 9 w Windows 7. Pobieranie rozpoczyna się po kliknięciu łącza. Internet Explorer nie czeka na potwierdzenie lub anulowanie. IE zapisuje bajty do katalogu pobierania w pliku o nazwie fizzbuz. częściowa. IE nadrobi twój wybór, zmieniając nazwę pliku po jego zakończeniu lub usunięciu, jeśli anulujesz.

Może to być problem z taktowaniem lub problem z HTTP.

Problem Timing

Czy to możliwe, że inny proces otwiera plik, może nawet go blokowania? Może nadgorliwe oprogramowanie antywirusowe lub do tworzenia kopii zapasowych w czasie rzeczywistym? Szanse są bliskie i zmienić nazwę operacji (co musi nastąpić, ponieważ serwer wysłał cały plik) coś takiego:

  1. Napisz ostatniego, poprawnych bajtów do fizzbuzz. częściowy plik
  2. Zamknij plik
  3. Zmień nazwę pliku

Co jeśli proces chwyta plik do wyłącznego odczytu między 2 i 3? Może ta aplikacja dokonuje pewnych zmian w pliku, takich jak zapisywanie do alternatywnego strumienia NTFS, które są mylące z IE?

Należy pamiętać, że wtyczki przeglądarki są również powiadamiane o zakończeniu pobierania. Innym rodzajem problemu z synchronizacją może być problem z wtyczką, która monitors the download, a widząc ją, wykonuje pewną operację. Ta operacja może zawieść lub nigdy nie wrócić w niektórych przypadkach.

Spróbuj odtworzyć problem bez działającego antywirusa (lepszy test niż tylko dodanie do białej listy pliku) i bez załadowanych wtyczek przeglądarki.

Problem HTTP

Serwer i klient musi zgodzić się na drodze, aby zakończyć połączenie. Trzeba albo:

  1. Zamknij połączenie po zakończeniu transferu
  2. Określ długość pobierania

Trudno debugowania to z daleka, ale jeśli to w ogóle możliwe, uchwycić ślad sieciową pobrania i szukać tych wskazówek:

  1. nagłówek Content-length jest nieobecny lub może off-by-N (przeglądarka będzie czekać w nieskończoność na N bajt (y), że nie przyjdzie) ?
  2. Czy każdy klient ma taką samą konfigurację proxy?
  3. Czy niedziałający klienci zostali obniżeni do HTTP 1.0? (Czy jest ustawienie o nazwie „zawsze używać http 1.0 przez pełnomocnika”

ze swojego zrzucie ekranu, wygląda przeglądarka nie był w stanie obliczyć przewidywany czas przyjazdu, ale nie ma korelacji między tym i pobierania .

+0

Sądzę, że opóźnienie powoduje, że IE pozwala na wypełnienie okna, a następnie zawiesza oczekiwanie na więcej danych wejściowych. – jthill

+0

Możliwe, ale moje ślady sieciowe nie wykazują różnicy w procesie pobierania w odniesieniu do oczekiwania na użytkownika. Ponieważ serwer wysyła całą sprawę, przyjmuję, że okno odbioru jest zawsze pełne, dawaj lub podejmuj kilka milisekund opóźnień co jakiś czas. – ixe013

0

spróbuj ustawić cache-control: max-age na wartość większą niż 0. zauważyłem, że IE można zepsuć tak na treści, które jest ustawiony bezpośrednio (czyli przy użyciu no-cache).

+0

Interesujące. Czy mógłbyś rozwinąć "spieprzać w ten sposób"? –

+0

ping - jakiekolwiek dodatkowe informacje na ten temat? –

+0

Mam tylko wyjścia z problemów, które napotkałem w IE6 kilka lat temu, nie wiem, czy istotne dla nowych wersji IE. Problem polegał po prostu na tym, że pobieranie ustawione na brak pamięci podręcznej za pośrednictwem nagłówków HTTP może w rzeczywistości nie zostać zapisane na dysku. Prawdopodobnie IE usuwa pobieranie przed jego ukończeniem, ale potem nie zdaje sobie z tego sprawy i nadal próbuje domyślnie otworzyć/zapisać akcję z plikiem, który już nie istnieje. Zauważyłem, że może to również doprowadzić do zablokowania postępu (to złe wiadomości usuwają plik, do którego wciąż piszesz lub używasz dojścia do usuniętego pliku). – SpliFF

Powiązane problemy