Apa sebenarnya Entitas HTTP itu?


114

Bisakah seseorang menjelaskan kepada saya apa sebenarnya entitas HTTP itu?

Saya membaca dokumentasi HTTPClient, tetapi saya tidak begitu mengerti apa artinya?


2
Saya datang ke sini dari tulisan ini di HTTP: HTTP: Protokol Yang Harus Diketahui Setiap Pengembang Web jika ada orang lain yang datang ke sini mencari informasi tentang subjek.
Mason240

2
Perhatikan bahwa istilah "entitas HTTP" tidak lagi muncul dalam spesifikasi HTTP 1.1 terbaru . Sepertinya sudah usang. Sekarang kita bisa menggunakan "bidang header" dan "isi pesan".
Hawkeye Parker

Jawaban:


139

Sebuah entitas HTTP adalah sebagian dari permintaan HTTP atau respon, yang terdiri dari beberapa header dan tubuh, jika ada. Tampaknya seluruh permintaan atau respons tanpa baris permintaan atau status (meskipun hanya bidang header tertentu yang dianggap sebagai bagian dari entitas ).

Menggambarkan; inilah permintaannya:

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

Dan tanggapannya:

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
Host bukan bidang header entitas.
Gumbo

Saya pikir entitas sedang menggunakan, &bukan &. Bukankah itu entitas juga? Apa bedanya?
CodyBugstein

1
@Imray: &adalah referensi entitas karakter HTML , tidak sama dengan Entitas HTTP .
maerics

2
@lmray: mereka adalah entitas yang sepenuhnya berbeda. ;) (Satu tentang mengenkode string dalam teks HTML , yang lainnya adalah tentang menyusun informasi ketika browser dan server berbicara satu sama lain melalui protokol HTTP . Selain itu, yang satu lebih membingungkan daripada yang lain. Atau sebaliknya.; - o)
Sz.

6
Perhatikan bahwa istilah "entitas HTTP" tidak lagi muncul dalam spesifikasi HTTP 1.1 terbaru . Sepertinya sudah usang. Sekarang kita bisa tetap menggunakan "bidang header" dan "isi pesan".
Hawkeye Parker

15

Berikut 3 kasus sederhana:

Kasus 1. Anda mengupload 3 file dalam satu permintaan. Ketiga file tersebut adalah 3 entitas. Masing-masing memiliki Content-Typefile sendiri untuk menunjukkan jenis file itu.

Kasus 2. Anda sedang melihat halaman web. Browser telah mengunduh file html sebagai entitas di latar belakang. Karena halaman dapat diperbarui terus menerus, Anda mungkin akan mendapatkan entitas yang sama sekali berbeda nanti.

Kasus 3. Anda punya 304 Not Modified . Tidak ada entitas yang ditransfer.

Singkatnya, Entitas adalah muatan opsional di dalam pesan http (baik permintaan maupun respons), jadi ini adalah hubungan " sebagian-keseluruhan " antara Entitas dan Pesan.

Beberapa bidang tajuk berlaku untuk Message suka Transfer-Encodingmenjelaskan cara mentransfer pesan antara perantara, dan dengan demikian MUNGKIN ditambahkan atau dihapus oleh aplikasi apapun sepanjang rantai permintaan / tanggapan ( hop-by-hop headers). Sebagai perbandingan, bidang tajuk tersebut berlaku untuk Entitybeberapa properti, yang menggambarkan ukuran entitas, jenis, algoritma kompresi, dll ...

Bacaan lebih lanjut, mengutip dari RFC 2616 bagian 1.4, 4.5 dan 4.3:

  • Rantai permintaan / tanggapan
     request chain -------------------------------------->
   UA -----v----- A -----v----- B -----v----- C -----v----- O
      <------------------------------------- response chain

Gambar di atas menunjukkan tiga perantara (A, B, dan C) antara agen pengguna dan server asal. Pesan permintaan atau tanggapan yang melewati seluruh rantai akan melewati empat koneksi terpisah.

  • Bidang header baik untuk Pesan atau Entitas

Ada beberapa bidang tajuk yang memiliki penerapan umum untuk pesan permintaan dan tanggapan, tetapi tidak berlaku untuk entitas yang sedang ditransfer . Bidang tajuk ini hanya berlaku untuk pesan yang sedang dikirim .

  • Bidang header untuk Pesan dapat diubah di sepanjang rantai

