Tarayıcılar HTTP 301'leri ne kadar süreyle önbelleğe alır?


380

HTTP 301 Kalıcı Yeniden Yönlendirme ile ilgili bir sorunu ayıklamaktayım. Hızlı bir testten sonra, Safari yeniden başlatıldığında 301'lerin önbelleğini temizler, ancak Firefox bunu yapmaz.

IE, Chrome, Firefox ve Safari 301'lerin önbelleklerini ne zaman temizler?

GÜNCELLEME: Ben yönlendirmek istiyorsanız Örneğin, example1.comiçin example2.com, fakat yanlışlıkla ayarlamak o yönlendirme yapmak example3.combir sorun olduğunu,. Hatayı düzeltebilirim, ancak example1.combu arada ziyaret eden herkes , yanlış yönlendirmeyi önbelleğe almış olacak example3.comve böylece önbellek temizlenene kadar example1.comveya example2.combunlara ulaşamayacaklar . Soruşturmadan sonra, hiçbir başlığın Cache-Controlve Expiresbaşlığın ayarlanmadığını gördüm . Hatalı 301 yanıtının başlıkları şöyle olurdu:

HTTP/1.1 301 Moved Permanently
Date: Wed, 27 Feb 2013 12:05:53 GMT
Server: Apache/2.2.21 (Unix) DAV/2 PHP/5.3.8
X-Powered-By: PHP/5.3.8
Location: http://example3.com/
Content-Type: text/html

