İf-modifiye-since ve eğer-none-match arasındaki fark ne olabilir? İf-none-match dosyalar için kullanılırken, if-modifiye-since sayfalar için kullanılır.
Yanıtlar:
Arasındaki farklılıklar ile ilgili olarak Last-Modified/If-Modified-Since
ve ETag/If-None-Match
:
Her ikisi de birbirinin yerine kullanılabilir. Ancak, kaynağın türüne ve sunucuda nasıl oluşturulduğuna bağlı olarak, bir veya diğer soru ("... tarihinden beri değiştirildi mi?" / "Bu hala bu ETag ile eşleşiyor mu?") Yanıtlanması daha kolay olabilir .
Örnekler:
mtime
olduğu Last-Modified
tarih en basit çözümdür.ETag
çok daha kolay olacaktır. Konuyla ilgili daha fazla ayrıntı için şu bağlantılara bakın:
If-Modified-Since
karşılaştırılır Last-Modified
ise If-None-Match
karşılaştırılır ETag
. Her ikisi de Modified-Since
ve ETag
bir kaynağın belirli bir varyantını tanımlamak için kullanılabilir.
Ama karşılaştırılması If-Modified-Since
için Last-Modified
size önbelleğe varyantı olup olmadığı bilgisini veren yaşlı veya daha yeni karşılaştırılması oysa If-None-Match
için ETag
sadece ikinizi de olup olmadığını bilgi verir özdeş ya da değil. Dahası, ETag
jeneratörlerin çoğu sisteme özgü inode bilgilerini içerir, bu nedenle bir dosyanın farklı bir sürücüye taşınması da onu değiştirebilir ETag
.
Last-Modified / If-Modified-Since'de kullanılan zaman damgası değeri sınırlı bir hassasiyete sahiptir - bir saniye ve bu, herhangi bir saniyede birden fazla mesajın gönderilebildiği Web-sohbet uygulaması gibi hızlı değişen içerik için yeterli değildir. . ETag / If-None-Match bu sorunu çözmeye yardımcı olabilir.
Google'ın en iyi uygulamalarında belirtildiği gibi:
Önbelleğe alınabilir tüm kaynaklar için Expires veya Cache-Control max-age'den birini ve Last-Modified veya ETag'den birini belirtmek önemlidir. Hem Expires hem de Cache-Control: max-age veya hem Last-Modified hem de ETag belirtmek gereksizdir.
https://developers.google.com/speed/docs/best-practices/caching
Last-Modified
ile ETag
(kullanıcıaracısı tarafında ya da If-Modified-Since
birlikte If-None-Match
) bahsedilmektedir. Benzer şekilde W3 özelliği sizi kısıtlamaz. Kullanımı değil diyor If-Modified-Since
ile If-Match
ancak ETag tarafından tanımlanan tarihleri fakat aynı içeriği güncelledik belgelerin seti oldukça küçük olmalı çünkü o 's varsayalım.
If-Modified-Since bir tarih kullanırken, If-None-Match bir ETag kullanır . Her ikisi de "sayfalar" (yani HTML) ve diğer dosyalar için kullanılabilir.
Sunucu tarafından zayıf olarak belirtilmediği sürece, bir ETag güçlü bir doğrulayıcı olarak kabul edilir ve bu nedenle koşullu aralıklı bir isteği yerine getirmek için kullanılabilir. Ancak, otomatik olarak oluşturulan ETag'lerin çoğu, genellikle inode bilgileri ve / veya benzersiz bir kalıcı sayaç kullandıklarından, sunucu çiftliği durumlarında zorluklar sergiler. Pratikte, Last Modified başlığının oldukça statik içerik için yeterli olduğunu gördüm, örneğin, dosyanın yazma süresi oldukça iyi bir doğrulayıcı olduğundan, korumalı statik içeriğin sunulması.
ETag, açık ara en esnek olanıdır. Uygun istemcilerin ETag'ı koşullu bir istekte göndermeleri gerekir, ancak mevcutsa her ikisini de göndermeleri GEREKİR.
If-Modified-Since başlığı, tarayıcının istenen kaynağı en son aldığı zamanı belirtmek için kullanılır. If-None-Match başlığı, sunucunun en son alındığında istenen kaynakla verdiği varlık etiketini belirtmek için kullanılır.
Açıklanan iki şekilde, bu başlıklar tarayıcıda içeriğin önbelleğe alınmasını desteklemek için kullanılır ve eğer öyleyse kaynağın tüm içeriğiyle yanıt vermek yerine, sunucunun tarayıcıya bir kaynağın önbelleğe alınmış bir kopyasını kullanma talimatı vermesini sağlar. gerekli değil.