AMP Önbellek URL Biçimi ve İstek İşleme
Important: this documentation is not applicable to your currently selected format email!
Bu belgede, AMP Önbellek URL biçimi ve istekleri nasıl işlediği hakkında bilgi edineceksiniz.
URL Biçimi
Mümkün olduğunda, Google AMP Önbelleği, önce IDN'den (punycode) UTF-8'e dönüşüm yaparak her AMP belgesinin alan adı için bir alt alan adı oluşturur. Önbellekler her -
(tireyi) --
(2 tire) ile değiştirir ve her .
(noktayı) -
(tire) ile değiştirir. Örneğin, pub.com
, pub-com.cdn.ampproject.org
ile eşleşecektir.
Bir URL'yi AMP önbellek sürümüne dönüştürmek için bu URL hesaplayıcısını kullanabilirsiniz:
Bu belge şunları açıklar:
- AMP önbelleğindeki URL yapısı.
- URL'lerinizin bir AMP önbelleğinde nasıl görüneceğini tahmin etme.
- Yayıncı etki alanının ne olduğunu belirlemek için bir AMP Önbellek Kaynak başlığını nasıl ters çevirirsiniz?
Etki Alanı Adı Protokolü
Tüm belgeler AMP önbelleklerinde https protokolünü kullanır.
Etki Alanı Adı Soneki
Tüm AMP Önbellekleri, AMPHTML Deposu üzerinde çevrimiçi olarak bulunan bir JSON dosyasına kaydedilir. Bu dosyadaki örnek bir önbellek kaydı şöyle görünecektir:
{
"id": "google",
"name": "Google AMP Cache",
"docs": "https://developers.google.com/amp/cache/",
"cacheDomain": "cdn.ampproject.org",
"updateCacheApiDomainSuffix": "cdn.ampproject.org",
"thirdPartyFrameDomainSuffix": "ampproject.net"
},
Bir AMP önbelleği, cacheDomain
tarafından belirtilen etki alanındaki kayıtları sunar. Bu durumda, etki alanı cdn.ampproject.org
olur.
Bu belge, örnek olarak cdn.ampproject.org
içeren URL'leri kullanır, ancak diğer önbellekler genellikle benzer bir URL yapısı kullanır.
Etki Alanı Adı Öneki
AMP Önbelleği, example-com.cdn.ampproject.org
gibi değiştirilmiş bir URL'deki belgeleri sunar. Orjinal etki alanı adının ilk noktalı bileşeni olan example.com
, example-com
olur. Bu belge, “etki alanı öneki” olarak bu noktalı olmayan dizeye, example-com
'a başvurur. Bu dönüşümü gerçekleştiren algoritma için aşağıya bakın.
https (TLS) sertifikalarının kısıtlanması nedeniyle bu önekde example.com.cdn.ampproject.org
gibi birden çok noktalı bileşen kullanılmaz, RFC 2818:
Adlar, herhangi bir tek alan adı bileşeni veya bileşen parçasıyla eşleştiği düşünülen joker karakteri * içerebilir. Örneğin, *.a.com, foo.a.com ile eşleşir ama bar.foo.a.com ile eşleşmez.
Yayıncı alanlarının uzunluğu 255 karaktere kadar olabilirken, her alan öneki 63 karakterle sınırlıdır, RFC 2181'e göre:
Herhangi bir etiketin uzunluğu 1 ile 63 sekizlik arasında sınırlıdır. Tam alan adı 255 sekizliyle (ayırıcılar dahil) sınırlıdır.
Tüm yayıncı etki alanları benzersiz bir etki alanı önekiyle eşleşir. Bunu yapmak için kullanılan algoritma, eşlemeyi insan tarafından okunabilir hale getirmeye çalışır. Ancak, eşleme, çok uzunsa ve aşağıda açıklanan durumlarda yayıncı etki alanları için güvenli bir karma kullanmaya geri döner:
Temel Algoritma
Bir yayıncı etki alanını, etki alanı önekine dönüştürmek için temel algoritma aşağıdaki gibidir:
- Punycode yayıncı etki alanının kodunu çözün. RFC 3492 bakın
-
- adımın çıktısındaki herhangi bir "
-
" (kısa çizgi) karakterini "--
" (iki kısa çizgi) ile değiştirin.
- adımın çıktısındaki herhangi bir "
-
- adımın çıktısındaki herhangi bir "
.
" (nokta) karakterini "-
" (kısa çizgi) ile değiştirin.
- adımın çıktısındaki herhangi bir "
- 3.adımın çıktısı 3 ve 4 konumlarının her ikisinde de "
-
" (kısa çizgi) içeriyorsa, adım 3'ün çıktısına "0-
" önekini ekleyin ve "-0
"sonekini ekleyin. Arka plan için #26205'e bakın. - Punycode 3.adımın çıktısını kodlar. RFC 3492 bakın
Temel algoritmanın birkaç örneği:
Yayıncı Etki Alanı | Etki Alanı Öneki |
example.com |
example-com |
foo.example.com |
foo-example-com |
foo-example.com |
foo--example-com |
xn--57hw060o.com (⚡😊.com) | xn---com-p33b41770a (⚡😊-com) |
en-us.example.com |
0-en--us-example-com-0 |
Temel algoritmayı çalıştırdıktan sonra, yalnızca etki alanı öneki geçerli bir DNS etiketi değilse, aşağıda açıklanan geri dönüş algoritmasını çalıştırırız.
Etki alanı öneki, 63 karakterden uzunsa geçerli bir DNS etiketi değildir
Geri Dönüş Algoritması
Bir yayıncı etki alanını bir etki alanı önekine dönüştürmek için geri dönüş algoritması aşağıdaki gibidir:
- SHA256 kullanarak yayıncının etki alanını hash haline getirin.
- Base32 1.adımın çıktısından çıkar.
- 2.adımın çıktısından son 4 karakteri kaldırın, bunlar her zaman
=
(equals) (eşittir) karakterleridir.
Geri dönüş algoritması, -
(tire) olmadan aşağıdaki gibi 52 karakterlik bir dize üretecektir:v2c4ucasgcskftbjt4c7phpkbqedcdcqo23tkamleapoa5o6fygq
.
Kombine Algoritma
Kombine algoritma aşağıdaki gibidir:
- Temel algoritmayı çalıştırın. Çıktı geçerli bir DNS etiketi ise, Önbellek etki alanı sonekini ekleyin ve döndürün, örneğin
example-com.cdn.ampproject.org
. Aksi takdirde 2.adıma geçin. - Geri dönüş algoritmasını çalıştırın. Önbellek etki alanı sonekini ekleyin ve döndürün, örneğin:
v2c4ucasgcskftbjt4c7phpkbqedcdcqo23tkamleapoa5o6fygq.cdn.ampproject.org
URL Yolu
AMP önbelleğindeki bir URL'nin "yolu" her zaman /c
gibi bir veya daha fazla önek dizininden ve ardından yalnızca yayıncı URL'si http s
ise ve ardından protokol olmadan yayıncı belgesinin URL'si ise bir /s
orta ekinden oluşur.
/c
gibi önek dizinleri, AMP önbelleğinin gerçekleştirebileceği farklı hizmet türlerine karşılık gelir. Farklı AMP Önbellekleri farklı servis türlerini destekleyebilir ve bu kapsamlı bir liste değildir:
/c
- Content: Bu, bazı arayüzlerde doğrudan bağlanabilen, bağımsız bir sayfa olarak sunulan bir AMP belgedir./v
- Viewer: Bu aynı zamanda bir AMP belgesidir, ancak bir Arama Sonucu Sayfası veya başka bir arayüz bağlamında bir AMP belgesini görüntüleyen bir çerçeve ortamı olan AMP Görüntüleyici de sunular./wp
- Web Package: Bu, bir web paketi teknolojisi olan İmzalı Değişim olarak hizmet veren bir AMP belgesidir. Bu URL'ler, yayıncının kendi kaynağına yönlendirmeler gibi davranır./cert
- Certificate: Bu, İmzalı Değişim ile kullanılmak üzere genel bir sertifikadır./i
- Image: Bu, genellikle bir belge alt kaynağı olarak AMP önbelleği tarafından sunulan bir görüntüdür./ii
- Image: Bu aynı zamanda AMP önbelleği tarafından sunulan bir görüntüdür, ancak genellikle belgenin talep ettiği maksimum genişliği gösteren/ii/w800
gibi diğer önbellek yapılandırma parametreleriyle birleştirilebilir. Önbellek, tarayıcı için bant genişliğinden tasarruf etmek için burada farklı bir ölçekte görüntüler üretebilir.
Ayrıca, AMP Önbellekleri, yayıncı belge sorgusunun bir parçası olmayan belge URL'sine özel sorgu parametreleri eklemeyi seçebilir. Örneğin <amp-live-list>
, amp_latest_update_time<
parametresiyle bir belgeyi getirerek yenileme isteklerinde bulunur. Belge tarandığında bu parametreler kaynağa iletilmez, ancak AMP Önbelleğinde isteği yapılandırmak için kesinlikle bulunur.
CORS Kaynakları
Birçok yayıncı, ek veri almak için AMP belgelerinden CORS isteklerini kullanır. CORS istekleri, isteği yapan belgenin kaynağını belirten istekte bir Origin:
HTTP üstbilgisi göndererek çalışır. Yukarıda görüldüğü gibi, belgenin kaynağı bir AMP Önbelleğindeki orijinal belgeden farklıdır. Yukarıdaki etki alanı adı bölümlerinde, bir yayıncı URL'si verilen bir AMP Önbellek URL'sinin Kaynağını belirlemeye yönelik algoritmayı bulabilirsiniz. Aşağıda, CORS Origin:
istek üstbilgisini orijinal yayıncı etki alanına geri döndürmek için ters algoritmayı belirtiyoruz.
Yayıncı Etki Alanına AMP Önbellek Kaynağı
Bir AMP Önbellek Kaynağı başlık değeri aşağıdaki örneklerden biri gibi görünecektir:
https://www-example-com.cdn.ampproject.org
https://v2c4ucasgcskftbjt4c7phpkbqedcdcqo23tkamleapoa5o6fygq.cdn.ampproject.org
Öncelikle, protokol önekini (https://
) ve .cdn.ampproject.org
gibi AMP Önbellek alanı sonekini kaldırın. Sonek, caches.json dosyasında listelenen önbelleklerden herhangi birinden olabilir. Kalan dize “etki alanı öneki”olacaktır. Yukarıdaki iki örnek durumunda, "etki alanı öneki" şu şekildedir:
www-example-com
v2c4ucasgcskftbjt4c7phpkbqedcdcqo23tkamleapoa5o6fygq
Ardından, “etki alanı öneki”nin en az bir ‘-
’ (kısa çizgi) içerip içermediğini kontrol edin. Bir veya daha fazla kısa çizgi içermesi en yaygın durumdur. "Etki alanı öneki" en az bir ‘-
’ (kısa çizgi) içermiyorsa, AMP Önbellek Kaynağı doğrudan tersine çevrilemez. Bunun yerine, olası yayıncı etki alanları kümesini biliyorsanız, bu belgede yukarıda belirtilen etki alanı adı algoritmasını kullanarak AMP Önbellek Kaynakları kümesini oluşturabilirsiniz. Daha sonra sabit kümeye karşı doğrulayabilirsiniz.
Algoritmanın geri kalanı, “etki alanı öneki”nin en az bir ‘-
’ (kısa çizgi) içerdiğini varsayar.
- Etki alanı öneki
xn--
ile başlarsa, punycode “etki alanı öneki” kodunu çözer. Örneğin,xn---com-p33b41770a
,⚡😊-com
olur. Punycode için bkz. RFC 3492 - Etki alanı öneki "
0-
" ile başlar ve "-0
" ile sona ererse, hem "0-
" önekini hem de "-0" sonekini çıkarın. - 2.adımda çıkarılan karakterleri sırayla tekrarlayın ve karşılaşıldığı gibi yayınlayın. Bir "
-
" (kısa çizgi) ile karşılaştığınızda, aşağıdaki karaktere bakın. Aşağıdaki karakter de bir "-
" (kısa çizgi) ise, her iki karakteri de girdiden atlayın ve tek bir-
"(kısa çizgi) verin. Aşağıdaki karakter başka bir karakter ise, yalnızca geçerli tek "-
" (kısa çizgiyi) atlayın ve bir ".
" (nokta) koyun. Örneğin,a--b-example-com
,a-b.example.com
olur. -
Punycode 3. adımın sonucunu kodlayın. Punycode için bkz. RFC 3492.
-
Adımın sonucu Yayıncı Etki Alanı olacaktır. Protokol, etki alanının kendisinde kullanılamıyor, ancak ya
http
ya dahttps
. Bağlantı noktası her zaman protokol için varsayılandır.
Yönlendirme ve Hata İşleme
AMP önbelleğinin yönlendirmeleri ve hataları nasıl ele aldığına dair bazı örnekler:
Yönlendirmeler
AMP önbelleği, AMP URL'lerini çözerken yönlendirmeleri takip eder. Örneğin, bir URL başka bir AMP URL'sine yönlendirilirse:
$ curl -I https://amp.dev/documentation/examples/api/redirect?url=https://amp.dev/index.amp.html
HTTP/1.1 301 Moved Permanently
Content-Type: text/html; charset=utf-8
Location: https://amp.dev/index.amp.html
...
Daha sonra AMP önbelleği, orijinal URL için çözülmüş yönlendirmenin içeriğini döndürür.
Önemli: Sunucunuzdaki AMP dosyalarının konumunu taşırsanız, eski konumdan yenisine bir yönlendirme ayarladığınızdan emin olun.
Bulunamadı
AMP önbelleğinde bir sayfa bulunmadığında, bir hata sayfası gösterecek ve bir 404 durumu döndürecektir.
Örnek: https://amp-dev.cdn.ampproject.org/amp.dev/documentation/examples/api/not-found
Geçersiz AMP
Bir sayfa geçersiz AMP olduğunda, AMP önbelleği standart sayfaya yönlendirilir.
Örnek: https://amp-dev.cdn.ampproject.org/amp.dev/documentation/examples/api/invalid-amp
Sunucu Hataları
URL bir 5xx sunucu hatası döndürürse, AMP Çnbelleği bir 404 durumu döndürür.
Örnek: https://amp-dev.cdn.ampproject.org/amp.dev/documentation/examples/api/server-error
-
Written by @Gregable
with contributions from @sebastianbenz