Bisakah seseorang menjelaskan kepada saya apa sebenarnya entitas HTTP itu?
Saya membaca dokumentasi HTTPClient, tetapi saya tidak begitu mengerti apa artinya?
Bisakah seseorang menjelaskan kepada saya apa sebenarnya entitas HTTP itu?
Saya membaca dokumentasi HTTPClient, tetapi saya tidak begitu mengerti apa artinya?
Jawaban:
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 ... # ┘
&
bukan &
. Bukankah itu entitas juga? Apa bedanya?
Berikut 3 kasus sederhana:
Kasus 1. Anda mengupload 3 file dalam satu permintaan. Ketiga file tersebut adalah 3 entitas. Masing-masing memiliki Content-Type
file 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-Encoding
menjelaskan 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 Entity
beberapa properti, yang menggambarkan ukuran entitas, jenis, algoritma kompresi, dll ...
Bacaan lebih lanjut, mengutip dari RFC 2616 bagian 1.4, 4.5 dan 4.3:
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.
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 .
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.
message-body = Transfer-Encoding( Content-Encoding(entity-body) )
where Transfer-Encoding
may be "chunked" yang berarti cara mentransfer pesan, dan Content-Encoding
mungkin "gzip" yang berarti cara mengompresi entitas.
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.
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.
HttpEntity
adalah 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();
}
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
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.