2011-11-28 28 views
35

I bu başlıklar sunucu tarafından istemciye gönderilen adres:Chrome tarayıcı göndermiyor başlığında sunucusuna

Cache-Control:private 
Connection:keep-alive 
Content-Encoding:gzip 
Content-Type:text/html 
Date:Sun, 27 Nov 2011 11:10:38 GMT 
ETag:"12341234" 
Set-Cookie:connect.sid=e1u...7o; path=/; expires=Sun, 27 Nov 2011 11:40:38 GMT; httpOnly 
Transfer-Encoding:chunked 
last-modified:Sat, 26 Nov 2011 21:42:45 GMT 

İstemci dosyası üzerinde değişiklik olmadığını doğrulamak istiyorum sunucu ve aksi takdirde "304" varsa bir "200" gönderin.

Firefox gönderir:

if-modified-since: Sat, 26 Nov 2011 21:42:45 GMT 
if-none-match: "12341234" 

Neden krom sayfasının bir yenileme aynı göndermiyor? Ben Net çalıştıran olan davranış peşindeyim: Tecrübelerime göre

context.Response.Cache.SetCacheability(HttpCacheability.ServerAndPrivate) 
+0

ben davranışları peşindeyim" anlamıyorum ...> Bu işaretini kaldırın o .Net çalışıyor: ". Düzenleyebilir misin? Soru benim için önemli. –

+0

Kodun çalıştırılmasından aldığınız davranışı '' 'in .Net’den sonra almanızın bir sorunu vardı. Etiketlere bakarak, node.js.'deki davranışı taklit etmeye çalışıyordum. – Asken

+0

Bunun bir müşteri tarafı sorunu olduğunu düşünen ve bu cevaplara oy veren herkes için. Lütfen şunu okuyun: Tarayıcı isteğini etag ('if-none-match') kullanarak yaptıktan sonra sunucu ile ilgili. Etag sunucu tarafı oluşturulur ve istemci ile ilgisi yoktur. Bilmem gereken şey, etag üstbilgisini de kroma göndermesini sağlamak için sunucudan istemciye ne gönderilmesi gerektiğidir. Seçilen cevap, sunucunun "eğer-none-match" 'i göndermesini söyleyen tek doğrudur. – Asken

cevap

9

sadece "Özel" Cache-Control başlığının daha fazlası lazım. Chrome'u sunucuyla içeriği yeniden doğrulamak için "Maks. Yaş" veya "Sona Erdir" seçeneğine ihtiyacınız vardır.

Yeniden değerlemenin yalnızca bu zaman değerleri geçtikten sonra başlayacağını unutmayın, bu nedenle küçük bir değere ayarlanması gerekebilir.

+0

Önbellek denetimini denedim: private, max-age = 0. İşe yaramadı mı? Ayrıca expires üstbilgisini ekledim ama yine de gitmiyorum. – Asken

+0

Aslında ... max-age = 100000 veya bir şey olmalı. Neredeyse işe koyuldu. Bir-yok-eşleşmesini birkaç kez göndermek için alın, yani harekete geçiyordu. Teşekkürler! – Asken

+0

Genellikle Max-age'i 1 saate ayarlıyorum ancak statik içeriğinizi ne sıklıkla güncellediğinize bağlı. Emin değilseniz, güvenli tarafın değerini düşük tutun. –

53

