Lütfen birisi bana bir HTTP varlığının tam olarak ne olduğunu açıklayabilir mi ?
HTTPClient belgelerini okuyorum, ancak bunun ne anlama geldiğini gerçekten anlamıyorum?
Lütfen birisi bana bir HTTP varlığının tam olarak ne olduğunu açıklayabilir mi ?
HTTPClient belgelerini okuyorum, ancak bunun ne anlama geldiğini gerçekten anlamıyorum?
Yanıtlar:
Bir HTTP varlığı , bazı üstbilgilerden ve varsa gövdeden oluşan bir HTTP isteğinin veya yanıtının çoğunluğudur . Görünüşe göre, istek veya durum satırı olmadan istek veya yanıtın tamamı gibi görünüyor (yalnızca belirli başlık alanları varlığın parçası olarak kabul ediliyor ).
Örnek vermek gerekirse; işte bir istek:
POST /foo HTTP/1.1 # Not part of the entity.
Content-Type: text/plain # ┬ The entity is from this line down...
Content-Length: 1234 # │
# │
Hello, World! ... # ┘
Ve bir cevap:
HTTP/1.1 200 OK # Not part of the entity.
Content-Length: 438 # ┬ The entity is from this line down...
Content-Type: text/plain # │
# │
Response body ... # ┘
&
yerine bir varlığın kullandığını sanıyordum &
. Bu da bir varlık değil mi? Fark ne?
&
bir HTML karakter varlığı referansıdır , bir HTTP Varlığı ile aynı değildir .
İşte 3 basit durum:
Durum 1. Tek bir istekte 3 dosya yüklüyorsunuz. Bu 3 dosya 3 varlıktır. Her birinin Content-Type
ne tür bir dosya olduğunu belirtmek için kendine ait bir yeri vardır.
Durum 2. Bir web sayfasını görüntülüyorsunuz. Tarayıcı, arka planda varlık olarak bir html dosyası indirdi. Sayfa sürekli olarak güncellenebildiğinden, daha sonra tamamen farklı bir varlık elde edebilirsiniz.
Durum 3. Bir 304 Not Modified
. Varlık transfer edilmedi.
Kısacası Varlık, bir http mesajı (istek veya yanıt) içindeki isteğe bağlı bir yüktür , dolayısıyla Varlık ve Mesaj arasındaki " kısmen-bütün " bir ilişkidir.
Bazı başlık alanları için geçerli Message
mi Transfer-Encoding
aracılar arasında mesaj transfer etmek için ve böylece istek / yanıt zincir boyunca herhangi bir uygulama ile (ilave ya da ayrılabilmektedir açıklanmıştır hop-by-hop headers
). Buna karşılık, bu başlık alanları Entity
, varlığın boyutunu, türünü, sıkıştırma algoritmasını vb. Tanımlayan bazı özelliklerdir.
RFC 2616 bölüm 1.4, 4.5 ve 4.3'ten alıntı yaparak daha fazla okuma:
request chain --------------------------------------> UA -----v----- A -----v----- B -----v----- C -----v----- O <------------------------------------- response chain
Yukarıdaki şekil, kullanıcı aracısı ile kaynak sunucu arasındaki üç aracıyı (A, B ve C) gösterir. Tüm zinciri dolaşan bir istek veya yanıt mesajı dört ayrı bağlantıdan geçecektir.
Hem istek hem de yanıt mesajları için genel uygulanabilirliği olan, ancak aktarılan varlık için geçerli olmayan birkaç başlık alanı vardır . Bu başlık alanları yalnızca iletilen mesaj için geçerlidir .
Transfer Kodlaması, mesajın güvenli ve düzgün bir şekilde aktarılmasını sağlamak için bir uygulama tarafından uygulanan herhangi bir transfer kodlamasını belirtmek için KULLANILMALIDIR. Transfer Şifreleme, varlığın değil mesajın bir özelliğidir ve bu nedenle, istek / yanıt zinciri boyunca herhangi bir uygulama tarafından eklenebilir veya kaldırılabilir.
message-body = Transfer-Encoding( Content-Encoding(entity-body) )
nerede Transfer-Encoding
"chunked" olabilir hangi mesajı aktarmak için ve nasıl vasıta Content-Encoding
varlık sıkıştırmak için nasıl açılımı "gzip" olabilir.
HTTP, bir ağ üzerinden uzaktaki bir makineden bilgilere erişilirken gözlemlenen bir protokoldür. Genellikle ağ internettir ve uzaktaki makine bir sunucudur.
A kişisinden B kişisine bilgi istediğinizde ona bir mesaj verirsiniz. (İstek). B Kişisi size yanıt verir (Yanıt). İstek ve Yanıt, HTTP Mesaj Türleridir.
A Kişisi, B Kişisinden bilgi istemek yerine bir şey yapmasını isteyebilir. A Kişisi B Kişisinin bir dosyayı güvenli bir yerde saklamasını istiyor. Dolayısıyla, A Kişisi bu dosyayı (HTTP Varlığı) B Kişisine iletir ve ondan bir şey yapmasını ister (HTTP Mesajı). Bu durumda, Kişi bir "Varlık" geçiriyor. HTTP Varlığı bağlamında, mesaja eklenen bir yüktür.
Umarım benzetme yardımcı olmuştur.
@ Hawkeye-parker tarafından yapılan bir yorumda belirtildiği gibi, Varlık kullanımdan kaldırılmış gibi görünüyor. Bu 2014 rfc'de bir arama yapın ve XML varlıkları ve ileti gövdesi hakkında göreceksiniz, ancak Http varlığı hakkında hiçbir şey görmeyeceksiniz.
Bununla birlikte, HttpClient ve aynı zamanda JaxRS istemcisi, bir setEntity()
vegetEntity()
yöntemi vardır.
Kabul edilen cevaba bakılırsa, her iki kütüphane de yanlış! HttpClient.setEntity()
önceden ayarlanmış başlıkları kaldırmaz.
HttpEntity
Talepte (başlık ile) ileteceğiniz ve Yanıtta ne alacağınızdır. Alma İsteği için basit bir String geçiyoruz
HttpHeaders headers = new HttpHeaders();
headers.setAccept(Arrays.asList(MediaType.APPLICATION_JSON));
HttpEntity<String> entity = new HttpEntity<String>(headers);
Gönderi için Varlık Sınıfının tamamını geçeceğiz
public String createProducts(@RequestBody Product product) {
HttpHeaders headers = new HttpHeaders();
headers.setAccept(Arrays.asList(MediaType.APPLICATION_JSON));
HttpEntity<Product> entity = new HttpEntity<Product>(product,headers);
return restTemplate.exchange(
"http://localhost:8080/products", HttpMethod.POST, entity, String.class
).getBody();
}
Varlık, mesaj gibi bir şeydir, başlıktan oluşur; konum, dil, kodlama gibi meta veriler ...
Ve isteğe bağlı olarak bir gövdenin içeriği, başlıkta belirtildiği gibi biçimlendirilir vb.
Burada sahip olduğumuz iyi cevaplar arasında, doğrudan RFC 2616'dan (Köprü Metni Aktarım Protokolü - HTTP / 1.1) gelen bir şeyden bahsetmeye değer olduğuna inanıyorum :
varlık
İstek ve Yanıt mesajları, istek yöntemi veya yanıt durum kodu tarafından başka şekilde sınırlandırılmamışsa bir varlığı aktarabilir. Bir varlık , varlık başlığı alanlarından ve bir varlık gövdesinden oluşur, ancak bazı yanıtlar yalnızca varlık başlıklarını içerir.
Özetle: Bir Varlık aktarılabilir ve başlık + gövde veya yalnızca başlık olabilir .
Yukarıda bağlantı olduğu için, kendimi ek yorumlar yapmaktan alıkoyuyorum.