HTTP Varlığı tam olarak nedir?


114

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?


2
Buraya bu yazıda geldim HTTP: HTTP: Her Web Geliştiricisinin Bilmesi Gereken Protokol , konuyla ilgili bilgi arayan başka biri gelirse buraya gelirse.
Mason240

2
"HTTP varlığı" teriminin artık en son HTTP 1.1 spesifikasyonlarında görünmediğini unutmayın . Kullanımdan kaldırılmış gibi görünüyor. Şimdi sadece "başlık alanları" ve "mesaj gövdesi" kullanabiliriz.
Hawkeye Parker

Yanıtlar:


139

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

3
Ana bilgisayar , bir varlık üstbilgi alanı değil.
Gumbo

Bunun &yerine bir varlığın kullandığını sanıyordum &. Bu da bir varlık değil mi? Fark ne?
CodyBugstein

1
@Imray: &bir HTML karakter varlığı referansıdır , bir HTTP Varlığı ile aynı değildir .
maerics

2
@ lmray: bunlar tamamen farklı varlıklar. ;) (Biri bir HTML metnindeki dizeleri kodlamakla ilgili , diğeri ise bir tarayıcı ve bir sunucu HTTP protokolü üzerinden birbirleriyle konuştuğunda bilgileri yapılandırmakla ilgilidir . Ayrıca biri diğerinden daha kafa karıştırıcıdır. Veya tam tersi.; - o)
Sz.

6
"HTTP varlığı" teriminin artık en son HTTP 1.1 spesifikasyonlarında görünmediğini unutmayın . Kullanımdan kaldırılmış gibi görünüyor. Artık "başlık alanları" ve "mesaj gövdesi" ile devam edebiliriz.
Hawkeye Parker

15

İşte 3 basit durum:

Durum 1. Tek bir istekte 3 dosya yüklüyorsunuz. Bu 3 dosya 3 varlıktır. Her birinin Content-Typene 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 Messagemi Transfer-Encodingaracı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:

  • Bir istek / yanıt zinciri
     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.

  • Mesaj veya Varlık için üst bilgi alanları

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 .

  • Mesaj için başlık alanları zincir boyunca değiştirilebilir

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.

  • Mesaj gövdesi ve varlık gövdesi arasındaki ilişki

message-body = Transfer-Encoding( Content-Encoding(entity-body) )

nerede Transfer-Encoding"chunked" olabilir hangi mesajı aktarmak için ve nasıl vasıta Content-Encodingvarlık sıkıştırmak için nasıl açılımı "gzip" olabilir.


Vay canına, varlık ve mesaj arasındaki "kısmi-bütün" ilişkisini açıkladığınız için teşekkürler! Gerisi biraz karışıklığa katkıda bulunuyor, ancak genel olarak, yine de bir oylamaya değer. Şerefe!
Sz.

12

Bir isteği veya yanıt yükünü temsil eden bir soyutlamadır . Javadoc amacına ve çeşitli varlık türleri üzerinde açıktır.


3
+1, "payload" olarak adlandırıldığı için, sonunda bu boşluk terimine ("varlık") bir anlam katar.
Sz.


2

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.


2

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


"Varlık" (ve ilgili "varlık başlıkları") ve "Mesaj" ayrımını oldukça yararlı buldum. Bu, bir ağ kitaplığı tasarladığınızda ve bir HTTP mesajının ve çeşitli enkarnasyonlarının, örneğin bir çok parçalı mesajın bir analizini gerçekleştirdiğinizde hızlı bir şekilde görünür hale gelir. Maalesef, yeni RFC'ler bu farklı "sınıfları" tek bir sınıfta birleştiriyor ve kendi terminolojimizi tanıtmamız veya "Varlık" a bağlı kalmamız gerekiyor.
CouchDeveloper

1

HttpEntityTalepte (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();
}

0

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.


0

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.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.