Bu günde yarım gün geçirdikten sonra, sorunun nedenini takip ettim. Chrome nesne denetçisi/İstemci Debugger/Ağ izleyicisi/Thing'i F12'ye bastığınızda açılana kadar, Chrome önbellek isteği üstbilgileri göndermez. Dönemi. (güncelleme: Chrome'un daha yeni sürümlerinde, "Önbelleği devre dışı bırak" onay kutusu var). "Ağ" sekmesi açık olmasa bile (örn: javascript konsolunu açık tutun), bu onay kutusu tüm önbelleğe almayı yine de devre dışı bırakır.

Üzgünüz, çünkü bunu istemci tarafındaki hata ayıklama nedeniyle, hangi başlıkların gönderilip alındığını ve hangi kodların döndürültüğünü görmek için ağ panelini açık bırakmanız gerekir. Ağ paneli açıkken, içeriğinizin istemci tarafından önbelleğe alındığını öğrenmenin bir yolu yoktur.

Sunucu erişim günlüklerinizi kazarsanız, Chrome istemcinizde hata ayıklama penceresini kapattığınız anda sunucunuzun 304s (Önbelleğe Alınan İçerik) döndürdüğünü görürsünüz. Bu yardımcı olur umarım. HTTPS kullanırken

Krom 24.0.1312.57

+43

Dev araçlar, "Devre dışı bırak (DevTools açıkken)" seçeneğine sahiptir. Sağ alt köşedeki 'dişli' simgesini tıklayın ve ayarlarınızı kontrol edin. – Neek

+0

+1 (Evet, önbelleği devre dışı bırak ("DevTools açıkken)") işaretini kaldırmanız gerekir. –

+2

Bu cevap değil ve cevap sunucu ile ilgili. – Asken

24

ben ne buldum paylaşmak istedim, bu davranışa bir cevap buldu. HTTP veya HTTPS ile istekte bulunup bulunmadığınızı belirtmezsiniz.

"Kural aslında oldukça basit: Sertifikadaki herhangi bir hata, sayfanın önbelleğe alınmayacağı anlamına gelir."

https://code.google.com/p/chromium/issues/detail?id=110649

o sayfadan sayfa yüklendiğinde, hiçbir kaynak önbelleğe alınması böylece bunun için bir istisna eklemek için Chrome'u söyle, art arda istek olmaz bile, kendinden imzalı sertifika kullanıyorsanız If-Modified-Since başlığı var.

+0

Bu doğru olmayacak gibi görünüyor. Tarayıcının bazı kaynaklar için "eğer-değiştirilmiş" başlıkları gönderiyor ve başkalarına göndermiyor. – pbanka

+0

Bir önceki yorumun aksine, bende de aynısını gördüm. Geçersiz bir sertifikaya sahip olduğum bir ortamda Modifiye Edilmiş Olma durumu gönderilmiyordu, ancak geçerli bir hesabım olduğunda gönderiliyordu. – dmccabe

+0

Teşekkürler, ben de bu problemi yaşadım. Bir dev makinede kendinden imzalı bir sertifika testi kullanıyordum. Bir test olarak, sertifikaya geçici olarak güvendim ve 304'leri beklediğiniz gibi almaya başladım. – Steviebob

0

Bu sorunun eski olduğunu biliyorum, ancak yine de .. Yaptığım son yenilemenin krom olduğunu hatırladım. Bu nedenle, ctrl + shift + r (önbelleği yenileme ve silme) düğmesine basarsanız ve ctrl + r tuşlarına basarsanız (sadece ferahlatıcı), krom önbelleği silmeye devam eder ve alınan yanıtta 304 değerini göstermez. Bunun için bir geçici çözüm var. Ctrl + shift + r tuşlarına basın ve ardından adres çubuğuna gidin, odaklayın ve enter tuşuna basın. Etags'iniz doğru şekilde ayarlanmışsa ve sunucunuz 304'e hizmet vermeye hazırsa, hata ayıklayıcısında yeni bir yanıt kodu görürsünüz.Ayrıca

+0

Bu bir istemci sorunu değil ... – Asken

+0

Bu davranışı birden çok sitede gözlemledim. Müşteri hatası ya da değil, bazen cmd + r'nin yeterli olmayabileceğini bilmek güzel. –

+1

Kabul edilen yanıt, çalışmadığı sitelere yardımcı olacak ve site kullanıcılarını gerekmemeleri gereken şeyleri yapmaya zorlamayacaktır. – Asken

4

(https://stackoverflow.com/a/14899869/362780):

F12> Ayarlar> Genel> devre dışı bırak önbellek (DevTools açıkken) -

+0

Devre Dışı Bırakma önbelleği işaretli değil ve sorun devam ediyor. 58.0.3029.110 (64-bit) sürümü çalıştırıyorum. – Reado

İlgili konular