13 Şubat 2022 Pazar
RestFull WebService - Kaynakların Birleştirilmesi
12 Aralık 2021 Pazar
Koşullu PUT ve DELETE talepleri Nasıl Gönderilir.
9 Aralık 2021 Perşembe
Müşteriden Koşulsuz GET Talepleri Nasıl Yapılır
HTTP 1.1 istemcilerin sona erme önbelleğini değiştirmesine ve yeni temsiller istemesine izin verir. Bu tarif bir kaynak aldıktan sonra bir kayanağın yeni bir temsilini almak için kullanabilirsiniz. 412 (Ön Koşul Başarısız ) veya en yenisini almak için başarılı bir PUT veya PATCH den sonra bile oluşan temsildir.
GET isteğinde; Cache-Control : non-cache ve Pragma: non-cache üst bilgilerini ekleyin.
İstemcinin bir kaynağı güncellemek için koşullu bir PUT isteğinde bulunduğunu varsayalım. Katmanlı koşullar eşleşmiyor ve sunucu 412 yi döndürüyorsa.
# Process this request if and only if the included conditional tags match
PUT /reviews/notes_from_underground HTTP/1.1
Host: www.example.org
If-Unmodified-Since: Sun, 09 Aug 2019 00:56:14 GMT
If-Match: "3f4a74db207d0447d46710a64971e777"
...
# Response
HTTP/1.1 412 Precondition Failed
Content-Length: 0
14 Mayıs 2021 Cuma
Sunuculardaki Koşullu PUT İstekleri
1 Mayıs 2021 Cumartesi
Müşterideki Koşullu GET ve HEAD Taleplerinin Yönetimi
24 Nisan 2021 Cumartesi
Sunuculardaki Koşullu GET isteklerinin Uygulanması
Koşullu GET istekleri sunucuya yanıt gövdesini atlama fırsatı verir. Koşullu istekler, istemcinin If-Modified-Since ve If-Match başlıklarının göndermesini içerir. Önceki bir istekten son Değiştirilen ve ETAG başlıklarına dayalıdır. Koşullu istekler müşteriden gelen isteklerin sayısını azaltmaz ancak kullanımdaki değişikliklerden dolayı azaltılabilir.
Sunucuyu son değşiklik saat ve tarih değerlerini ve/veya varlık etiklerini takip edecek şekilde tasarlanması gerekir. Son değiştirilme tarih ve saatini Last-Modified başlığı olarak ve varlık etiketine ETAG başlığı eklenmeli.
İstemci bir If gönderdiyse istemciden gelen GET ve HEAD isteklerine yanıt verirken None-Match başlığı değerini sunucudaki temsilin ETAG ile karşılaştırın. istemci If-Unmodified-Since gönderdiyse değerini sunucudaki temsil zamanı son değiştirilen ile karşılaştırın.
Kontrollerden herhangi biri yanlışsa veya istemci bu başlıklardan hiçbirini göndermediyse en son yeni ETAG ve/veya Last-Modified head dahil olmak üzere müşteriye sunumun kopyası değilse, istemciye 304(Değiştirilmedi) HTTP durum kodu mesaj olmadan döndürün.
Ön belleğe alınmış bir kopyanın ömrünü uzatmak için koşullu GET isteklerini kullanma sürecine doğrulama deniyor. Bunu desteklemek için sunucunun sona erme başlıklarını birlikte döndürmesi gerekiyor. İstemcilere koşullu üstbilgilerle ve 304 (Değiştirilmedi) önbelleğe alınmış bir yanıtın ömrünü uzatmak için kullanılabilir.
Aşağıdaki verilecek örnekte; müşterinin bir önbelleğe alınmış yanıtı depolamak ve önbelleğin işlenmesini sağlamak için önbellek alma proxy sunucusu otomatik olarak doğrular. Müşterinizin bir kopyasını saklıyorsanız, yerel deposunda bir temsil olup olmadığını kontrol etmek yerel olarak saklanan kopya hala yeni kabul edilir.
Son kullanma tarihi ile birlikte ETAG ve Last-Modified başlıklarını içeren bir gösterim önbelleğe alma başlıklarına örnek;
# Response
HTTP/1.1 200 OK
Date: Sun, 09 Aug 2009 00:56:14 GMT
Last-Modified: Sun, 09 Aug 2009 00:56:14 GMT
Expires: Sun, 09 Aug 2009 01:56:14 GMT
Cache-Control: max-age=3600,must-revalidate
E-Tag: "3f4a74db207d0447d46710a64971e777"
Content-Type: application/xml; charset=UTF-8
Bu örnekteki ETAG başlığının değeri bir varlık etiketidir. iki GET yapılırsa ETAG başlığı için iki farklı değer ister ve alır. Bu temsilcinin yeniden yönlendirmesini değiştirir.
Sunucunun bu örnekteki amacı, bir önbelleğin bir sunucu için depolanan bir temsil sunmasına izin vermektir. Saat sona erdiğinde koşullu bir GET talebinde bulunarak sunumu doğrulamak. Aşağıdaki sıra doğrulama sürecini temsil eder.
# First request
GET /person/joe HTTP/1.1
Host: www.example.org
# First response
HTTP/1.1 200 OK
Date: Sun, 09 Aug 2009 00:44:14 GMT
Last-Modified: Sun, 09 Aug 2009 00:40:14 GMT
Expires: Sun, 09 Aug 2009 01:44:14 GMT
Cache-Control: max-age=3600,must-revalidate
...
# Second request after 10 minutes
GET /person/joe HTTP/1.1
Host: www.example.org
# Second response - returned by cache
HTTP/1.1 200 OK
Date: Sun, 09 Aug 2009 00:54:14 GMT
Last-Modified: Sun, 09 Aug 2009 00:40:14 GMT
Expires: Sun, 09 Aug 2009 01:44:14 GMT
Cache-Control: max-age=3600,must-revalidate
Age: 600
HTTP/1.1 200 OK > Sunucu tarafından oluşturulan yanıt
Cache-Control: max-age=3600,must-revalidate > Yanıt 3600 saniye önbelleğe alınabilir ancak bu sürenin sonunda yeniden doğrulanması gereken dönem.
Age: 600 > Önbellek tarafından sunulan 600 saniyelik eski bir yanıt.
Bir saatlik sürenin dolmasından sonra istemciler tarafından yapılan istekler önbelleğin önbelleğe alınmış yanıtını gösterir.
# Third request after an hour
GET /person/joe HTTP/1.1
Host: www.example.org
# Third request after an hour
GET /person/joe HTTP/1.1 > Son kullanma tarihinden sonra müşteri talebi
# Request sent by the cache to the origin server
GET /person/joe HTTP/1.1 > Önbelleğe alınan yanıtı doğrulama isteği
HTTP/1.1 304 Not Modified> Kaynak sunucunun yanıtının değiştirilmediğini belirten yanıt parçası.
HTTP/1.1 200 OK> Önbelleğe alınmış bir kopyayı içeren istemciye önbellek tarafından verilen yanıt.
Yanıt süresi dolmadığından sunucu ikinci isteği görmez ve önbelleğin hala bir kopyası mevcut. Üçüncü istek, doğrulama içi sunucuya ulaşır. Üçüncü sunucunun yanıtı temsilin değişmediğini bildiriyor ve bir saate daha ömrünün olduğunu belirtiyor.
Bu örnekte, sunucunun sorumluluğu şu değerleri karşılaştırmaktır.
If-Modified-Since ve/veya If-None-Match başlıkları mevcut, değerleri ise bir kaynak gösterimi ile 200 (OK) veya 304 (Not Modified)
17 Nisan 2021 Cumartesi
Son Oluşturulan ETAG başlıkları Nasıl Oluşturulur
Sunucular, koşullu istekleri yönlendirmek için Last-Modified ve ETAG yanıt başlıklarını kullanır. İstemcileri istekleri koşullu yapmak için aşağıdaki istek başlıklarını kullanır.
* Önbelleğe alınmış gösterimleri doğrulamak için If-Modified ve If-Non-Match
* Eşzamanlılık kontrolünün ön koşulları olarak If-Unmodified-Since ve If-Match
GET istekleri müşterinin amacı yalnızca yeni bir istek temsil etmesidir. Gösterim belirtilen saat ve tarihten sonra değiştirildiyse sağlanan varlık etiketlerinin hiçbiri bundan sonra eşleşmez.
Eşzamanlılık kontrolü için amaç bir işlem gerçekleştirmeyi talep etmektir. Sadece gösterim belirtilen saat ve tarihten sonra değişmediyse sağlanan varlıkların etiketleri ile eşleşirse.
Bu istek başlıklarının her ikisi de istemcilerin ön koşullu isteklerdir.
Koşullu isteklerin işlemenin etkinliği sunucunun ne kadar hızlı yapabileceğine bağlıdır.
Kaynakları depolamak için kullanılan veri deposu üzerinde kontrolünüz varsa, depolama alanını değiştirin.
Her kaynağa erişim için şema ve değiştirilen saat - tarih için bir zaman damgası ve sürüm takip etmek için bir sıra numarası kullanın.
Verilerin her değiştiği alanlarda; ilişkisel veritabanı söz konusu olduğunda bunları otomatik olarak güncellemek için veritabanı tetikleyicileri kullanın.
Eğer depoma şemanızın değiştirilmesine veya veri deponuzu bakıma izin verilmiyorsa zaman damgalarını veya sıra numaralarının işaretlemek için bazı veri kaynakları işlevlerini kullanabilirsiniz.
ETAG başlığı için bir değer oluşturur. Bu değeri ve bir zaman damgasını ayrı bir tabloda saklayın veya sunucunun tüm gösterimi yeniden yüklemesine gerek kalmadan veri deposu ile bunun hesaplayın.
Temsil edilen boyut büyük değilse MD5 oluşturmak için temsil gövdesini kullanın ETAG için karma değerdir. Alternatif olarak her seferinde değişen bazı veri alanlarını kullana kaynak güncellenir.
Kaynağın her temsili için farklı bir ETAG değeri kullandığınızdan emin olun.
Çoğu web sunucusu statik için ETAG ve Last-Modified üst bilgilerinin otomatik olarak eklemenize izin verir. Uygulama kaynakları için bunları programlı bir şekilde oluşturmanız gerekir.
Bu başlıklardan Last-Modified bir saniyelik çözünürlüğü vardır ve bu nedenle zayıf bir doğrulayıcıdır. Bir varlık etiketi ise değeri değiştirilebildiği için güçlü bir doğrulayıcıdır. ( Sunucu gösteriminden her değiştiğinde) Bir varlık etiketi, bir nesnenin karması gibidir. Bir kaynağı temsillerini karşılaştırmak için varlık etiketlerini kullanabilirsiniz.
Koşullu içeriği desteklemek için hem Son Değiştirilmiş hem de ETAG başlıklarını kullanmanıza gerek yoktur. Koşullu istekleri desteklemek için tutarlı bir şekilde birini veya ikisini kullanabiliriz.
Yeni bir web hizmeti tasarlanıyorsa bir zaman damgası ve bir sürüm sayacı veri deponuza ekleyin. Çoğu ilişkisel veritabanı kendine özgü bazı tetikleyicileri kullanmamıza izin verir. Verilerin her değişiminden bu değerlerin otomatik olarak güncellemek ve arttırmak için. Bu durumda sunucudaki tüm bilgilerin yüklenmesi gerekmediğinden genellikle en verimli yaklaşım olur.
Bazı web çevreleri kodunuzun oluşmasına izin verdikten sonra ETAG başlıkları otomatik olarak oluşur. Bu işi tüm temsilin bir karmasını hesaplayarak ortaya çıkarır. Eğer temsil için veritabanın dan yüklenmesi zaman alırsa iyi performans göstermez.
Kaynağa ait olan verilerin birden fazla tablo oluşturması durumunda en son olanı seçmeniz gerekir. Bu tablolardaki veriler son değiştirilen zaman damgası ve ilgili sürümün bir karmasında kullanılan verileri içerir.
İlişkisel olmayan veri depoları için kullanmanız gereken teknikler uygulamadan uygulamaya farklılık gösterir.
ETAG değerleri oluşturmak için sürüm numaralarını kullandığınızda bu başlık değerleri temsile özeldir. Örneğin bir temsil kaynağının gönderimleri ortam türüne göre değişir, ortam türü değerlerinin kullanımı ETAG değerlerinin gösterimini yapmak için sürüm tanımlayıcıları ile birlikte kullanılır.






