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

# Request sent by the cache to the origin server
GET /person/joe HTTP/1.1
Host: www.example.org
If-Modified-Since: Sun, 09 Aug 2009 00:40:14 GMT
If-None-Match: "3f4a74db207d0447d46710a64971e777"

# Response generated by the server
HTTP/1.1 304 Not Modified
Date: Sun, 09 Aug 2009 01:54:14 GMT
Last-Modified: Sun, 09 Aug 2009 00:56:14 GMT
Expires: Sun, 09 Aug 2009 02:54:14 GMT
Cache-Control: max-age=3600,must-revalidate
E-Tag: "3f4a74db207d0447d46710a64971e777"
Content-Type: application/xml; charset=UTF-8

# Response returned by the 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

# 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.


3 Nisan 2021 Cumartesi

RestFull Web Service Sunucular Arasında İşlemler Nasıl Desteklenir



Sunucu sınırlarını aşan işlemlerin nasıl destekleneceği hakkında kısa bilgi paylaşımıdır. Örneklerde; bir kullanıcı profilini bir uygulamadan diğerine taşımayı özetleri içe aktarmayı içerir. Bir müşteri ilişkileri yönetimi uygulamasında beklenen tekliflerin, taslak sunucudan üretim sunucusundaki belgeler gönderimi. Bu kullanım durumunda birden çok sunucu durumunun değişmesine ihtiyaç doğuyor. İki veya daha fazla sunucu üzerinde içerik işlemlerinin nasıl değişeceğine küçük örnek ile bakacağız.

Sunucular arası operasyonun tasarlamak ve uygulamak için sunucuların birbirleriyle işbirliği yapmasına öncelikle izin verilmeli. (cross-server operations) Bunlar veri formatlar, arka uç ara yüzleri mutabakat sağlayan sunucuları içerebilir. Veri deposundan veri yükleme, onu karşılamak için normalleştirme işlemleri, diğer sunucu biçimleri ve ardından saklanması adımları.

Sunucu sınırlarını aşan işlemlerle karşılaşıldığında endişelerin ayrılması gerekir. 

Kişi listesini dışa aktarmak için bir bağlantıyla birlikte bir kullanıcının kişi listesini temsili mesajlaşma web hizmeti:

# Request

GET /user/smith/contacts HTTP/1.1

Host: contacts.example1.org


# Response

HTTP/1.1 200 OK

Content-Type: application/xml;charset=UTF-8


<contacts xmlns:atom="http://www.w3.org/2005/Atom">

   <atom:link rel="self" href="http://contacts.example2.org/user/smith/contacts"/>

   <atom:link rel="http://contacts.example1.org/rels/export-to-messaging"

      href="http://messaging.example2.org/user/smith/import;

               t=bcb9169866c69410be37f68210a6986c"

      title="Export contacts into to messaging."/>

   <contact>

      ...

   </contact>

   ...

</contact>

     title="Export contacts into to messaging."/> > Bir sunucudan diğerine veri aktarmak için bir URl ile bağlantı kurun.

http://contacts.example2.org/rels/export-to-messaging > anlamı: con ilişki türü ile anlayan bir istemci http://tacts.example2.org/rels/export-to-messaging > dışa aktarma işlemini başlatabilir. Bu bağlantı ilişkisi türünü dökümantasyonunu müşterinin yapması gerektiğini söylediğini varsayalım. 

Kişileri mesaj hizmetine aktarmak için bağlantının URl bir POST isteği gönderin.  Bağlantının  URl yetkisiz kullanımı önlemek için bir güvenlik anahtarı içerir.


# Request

POST /user/smith/import;t=bcb9169866c69410be37f68210a6986c HTTP/1.1

Host: messaging.example2.org

# Response

HTTP/1.1 303 See Other

Location: http://messaging.example2.org/user/smith

Content-Type: application/xml;charset=UTF-8


POST /user/smith/import;t=bcb9169866c69410be37f68210a6986c HTTP/1.1 > Veriyi dışarıya aktarma talebi

Location: http://messaging.example2.org/user/smith > Dışarıya aktarma sonuçlarını sağlayan URl.

 İstemci bu isteği gönderdiğinde mesajlaşma hizmeti bir arka uç isteğinde bulunur. Bu istek Rehber hizmetinin bir kopyasını alabilmek için Rehber web hizmetine bağlanır. Bu işlemler sırasında sunucular arasında güvenliğin nasıl yönetildiğine dair mesajlaşma web servisi mevcut olabilir. Kişiler web hizmetinin URl dahil edilen bir belirteç yardımıyla.

Bu süreçte sunucular kişi listesi verilerinin yapıldığından emin olmaktan sorumludur. Müşteri yalnızca operasyonu tetiklemekten sorumludur. Bu istemciyi sunucunun uygulama ayrıntılarından ayrı tutar. Eşzamanlı kontrol, Eşzamanlı , veri formatlarındaki farklılıklar v.b Sunucu arasındaki koordinasyonun sonuçlarındandır.

Teknik veya organizasyon nedeniyle böyle bir koordinasyon mümkün olmadığında veya bölgesel sorunlardan dolayı,  istemcinin tüm kişileri indirmekten başka seçeneği yoktur.