Aralık ayında tarama: HTTP önbelleğe alma

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:

  1. 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".
  2. 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ığındaki max-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.


Tarama hakkında daha fazla bilgi edinmek ister misiniz? Crawling December serisinin tamamına göz atın: