9 Aralık 2024 Pazartesi
Önbelleğe almamıza izin vermenizi rica ederiz.
İnternet yıllar içinde büyüdükçe Google'ın taradığı öğe sayısı da arttı. Google'ın tarama altyapısı, sezgisel önbelleğe alma mekanizmalarını desteklese de (aslında her zaman desteklemiştir) yerel önbellekten döndürülebilecek istek sayısı azalmıştır. 10 yıl önce toplam getirme işlemlerinin yaklaşık %0,026'sı önbelleğe alınabilirken bu oran halihazırda çok olmamasına rağmen günümüzde %0,017'ye düşmüştür.
Önbelleğe alma neden önemlidir?
Önbelleğe alma, internet adlı büyük bulmacanın kritik bir parçasıdır. Önbelleğe alma; tekrar ziyaret edilen sayfaların çok hızlı yüklenmesine yardımcı olur, bilgi işlem kaynaklarından ve dolayısıyla doğal kaynaklardan tasarruf sağlar ve hem istemciler hem de sunucular için pahalı olan bant genişliğinden muazzam miktarda tasarruf eder.
Özellikle tek tek URL'ler altında nadiren değişen içeriğe sahip büyük bir siteniz varsa yerel olarak önbelleğe
almaya izin vermek, sitenizin daha verimli bir şekilde taranmasına yardımcı olabilir. Google'ın tarama altyapısı,
HTTP önbelleğe alma standardında
tanımlandığı şekilde sezgisel HTTP
önbelleğe almayı, özellikle ETag
yanıtı ve If-None-Match
istek başlığı ile
Last-Modified
yanıtı ve If-Modified-Since
istek başlığı aracılığıyla
destekler.
Hata ve yanlış ihtimali daha az olduğu için ETag
kullanmanızı önemle tavsiye ederiz
(değer, Last-Modified
değerinin aksine yapılandırılmış değildir). Mümkünse ikisini de ayarlarsanız
internet dünyası size teşekkür edecektir.
Neleri müşterilerin önbelleğini yenilemesi gereken bir değişiklik olarak değerlendirdiğiniz size bağlıdır. Bizim önerimiz, içeriğinizde önemli değişiklikler yaptığınızda önbelleği yenilemenizdir. Sayfanızın alt kısmındaki telif hakkı tarihini güncellediyseniz bu muhtemelen önemli bir değişiklik değildir.
ETag
ve If-None-Match
Google'ın tarayıcıları, ETag
tabanlı koşullu istekleri tam olarak HTTP önbelleğe alma standardında
tanımlandığı şekilde destekler.
Yani, Google'ın tarayıcılarına önbelleğe alma tercihini bildirmek için Etag
değerini, erişilen
URL tarafından barındırılan içeriğin temsiline özgü herhangi bir ASCII dizesine (seçimi size bağlı olmak üzere
genellikle içeriğin veya sürüm numarasının karması, ancak π parçası da olabilir) ayarlayın.
Örneğin, aynı içeriğin farklı sürümlerini aynı URL altında barındırıyorsanız (ör. mobil ve masaüstü
sürümü) her sürümün benzersiz bir ETag
değeri olabilir.
Google'ın önbelleğe almayı destekleyen tarayıcıları, URL'nin önceki bir taraması için
döndürülen ETag
değerini If-None-Match header
içinde gönderir. Tarayıcının
gönderdiği ETag
değeri, sunucunun oluşturduğu mevcut değerle eşleşirse sunucunuz HTTP gövdesi
olmayan bir HTTP 304
(Değiştirilmedi) durum kodu döndürmelidir. HTTP gövdesi olmayan
bu son kısım, birkaç nedenden dolayı önemlidir:
- Sunucunuzun içerik oluşturmak için bilgi işlem kaynakları harcaması gerekmez. Yani paradan tasarruf edersiniz.
- Sunucunuzun HTTP gövdesini aktarması gerekmez. Yani paradan tasarruf edersiniz.
İstemci tarafında (ör. kullanıcının tarayıcısı veya Googlebot) söz konusu URL'nin altındaki içerik, istemcinin dahili önbelleğinden alınır. Veri aktarımı olmadığından bu işlem çok hızlı gerçekleşir. Bu da kullanıcıları memnun eder ve onların da kaynak tasarrufu yapmasına yardımcı olabilir.
Last-Modified
ve If-Modified-Since
ETag
ile benzer şekilde, Google'ın tarayıcıları da Last-Modified based
koşullu isteklerini HTTP önbelleğe alma standardında tanımlandığı şekilde destekler. Bu, semantik açıdan
ETag
ile aynı şekilde çalışır (kaynağın önbelleğe alınabilir olup olmadığına karar
vermek için bir tanımlayıcı kullanılır) ve istemci tarafında ETag
ile aynı avantajları
sağlar.
Önbelleğe alma yönergesi olarak Last-Modified
kullanıyorsanız birkaç önerimiz
var:
-
Last-Modified
başlığındaki tarih, HTTP standardına göre biçimlendirilmelidir. Ayrıştırma sorunlarını önlemek için şu tarih biçimini kullanmanızı öneririz: "Hafta içindeki gün, DD Mon YYYY HH:MM:SS saat dilimi". Örneğin, "Fri, 4 Sep 1998 19:15:56 GMT". -
Bunu yapmanız zorunlu olmasa da tarayıcıların belirli bir URL'yi ne zaman
yeniden tarayacağını belirlemesine yardımcı olmak için
Cache-Control
başlığındakimax-age
alanını da ayarlayabilirsiniz.max-age
alanının değerini, içeriğin değişmeden kalması beklenen saniye sayısına ayarlayın. Örneğin,Cache-Control: max-age=94043
.
Örnekler
Sezgisel önbelleğe almanın çalışma şekli konusunda kafanız benim gibi karışıyorsa istek ve yanıt
zincirinin bir örneğini görmek işinize yarayabilir. Çalışma şeklini görselleştirme
amacıyla biri ETag
/If-None-Match
, diğeri
Last-Modified
/If-Modified-Since
için olmak üzere iki zincir
verilmiştir:
ETag /If-None-Match |
Last-Modified /If-Modified-Since |
|
---|---|---|
Sunucunun tarama yanıtı: Bu, tarayıcının ETag ve Last-Modified ön koşul başlığı
alanlarını alıp kaydedileceği yanıttır.
|
HTTP/1.1 200 OK Content-Type: text/plain Date: Fri, 4 Sep 1998 19:15:50 GMT ETag: "34aa387-d-1568eb00" ... |
HTTP/1.1 200 OK Content-Type: text/plain Date: Fri, 4 Sep 1998 19:15:50 GMT Last-Modified: Fri, 4 Sep 1998 19:15:56 GMT Cache-Control: max-age=94043 ... |
Sonraki tarayıcı koşullu isteği: Koşullu istek, önceki istekten kaydedilen ön
koşul başlık değerlerine dayanır. Değerler, If-None-Match ve If-Modified-Since istek
başlıklarında doğrulama için sunucuya geri
gönderilir.
|
GET /hello.world HTTP/1.1 Host: www.example.com Accept-Language: en, hu User-Agent: Googlebot/2.1 (+http://www.google.com/bot.html) If-None-Match: "34aa387-d-1568eb00" ... |
GET /hello.world HTTP/1.1 Host: www.example.com Accept-Language: en, hu User-Agent: Googlebot/2.1 (+http://www.google.com/bot.html) If-Modified-Since: Fri, 4 Sep 1998 19:15:56 GMT ... |
Koşullu isteğe gönderilen sunucu yanıtı: Tarayıcının gönderdiği ön koşul başlığı
değerleri sunucu tarafında doğrulandığından sunucu, tarayıcıya bir 304 HTTP
durum kodu (HTTP gövdesi olmadan) döndürür. Bu durum, ön koşullar doğrulanamayıncaya
(sunucu tarafında ETag veya Last-Modified tarihi değiştiğinde) kadar
sonraki her istek için geçerli olur.
|
HTTP/1.1 304 Not Modified Date: Fri, 4 Sep 1998 19:15:50 GMT Expires: Fri, 4 Sep 1998 19:15:52 GMT Vary: Accept-Encoding If-None-Match: "34aa387-d-1568eb00" ... |
HTTP/1.1 304 Not Modified Date: Fri, 4 Sep 1998 19:15:50 GMT Expires: Fri, 4 Sep 1998 19:15:51 GMT Vary: Accept-Encoding If-Modified-Since: Fri, 4 Sep 1998 19:15:56 GMT ... |
Hem kullanıcılarınızı mutlu etmek hem de barındırma masraflarınızdan tasarruf etmek istiyorsanız barındırma veya içerik yönetim sistemi sağlayıcınızla ya da geliştiricilerinizle siteniz için HTTP önbelleğe alma özelliğini nasıl etkinleştireceğiniz hakkında konuşun. En kötü ihtimalle kullanıcılarınızın sevgisini kazanırsınız.
Önbelleğe alma hakkında konuşmak isterseniz en yakın Arama Merkezi yardım topluluğunuza gidin. Önbelleğe almayı gerçekleştirme şeklimizle ilgili yorumlarınız varsa bu blog yayınıyla birlikte yayınladığımız önbelleğe alma dokümanları hakkında geri bildirim verin.