2011-01-21 15 views
18

Benim Nginx'te şu şekilde yapılandırılmış bir kaynağım var:Önbellek denetimi üstbilgileri; geçerli mi, değil mi? (Nginx)

location ~ foo\.js$ { 
    add_header Cache-Control public; 
    expires 1d; 
} 

Bunu Firebug ile açıp başlığa bakarsak şunu gösterir:

Cache-Control max-age=86400, public 

Site HTTPS kullanıyor Bu yüzden doğru anladığımdan emin olmak istiyorum çünkü görünüşe göre tarayıcılar, maksimum yaş> 0 ve public olmadıkça önbelleğe almıyorlar. See this

Fakat curl -Ik https://... kullandığımda Nginx ile olan şey şudur:

... 
Expires: Sat, 22 Jan 2011 18:23:36 GMT 
Cache-Control: max-age=86400 
Cache-Control: public 
... 

Cache-Control üstbilgisini tekrarlar! Açıkçası Firebug'ın umurunda değil. Ama bu doğru mu?

Expires ve Cache-Control (public ile) 'i sadece bir satırda ayarlamak daha iyi bir yol olabilir mi?

+0

Maksimum yaş ve herkese ihtiyaç duyduğunuzdan emin misiniz? Spesifikasyonlara göre (http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html), bölüm 14.9.3, "Bir yanıt üzerindeki en yüksek yaş yönergesinin, yanıtın önbelleğe alınabilir olduğunu ima ettiği (ör.Başka bir, daha kısıtlayıcı önbellek yönergesi de olmadığı sürece, "public"). " – herbrandson

cevap

24

Evet, birden çok Cache-Control üstbilgisini kullanmak geçerli ve eşdeğerdir. ve bu başlık alanı için tüm alan değeri yalnızca tanımlanan eğer aynı alan adı bir mesaj mevcut OLABİLİR ile

Çoklu mesaj-başlık alanları: HTTP 1.1 spec itibaren

virgülle ayrılmış bir liste [yani, # (değerler)]. Biri içine birden başlık alanları birleştirmek mümkün OLMALIDIR: İlk her sonraki saha değerini ekleyerek, mesajın semantiğini değiştirmeden, çifti "alanı adı alanı değeri", her ayrıldı virgülle.

Cache-Control = "Cache-Control" ":" 1 # önbellek yönerge

Bu hüküm nedeniyle how it's defined ait Cache-Control başlığının için geçerli olduğunu doğrulamak kolaydır

Yukarıdaki satırı nasıl yorumlayacağınızı anlamak için, notational conventions belgesine bakın. 1# "bir veya daha fazla virgülle ayrılmış bir liste" anlamına gelir.

+1

Yani, HTTP özelliklerine göre geçerlidir, ancak asıl soru, popüler tarayıcıların ve proxy'lerin çoklu Cache-Control üstbilgileriyle nasıl başa çıkılacağıdır. son-ve-muhtemelen büyük olasılıkla, ancak Firefox özellikle önbellek denetimi başlık kurulumu hakkında "nadir" bir şey olduğunda önbellek gibi görünüyor. Bunu iyi bir test için herhangi bir bağlantı var mı? Bunu yapmaktan nefret ediyorum Eğer zaten yapıldıysa kendim ;-) – rmalayter

+0

Spesifikasyonu okuduğumda özlediğim notasyon anlaşması, 1 # önbellek yönergesinin, bir veya daha fazla önbellek yönergesinin virgülle ayrılmış bir listesi olmasıydı, bu yüzden, daraltmak için, "#rule" a bakın. [notational conventions] (http://www.w3.org/Protocols/rfc2616/rfc2616-sec2.html) –

5

Farklı yapılandırmalarda aynı sorunu yaşıyordum. Benim için işe yarayan, "sunucu" açılış dirseğinden hemen sonra üstbilgi ve yer üstbilgi ayarını belirleyen iki satırın sırasını değiştirmek. Bu belki de tüm nesnelere başlıklarını ayarlayacaktır ama belki ifadesi "eğer" Seninle de çalışacaktır:


server { 
    expires  31d; 
    add_header Cache-Control public; 

    server_name example.com 
    ... 
} 

 

O add_header önce başlıklarını gönderir bunu değiştirmek için vakit geçirmeye yönergesi sona görünüyor.

+0

Sorunun tam olarak değil, yüksek oranda alakalı olan IMO . –

+0

ğ artık '' ' Cache-Control: max-age = 3600 \ N Cache-Control: özel, olmalı-revalidate, vekil-revalidate, max-age = 3600''' yapılandırma diyor ki: ' '' , 1 saat doldu; \ n add_header Önbellek Denetimi "özel, zorunlu olarak yeniden doğrula, proxy-revalidate, max-age = 3600"; '' ((biçimlendirme için üzgünüm) –

İlgili konular