Kendi testlerim şunları gösteriyor:

  • IE7, IE8, Android 2.3.4 hiç önbelleklemiyor.
  • Firefox 18.0.2, Safari 5.1.7 (Windows 7'de) ve Opera 12.14 tüm önbellekleri ve tarayıcı yeniden başlatıldığında önbelleği temizleyin.
  • IE10 ve Chrome 25 önbellek, ancak tarayıcı yeniden başlatıldığında temizlenmez, bu yüzden ne zaman temizlenir?

7
Lütfen chrome'a
BT

@BT sorun tüm tarayıcıları etkilediğinden, TTL'si olmayan önbelleğe alınmış 301'lerde bazı zorunlu zaman aşımlarını tanımlayarak gerçekten sadece IETF bunu düzeltebilir, böylece tarayıcılar önbelleğe alınmış varsayımlarını yeniden doğrular.
McGuireV10

1
Bu sorunu hala takip eden biri tartmak istiyorsa, IETF posta listesi hakkında bir tartışma başlattım: lists.w3.org/Archives/Public/ietf-http-wg/2017OctDec/0363.html
McGuireV10

Yanıtlar:


299

En az iki tarayıcı - Chrome ve Firefox - son kullanma tarihi olmayan 301 yönlendirmesini önbelleğe alır .

Yani, tarayıcının önbelleği barındırabildiği sürece önbelleğe alınmış olarak kalacaktır. Önbelleği manuel olarak temizlerseniz veya önbellek girişleri yenileri için yer açmak üzere temizlenirse önbellekten kaldırılır.

Bunu en azından Firefox'ta doğrulayıp about:cachedisk önbelleği altında bularak doğrulayabilirsiniz .

IE10 / IE11 gibi diğer tarayıcıların davranışlarını bilmiyorum. Ancak, diğer tarayıcıların süresiz olarak önbelleğe aldığı göz önüne alındığında, bunun için yine de uyum sağlamanız gerekecektir.

Chrome / Firefox dahil olmak üzere tüm tarayıcılarda, aşağıda açıklandığı gibi üstbilgileri kullanarak bu varsayılan davranışı geçersiz kılmak mümkündür:

Not: Bu yanıt 2014 yılında yazılmıştır ve tarayıcı davranışı zaman içinde değişebilir.

Yönlendirmenin önbelleğe alınmasını istemiyorsanız

Bu belirsiz önbellekleme, Önbellek Denetimi üstbilgileri olmadan bu tarayıcılar tarafından yalnızca varsayılan önbellekleme işlemidir. Mantık, "kalıcı" bir yönlendirme belirtmeniz ve onlara diğer önbellekleme talimatlarını vermemenizdir;

Tarayıcılar, belirtilirlerse diğer yanıtlarda olduğu gibi Önbellek Denetimi ve Sona Erme başlıkları da geçerli olur.

301 yönlendirmelerinize Cache-Control: max-age=3600veya gibi üstbilgiler ekleyebilirsiniz Expires: Thu, 01 Dec 2014 16:00:00 GMT. Hatta ekleyebilir Cache-Control: no-cachetarayıcı tarafından kalıcı olarak önbelleğe olmayacak kadar Cache-Control: no-storeböylece bile tarayıcı tarafından geçici depolama saklanan edilemez.

Bence daha iyi bir alternatif 302 veya 307 yönlendirmesi kullanmak. Bunlar, tarayıcılara veya önbelleklere "kalıcı" yönlendirmeler oldukları anlamına gelmez ve bu nedenle Önbellek Kontrolü başlıklarının yokluğunda önbelleğe alınmamalıdır.

Bana göre, bir 301 yönlendirmesi yayınlamak gibi görünüyor, ancak önbelleğe alınamaz olarak işaretlemek, teknik olarak geçerli olsa bile 301 yönlendirmesinin ne olduğu ruhuna aykırı . YMMV ve "kalıcı" bir yönlendirmenin bir zaman sınırına sahip olmasının mantıklı olduğu uç durumlar bulabilirsiniz.

Daha önce 301 yönlendirmesi yayınlamış ancak bunu yapmak istiyorsanız

İnsanlar tarayıcılarında hala önbelleğe alınmış 301 yönlendirmesini kullanıyorsa, kaynak sayfanın hala yönlendirmeye sahip olup olmadığına bakılmaksızın hedef sayfaya yönlendirilmeye devam ederler. Bunu düzeltmek için seçenekleriniz şunları içerir:

  • En basit ve en iyi çözüm tekrar 301 yönlendirmesi daha yapmaktır.

    Tarayıcı, daha önce kaldırılmış bir URL olduğunu düşündüğü şeye yönlendirildiğini fark edecektir ve bu, eski yönlendirmenin hala orada olmadığını doğrulamak için URL'yi tekrar almasına neden olmalıdır.

    Düzenleme: Bazı yorumlar bu konuda şüphe uyandırır, aşağıya bakın.

  • Önceki yönlendirme hedefinin gittiği site üzerinde kontrolünüz yoksa, şansınız kalmaz. Site sahibine size yeniden yönlendirmek için yalvarın.

Ayrıca önleme tedaviden daha iyidir - eski URL'yi kalıcı olarak kaldırmak istediğinizden emin değilseniz 301 yönlendirmesinden kaçının.


18
Ayrıca, tarayıcıların orijinal URL'yi yeniden getirerek dairesel kalıcı yönlendirmeleri işlediğini gösteren referanslarınız var mı?
Kevin Christopher Henry

7
301 yönlendirme geri çalışmıyor, tarayıcı hala önbellek eski 301 yönlendirme ve ben sonsuz döngü görüyorum
Yuriy Kolodovskyy

5
Ben testi nasıl yaptığını: Ben 301 yönlendirmesi yaptınız mı önce bir süre http://www.SOMEHOST.comiçin https://www.SOMEHOST.com. Ancak şimdi http://www.SOMEHOST.comsite için birincil ana bilgisayar olmalıdır. Bu nedenle, https'den http'ye yönlendirme kaldırıldı. Gösterdiğiniz gibi 301 ' https://www.SOMEHOST.comden yönlendirme yaptım http://www.SOMEHOST.com, ama döngüye bakın. Tarayıcı yeniden getirmedi ...
Yuriy Kolodovskyy

8
Geri yönlendirmenin (benim durumumda bir PHP yönlendirmesi ile) ilk 301 yönlendirmesini kaldırdığınız sürece Google Chrome'da mükemmel çalıştığını onaylıyorum.
Vincent Poirier

15
Yeniden yönlendirmenin mükemmel bir şekilde çalıştığını doğrulayabilirim. Yönlendirme döngüsünü gören tarayıcılar önbellek girdilerini geçersiz kılar. IE11, Firefox 52, Safari 10, Chrome 57'de test edildi.
Munhitsu

258

Chrome 71'den

Kalıcı bir yönlendirmeyi temizlemek için chrome: // settings / clearBrowserData adresine gidin ve oradan yalnızca "önbelleğe alınmış resimleri ve dosyaları" temizlemek yönlendirmeyi temizledi.

Krom 48-70

Chrome: // net-internals adresine gidin. Üstteki kırmızı durum çubuğunun sağında, açılır menüyü açmak için aşağı oku ▼ tıklayın ve "Araçlar" grubunun altında "Önbelleği temizle" yi seçin.

Sürüm 48 itibariyle, önbelleğe alınmış 301'i temizlemem için işe yarayan tek şey buydu.


14
Chrome 54 sürümünden itibaren bu maalesef benim için çalışmıyor.
pwagner

4
Düşündüm de, ben gerçekten cevap vermedi gerçek "ne kadar süre tarayıcılar bir 301 önbelleğe etmeyin" sorusunu ve cevabım muhtemelen kalıcı için bir yol gereken bir kamu bakan siteyi yönlendirilmemesidir yardım herkes bir 301 geri istiyorum vahşi ortamda kaç tarayıcının yönlendirmeyi önbelleğe aldığını bilmeden - diğer yanıtlar bu senaryoyu kısmen ele alır. Cevabım gerçekten sadece etkilenen tüm kullanıcılarla iletişim kurabileceğiniz geliştiriciler veya intranet senaryoları için kullanışlıdır.
McGuireV10

1
Chrome sürüm 68.0.3440.106'da çalışır (Resmi Yapım)
Thum Choon Tat

12
chrome: // net-internals, Chrome 71'de kullanılmış. Açılır / Araçlar bölümü yok. DNS> Ana bilgisayar çözümleyici önbelleği> Ana makine önbelleğini temizle düğmesi vardır, ancak bu önbelleğe alınmış 301'leri kaldırmak için çalışmaz.
t-jam

52
Chrome 71'de chrome: // settings / clearBrowserData ve oradan yalnızca "önbelleğe alınmış resimleri ve dosyaları" temizlemek yönlendirmeyi temizledi.
Bemmu

179

Yönlendirme önbelleğinden umutsuzca kurtulmak isteyenlere yardımcı olan bir cevap:

Chrome 301 yönlendirmesini sonsuza kadar önbelleğe alır (yerel disk önbelleğinde). Bu önbelleği temizlemek için:

  • DevTools'unuzu açın (basın F12)
  • üzerinde sekmesi kontrol "devre dışı bırak önbellek" onay kutusunu
  • DevTools'u açık tutun ve sayfayı yeniden yükleyin (basın F5)

Her şey yolunda olduğunda, "Önbelleği devre dışı bırak" seçeneğinin işaretini kaldırabilirsiniz; her şey beklendiği gibi çalışmaya devam eder.


14
Bu işe yarıyor ve önbelleğe alma işleminin yeniden etkinleştirilmesinden sonra bile yönlendirme gitti. TEŞEKKÜR!
migg

2
Bu, yerel anasistemler dosyası üzerinden 127.0.0.1'e işaret eden alanlar için çalışmıyor gibi görünüyor. Bu dava için başka bir seçenek var mı?
pwagner

Çalışmaz ise yönlendirme, unintendedly gelen gibi başka bir limana noktaları localhost:8000için localhost(port 80). Ayrıca tüm site / uygulama verilerini localhost ve localhost: 8000'den temizledim, ancak bu da yardımcı olmadı.
Dennis98

3
Bu çözüm, 16 Kasım 2019 78.0.3904.97 sürümünden itibaren Chrome'da çalışır. Diğer çözümler artık mevcut değil. Çalıştırdıktan sonra geliştirici araçlarını kapatabilirsiniz ve düzgün çalışmaya devam eder.
Peter Wooster

Kabul edilen cevap.
Aysennoussi

43

Kullanıcının bu URL'ye bir gönderi formu göndermesini sağlayın ve önbelleğe alınmış yönlendirme gitti :)

<body onload="document.forms[0].submit()">
<form action="https://forum.pirati.cz/unreadposts.html" method="post">
    <input type="submit" value="fix" />
</form>
</body>

2
Bunu çözmek için bulduğum en iyi yöntem olduğunu kabul ediyorum.
esjay

diğer cevapların aksine, bu yöntem geliştirici konsolunu açmadan diğer insanların problemlerini çözmek için uygundur! teşekkür ederim
Alexey Rytikov

4
fetch ('URL', {method: 'POST'}) hile aynı şekilde yapılır. Teşekkürler! Bu beni biraz ağrıyor!
calvin

Bunun benim için çalışan tek yol olduğuna inanamıyorum (diğer tüm yöntemleri denedim - hatta konsol fetch () bir site içi güvenlik politikası nedeniyle başarısız oldu).
user36388

24

301HTTP RFC başına önbelleğe alınabilir bir yanıttır ve tarayıcılar yanıtta bulunan HTTP önbellek başlıklarına bağlı olarak önbelleğe alır. Yanıtın önbelleğe alınacağı kesin süreyi öğrenmek için yanıt başlıklarını incelemek için FireBug veya Charles kullanın.

Önbellek süresini kontrol etmek isterseniz, HTTP yanıt başlıklarını kullanabilir Cache-Controlve Expiresaynı işlemi yapabilirsiniz. Alternatif olarak, 301yanıtı önbelleğe almak istemiyorsanız aşağıdaki başlıkları kullanın.

Cache-Control: no-store, no-cache, must-revalidate
Expires: Thu, 01 Jan 1970 00:00:00 GMT

12
Teknik olarak doğru olmasına rağmen, cevabınız kullanıcıların sorusuna cevap vermiyor ve bu nedenle buraya geldiğim soruyu cevaplamıyor. Tarayıcıda zaten var olan önbellek başlığı kaldırılmış 301'ler ana tarayıcılar için ne zaman sona erer?
soymak

Hala ilgilenen varsa, bu bağlantı talimatları önbellek 301 için geçiş yapabilirsiniz
Francisco Presencia

Bağlantı FF için ve benim için işe yaramadı. Yüklü web geliştirici uzantısı 1.2.5 ve FF 23.0.1 kullanarak
bir phu

soru cevaplanmadı. Soru, son kullanma tarihi belirtilmezse yeniden yönlendirmenin ne kadar süreyle önbelleğe alınacağıydı
Dennis Flagg

21

301, 307 vb. Http yönlendirmeleri için tarayıcı önbelleğini kaldırmanın çok basit bir yolu vardır.

Ağ panelini chrome'daki geliştirici konsolunda açabilirsiniz. Şebeke çağrısını seçin. Önbelleğe alınmış yeniden yönlendirmeyi kaldırmak için sağ tıklayın ve ardından Tarayıcı Önbelleğini Temizle'yi tıklayın .

şebeke çağrısı bağlam menüsü


1
Çok teşekkür ederim! Basit çözüm ve Çalıştı! Bu şekilde gelecekte de çalışması gerekir.
sgon00

16

Onaylanmış!! kullanıcının etkilenen URL'ye bir gönderi isteği göndermesi ve önbelleğe alınmış yönlendirme unutulur.

Hızlı bir kazanç, bunu yapabilmek için tarayıcı konsoluna girmek olacaktır:

fetch('example.com/affected/link', {method: 'post'}).then(() => {})

Etkilenen tarayıcıyı biliyorsanız (özellikle geliştirme sırasında) kullanışlıdır.

Alternatif olarak , önceki 301 yönlendirme sayfasına erişiminiz varsa, bu komut dosyasını sayfaya ekleyebilir ve her ziyaret edildiğinde önbelleğe alınan 301 unutulur.


Bu yukarıdaki yazı formuna benzer, sadece daha az çaba.
jpswade

Bu doğru @jpswade
Emeke Ajeh

12

Bana yardımcı olan bir cevap göndereceğim:

url'ye git:

chrome://settings/clearBrowserData

pop-up'ı çağırmalı ve sonra ..

  • Sadece belirleyin: cached images and files.
  • zaman kutusunu seç: from beginning

Chrome 79'da çalışma!
webaholik

Chrome 80'de çalışıyor, teşekkürler!
Joseph

6

@thomasrutter cevabı olarak

Daha önce 301 yönlendirmesi yayınlamış ancak bunu yapmak istiyorsanız

İnsanlar tarayıcılarında hala önbelleğe alınmış 301 yönlendirmesini kullanıyorsa, kaynak sayfanın hala yönlendirmeye sahip olup olmadığına bakılmaksızın hedef sayfaya yönlendirilmeye devam ederler. Bunu düzeltmek için seçenekleriniz şunları içerir:

En basit ve en iyi çözüm tekrar 301 yönlendirmesi daha yapmaktır.

Tarayıcı, daha önce hizmet dışı bırakılmış bir URL olduğunu düşündüğü şeye yönlendirildiğini fark edecektir ve bu, eski yönlendirmenin hala orada olmadığını doğrulamak için URL'yi tekrar almasına neden olmalıdır.

Önceki yönlendirme hedefinin gittiği site üzerinde kontrolünüz yoksa, şansınız kalmaz. Site sahibine size yeniden yönlendirmek için yalvarın.

Aslında, bu şu anlama gelir:

  1. a.com 301'den b.com'a

  2. a.com 's 301 silmek

  3. b.com 301'i a.com'a ekle

Sonra işe yarıyor.


2
Ama sonra hala b.com'un 301'i etrafta yatıyor: (- kirli bir düzeltme
BT

1
Farklı bir sayfadan başka bir 301 düzenleyerek bir yönlendirmeyi temizleyebilir misiniz ? örneğin ( a.com301 -> b.com) ( a.com301'i sil ) ( a.com/abcdefg301 -> ekle a.com) ve istemciyi bir şekilde görüntülemeye zorlar a.com/abcdefgmı?
nemec

Teşekkürler çalışıyor! IE11, Firefox 52, Safari 10, Chrome 57
Munhitsu

Hem a.com hem de b.com'u kullanmak istediğim bir durum vardı. Yani b.com 301 a.com bir seçenek değildi.
Çözümümüz

6

IE, Chrome ve FF içeren tüm büyük tarayıcılarda (en son sürüm) çalışan basit bir çözümüm var

  1. Ctrl + Üst Karakter + Del
  2. -
    1. Chrome: "Tarama Geçmişi" ni ve "Önbellek ..." i seçin
    2. IE: Varsayılan seçenek "Geçici Internet dosyaları ve web sitesi dosyaları", "Çerezler ve web sitesi verileri", "Geçmiş"
    3. FF: "Tarama ve İndirme geçmişi", "Önbellek"
  3. "Sil" i tıklayın
  4. Tarayıcınızı kapatın ve yeniden açın. İşe yaramalı

Bazı tarayıcılar önbelleğe alınmış öğeleri açık sayfalardan temizlemediğinden, söz konusu sayfada olmadığınızdan da emin olmalısınız.
Oliver Schimmer

6

Test amacıyla (önbelleğe alınmış yönlendirmeleri önlemek için) insanlar YENİ ÖZEL PENCERE açabilir : CTRL+SHIFT+N[Mozilla kullanıyorsanız, kullan P]


Muhtemelen "özel pencere" nin birincil vaadi önbelleklere yazmak değil, yine de OKUYUN / TEKRAR KULLANABİLİR. AMA benim için Firefox 37.0.1'de (Linux) bu işe yaradı ve çok hızlı ve kullanışlıydı. Özel pencere web sunucusunun geçerli / önbelleğe alınmamış ayarlarını yansıtırken, normal tarayıcı sekmeleri önbelleğe alınmış 301 yönlendirmesi kullanır.
alfonx

alfonx: Özel pencere önbelleği yalnızca sunucu sahibi öğeleri bir çerez biçiminde kullanabileceği için kullanıcının önceki kimliğini açığa çıkaramaz. Her ne kadar önbellek yeniden kullanmanın porno nefret eden bir eşe karşı muhtemelen güvenli olduğunu kabul etmeliyim.
Zdenek

6
Zaten önbelleğe alınmış bir 301 varsa bu işe yaramaz. Private gerçekten de önbelleğe alınan yönlendirmeyi kullanır.
jeffmcneill

1

Gizli / InPrivate modunu kullanarak yönlendirmelerinizi test edin, böylece tarayıcıyı kapattığınızda önbelleği temizler ve pencereyi yeniden açtığınızda önbellek bulunmaz.


1

Diğer cevapların gösterdiği gibi. Önbellek kesinlikle tarayıcıda olabilir. Bu son derece tehlikelidir. Öyleyse yapma. En azından önbellek üstbilgileri ekleyin. Htaccess ben her zaman şimdi hiç önbellekleme ile bu şekilde yapmak:

<IfModule mod_rewrite.c>
  RewriteCond %{HTTP_HOST} ^(www\.)?example\.com$ [NC]
  # The E=nocache:1 sets the environment variable nocache to the value of one
  RewriteRule ^/?(.*) https://www.example.org/$1 [L,R=301,E=nocache:1]
</IfModule>


<IfModule mod_headers.c>
  ## Set the response header if the "nocache" environment variable is set
  ## in the RewriteRule above.
  Header always set Cache-Control "no-store, no-cache, must-revalidate" env=nocache

  ## Set Expires too ...
  Header always set Expires "Thu, 01 Jan 1970 00:00:00 GMT" env=nocache
</IfModule>

1

Bir localhost adresi sorununu çözmek için sitenin altında çalıştığı port numarasını değiştirdim. Bu, Chrome 73.0.3683.86 sürümünde çalıştı.


Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.