Czy Chrome buforuje pobrany plik?

4

Dość dziwaczny.

W mojej aplikacji internetowej mam link do arkusza kalkulacyjnego przechowywanego w S3. Wcześniej zapisałem ten plik. Teraz zaktualizowałem ten plik w s3.

Gdy próbuję pobrać go ponownie z tego samego linku, nadal otrzymuję poprzednią wersję.

Jeśli wyczyszczę pamięć podręczną, pobierze nowszą wersję ...

thinkanotherone
źródło
Przechowuje plik w pamięci podręcznej, chociaż pamięć podręczna jest często usuwana, bardziej prawdopodobne jest, że plik został już usunięty.
MilanorTSW
Z jakiegoś powodu nie zniknie po około 10 godzinach. Może dlatego, że pobrałem ten link 10 lub 15 razy dziennie, Chrome uważa, że ​​warto go przechowywać przez dłuższy czas. Wyczyściłem pamięć podręczną, teraz działa. Myślę, że powinienem to „uwalniać”.
thinkanotherone
Co jest Ustawienia wygaśnięcia i pamięci podręcznej HTTP na stronie w aplikacji internetowej, z której łączysz się z plikiem w S3?
Ƭᴇcʜιᴇ007

Odpowiedzi:

2

Masz dwie możliwości obejścia tego:

  1. Możesz powiedzieć Amazonowi, jak ustawić Cache-Control nagłówek po pobraniu adresu URL. W ten sam sposób, w jaki określasz Content-Type nagłówek, możesz również kontrolować inne nagłówki. Możesz zmienić buforowanie na znacznie krótszy przedział czasu.

  2. Możesz kontrolować buforowanie strony internetowej, która łączy się z plikiem w S3 i zmodyfikować łącze do pliku S3, aby jego zawartość nie była używana z pamięci podręcznej, gdy plik się zmieni. Zasadniczo możesz po prostu umieścić ?version=1 na końcu adresu URL. Jeśli zmienisz to na ?version=2 (i tak dalej) przeglądarka nie użyje buforowanej wersji pliku, ponieważ adres URL nie będzie dokładnie pasował.

Ta druga metoda pozwala na użycie agresywnego buforowania w pliku S3 i uniknięcie zmarnowanych transferów. Wymaga to jednak modyfikacji każdej strony internetowej, która łączy się z plikiem przy każdej zmianie zawartości pliku.

Widzieć Opuść swój rachunek Amazon S3 więcej o obu technikach, chociaż starasz się uzyskać efekt odwrotny.

David Schwartz
źródło
1

Tak. Mam ten sam problem, nawet jeśli nie używam S3 jako pamięci. Mam aplikację Symfony2, która służy do pobierania zawartości lokalnego pliku. Adres URL jest zawsze taki sam, ponieważ otrzymuję zawartość pliku w PHP i wysyłam go do przeglądarki. Jeśli zmodyfikuję zawartość lokalnego pliku, Firefox i IE otrzymają najnowszą wersję pliku BUT chrome nie. Próbowałem ustawić nagłówki kontroli pamięci podręcznej, ale jest to bezużyteczne, Chrome po prostu je ignoruje.

Pomysł na nagłówki, których używam:

$response->headers->addCacheControlDirective('no-cache', true);
$response->headers->addCacheControlDirective('max-age', 0);
$response->headers->addCacheControlDirective('must-revalidate', true);
$response->headers->addCacheControlDirective('no-store', true);

Jeśli dodam losowy numer wersji do adresu URL (? Version = randomIntByTime), Chrome w końcu zapisze najnowszą wersję pliku. Frustrujące jest pisanie dodatkowego kodu dla Chrome.

Andrei Sandulescu
źródło
0

Nie, ale możliwe jest, że istnieje inne urządzenie buforujące między Tobą a S3. Podobnie jak serwer ISA Microsoftu, który przechowuje buforowanie ruchu w sieci i widziałem, jak to robi wiele razy.

Coding Gorilla
źródło
Łączę się z mojego domowego połączenia DSL.
thinkanotherone
Zgaduję, że nie masz wtedy serwera ISA! Ale możesz łatwo przetestować teorię, którą Chrome zapisuje w pamięci podręcznej, używając IE lub Firefox do tego samego żądania. Lub po prostu wyczyszczenie pamięci podręcznej Chrome.
Coding Gorilla
Zrobiłem. Ale myślę, że liczyłem na kogoś, kto zna wewnętrzne działanie.
thinkanotherone