2011-08-15 34 views
15

Mam plik, który mogę połączyć się z mojej strony jak
Link HTML pomijający pamięć podręczną?

<a href="http://example.com/myfile.txt>View!</a> 

Jednak plik ten zmienia się bardzo często i po kliknięciu linku, przeglądarka ładuje pamięci podręcznej wersję pliku, a nie rzeczywisty plik . Czy jest jakiś sposób, aby kliknięcie tego linku pominęło pamięć podręczną dla tej strony?

Coś miłego jak <a bypassCache href=""> byłoby pobożnym życzeniem.

Odpowiedz

19

Coś miło byłoby być pobożnym życzeniem.

Rzeczywiście, istnieje coś, co można zrobić z poziomu łącza: Dodaj losowy parametr GET.

<a href="http://example.com/myfile.txt?a=193834923283943842923">View!</a> 

Można użyć JavaScript (lub oczywiście języka skryptowego po stronie serwera, takiego jak PHP), aby zrobić to w sposób dynamiczny.

Jednak lepszym sposobem byłoby skonfigurowanie nagłówków buforowania pliku tekstowego w pierwszej kolejności po stronie serwera. Kradzież informacji Główka Best way to disable client caching, plik .htaccess jak to powinno działać:

<Files myfile.txt> 
FileETag None 
<IfModule mod_headers.c> 
Header unset ETag 
Header set Cache-Control "store, no-cache, must-revalidate, post-check=0, pre-check=0" 
Header set Pragma "no-cache" 
Header set Expires "Sun, 19 Nov 1978 05:00:00 GMT" 
</IfModule> 
</FilesMatch> 
+0

Nie! Nigdy nie dodawaj losowego parametru, aby uniknąć buforowania. Jeśli używasz serwerów proxy pamięci podręcznej, takich jak Varnish, wypełniasz pamięć podręczną nieprzydatnymi wpisami, które nigdy nie będą używane. Powinieneś użyć parametrów nagłówka Cache-Control i Pragma. – mickiewicz

0

Dodaj losową liczbę po hiperłącze, takie jak <a href="http://example.com/myfile.txt?rand=12312321321">View!</a>

wygenerować nową liczbę losową za każdym razem wczytywania strony.

+0

ale nie jestem jedynym, który będzie zawsze zaktualizuj plik. Oznacza to, że będę musiał udzielić dostępu każdemu, kto edytuje plik i poinstruować ich, by wygenerowali losową liczbę: – dukevin

1

Najlepszym sposobem jest powiedzieć apache/(serwer WWW) powiedzieć przeglądarki nie pozwalają buforowanie tego pliku, jeśli nie masz kontrolę nad tym serwerem, możesz pominąć pamięć podręczną zmieniając parametry wysyłane do niego, po prostu dodaj kilka numerów za ?, na przykład czas, kiedy utworzyłeś link, to sprawia, że ​​każdy adres URL jest inny, więc przeglądarka zignoruje pamięć podręczną, ale wszystkie łącza do tego samego pliku, o ile serwer zignoruje dodatkowy parametr. w php:

echo "<a href='http://example.com/myfile.txt?" . time() . "'>View!</a>" 
+0

Na szczęście już używałem php, więc twój czas() działał bardzo ładnie – dukevin

0

Możesz rozwiązać swój problem na poziomie serwera. Ustaw specjalną datę wygaśnięcia zasobów txt (lub tego konkretnego), które pasują do twoich wymagań. Jeśli używasz apache można przeczytać o mod_expiry dla apache tutaj

1

Wystarczy umieścić

<meta http-equiv="expires" content="0"> 

do sekcji head strony docelowej i sprawdź ponownie

Powiązane problemy