Transfer-Encoding HARUS digunakan untuk menunjukkan kode transfer apa pun yang diterapkan oleh aplikasi untuk memastikan transfer pesan yang aman dan tepat. Transfer-Encoding adalah properti pesan, bukan entitas, dan dengan demikian DAPAT ditambahkan atau dihapus oleh aplikasi apa pun di sepanjang rantai permintaan / respons.

  • Hubungan antara badan pesan dan badan entitas

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

where Transfer-Encodingmay be "chunked" yang berarti cara mentransfer pesan, dan Content-Encodingmungkin "gzip" yang berarti cara mengompresi entitas.


Wow, terima kasih telah memperjelas hubungan "sebagian-keseluruhan" antara entitas dan pesan! Sisanya agak menambah kebingungan, tetapi secara keseluruhan, masih layak mendapat suara positif. Bersulang!
Sz.

12

Ini adalah abstraksi yang mewakili payload permintaan atau respons . The javadoc jelas pada tujuan dan berbagai jenis entitas.


3
+1 untuk menyebutnya "muatan", yang akhirnya menambahkan beberapa arti pada istilah kosong itu ("entitas").
Sz.


2

HTTP adalah Protokol yang diamati saat mengakses informasi dari mesin jarak jauh melalui jaringan. Biasanya jaringannya adalah internet dan mesin jarak jauh adalah server.

Ketika Anda meminta informasi dari orang A ke orang B, Anda memberinya pesan. (Permintaan). Orang B membalas Anda (Tanggapan). Permintaan dan Tanggapan adalah Jenis Pesan HTTP.

Orang A dapat meminta Orang B untuk melakukan sesuatu, daripada meminta informasi. Katakanlah, Orang A ingin Orang B menyimpan file di lokasi yang aman. Jadi, Orang A meneruskan file itu (Entitas HTTP) ke Orang B dan memintanya untuk melakukan sesuatu (Pesan HTTP). Dalam hal ini, Orang sedang melewati sebuah "Entity". Dalam konteks Entitas HTTP, ini adalah payload yang dilampirkan dengan pesan.

Semoga analogi ini membantu.


2

Seperti yang dikatakan dalam komentar oleh @ hawkeye-parker, sepertinya Entitas sudah tidak digunakan lagi. Lakukan pencarian di rfc 2014 ini , dan Anda akan melihat tentang entitas XML dan badan pesan, tetapi tidak ada tentang entitas Http.

Namun demikian, HttpClient, tetapi juga klien JaxRS, memiliki metode setEntity()dan getEntity().

Mempertimbangkan jawaban yang diterima, kedua perpustakaan salah! HttpClient.setEntity()tidak akan menghapus header yang ditetapkan sebelumnya.


Saya menemukan perbedaan antara "Entity" (dan "entity-headers" terkait) dan "Message" cukup berguna. Ini menjadi jelas dengan cepat, ketika Anda merancang pustaka jaringan, dan melakukan analisis pesan HTTP dan berbagai inkarnasinya, misalnya pesan multi bagian. Sayangnya, RFC baru menggabungkan "kelas" yang berbeda ini menjadi satu dan kami perlu memperkenalkan terminologi kami sendiri, atau tetap menggunakan "Entitas".
CouchDeveloper

1

HttpEntityadalah apa yang akan Anda sampaikan di Request (dengan header) dan apa yang Anda dapatkan di Response. Untuk Dapatkan Permintaan kita melewati String sederhana

 HttpHeaders headers = new HttpHeaders();
 headers.setAccept(Arrays.asList(MediaType.APPLICATION_JSON));
 HttpEntity<String> entity = new HttpEntity<String>(headers);

Untuk Posting Kami akan lulus Kelas Entitas lengkap

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

Entitas itu seperti pesan, terdiri dari header, dimana metadata seperti lokasi, lang, encoding ...

Dan secara opsional dari tubuh - isinya diformat dll seperti yang ditentukan dalam tajuk


0

Di antara jawaban bagus yang kami miliki di sini, saya yakin pantas untuk menyebutkan sesuatu yang berasal langsung dari RFC 2616 (Hypertext Transfer Protocol - HTTP / 1.1) :

Kesatuan

Pesan Permintaan dan Tanggapan DAPAT mentransfer entitas jika tidak dibatasi oleh metode permintaan atau kode status tanggapan. Entitas terdiri dari bidang tajuk entitas dan badan-entitas, meskipun beberapa respons hanya akan menyertakan tajuk entitas.

Singkatnya: Entitas dapat ditransfer, dan dapat berupa header + body , atau hanya header .

Karena ada tautan di atas, saya menahan diri untuk membuat komentar tambahan.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.