Artikel ini adalah artikel cermin dari terjemahan mesin, silakan klik di sini untuk melompat ke artikel aslinya.

Melihat: 8759|Jawab: 0

Interpretasi terperinci dari Content-Length dalam protokol HTTP

[Salin tautan]
Diposting pada 24/09/2019 15.53.29 | | |
Content-Length digunakan untuk menggambarkan panjang transfer dari isi pesan. Dalam protokol HTTP, ada perbedaan antara panjang entitas pesan dan panjang transmisi entitas pesan, misalnya, di bawah kompresi gzip, panjang entitas pesan adalah panjang sebelum kompresi, dan panjang transmisi entitas pesan adalah panjang setelah kompresi gzip.

Dalam interaksi HTTP tertentu, cara klien memperoleh panjang pesan terutama didasarkan pada aturan berikut:

Jika responsnya adalah 1xx, 204, 304 atau permintaan kepala, konten entitas pesan langsung diabaikan.
Jika ada Transfer-Encoding, metode dalam Transfer-Encoding lebih disukai untuk menemukan panjang yang sesuai. Misalnya, model Chunked.
"Jika ada Panjang-Kandungan di kepala, maka Panjang-Konten ini mewakili panjang tubuh dan panjang transmisi. Jika panjang entitas dan panjang transfer tidak sama (misalnya Transfer-Encoding diatur), maka Content-Length tidak dapat diatur.Jika Transfer-Encoding diatur, maka Content-Length akan diabaikan”。 Keuntungan dari terjemahan kalimat ini adalah hanya ada satu poin: dengan Transfer-Encoding, tidak mungkin ada Content-Length.
Transmisi jangkauan. Saya tidak memperhatikan, saya tidak membacanya secara rinci :)
Menutup koneksi melalui server menentukan panjang pesan yang dikirimkan. (Pemohon tidak dapat menunjukkan akhir dari isi permintaan dengan menutup koneksi, karena ini akan membuat server tidak memiliki kesempatan untuk terus merespons.) Situasi ini terutama sesuai dengan koneksi pendek, yaitu mode non-keep-alive.
HTTP 1.1 harus mendukung mode chunk. Karena ketika panjang pesan tidak pasti, situasi ini dapat ditangani melalui mekanisme chunk.
Dalam header yang berisi konten pesan, jika ada bidang panjang konten, nilai bidang yang sesuai harus sama persis dengan panjang topik pesan.
"Panjang entitas pesan adalah panjang badan pesan sebelum pengkodean transfer diterapkan"
YaituJika ada potongan, tidak boleh ada panjang konten

Mekanisme koneksi persisten HTTP/1.0 diperkenalkan kemudian, dan diimplementasikan melalui header Connection: keep-alive, yang dapat digunakan oleh server dan klien untuk memberi tahu satu sama lain bahwa mereka tidak perlu memutuskan koneksi TCP setelah mengirim data untuk digunakan nanti.HTTP/1.1 mengharuskan semua koneksi tetap bersifat persistenKecuali Anda secara eksplisit menambahkan Koneksi: dekat dengan header。 Jadi pada kenyataannya, bidang header Koneksi di HTTP/1.1 tidak lagi memiliki nilai keep-alive, tetapi karena alasan historis, banyak server web dan browser masih mempertahankan kebiasaan mengirim koneksi panjang Connection: keep-alive ke HTTP/1.1 koneksi panjang.

Faktanya, beberapa yang terakhir hampir dapat diabaikan, dan ringkasan singkatnya adalah sebagai berikut:


1. Panjang-Konten: Jika ada dan valid, itu harus persis sama dengan durasi transmisi konten pesan. (Diuji untuk memotong jika terlalu pendek, dan terlalu lama untuk menyebabkan batas waktu.) )
2. Jika ada Transfer-Encoding (fokusnya dipotong), tidak mungkin ada Content-Length di header, dan itu akan diabaikan.
3. Jika koneksi pendek digunakan, panjang transmisi pesan dapat ditentukan secara langsung dengan menutup koneksi melalui server. (Ini mudah dipahami)
Dikombinasikan dengan fitur lain dari protokol HTTP, misalnya, Http1.1 tidak mendukung tetap hidup. Kemudian kesimpulan berikut dapat ditarik:
1. Dalam Http 1.0 dan versi sebelumnya, bidang panjang konten bersifat opsional.
2. Dalam http1.1 dan versi yang lebih baru. Jika Anda tetap hidup, maka panjang dan potongan konten harus menjadi salah satu dari keduanya. Jika tidak tetap hidup, itu sama dengan http1.0. panjang konten.





Mantan:"Node.js: Let's Dozen C++ Extensions" versi pindaian pdf [146MB]
Depan:Content-Length protokol Http
Sanggahan:
Semua perangkat lunak, materi pemrograman, atau artikel yang diterbitkan oleh Code Farmer Network hanya untuk tujuan pembelajaran dan penelitian; Konten di atas tidak boleh digunakan untuk tujuan komersial atau ilegal, jika tidak, pengguna akan menanggung semua konsekuensi. Informasi di situs ini berasal dari Internet, dan sengketa hak cipta tidak ada hubungannya dengan situs ini. Anda harus sepenuhnya menghapus konten di atas dari komputer Anda dalam waktu 24 jam setelah pengunduhan. Jika Anda menyukai program ini, harap dukung perangkat lunak asli, pembelian pendaftaran, dan dapatkan layanan asli yang lebih baik. Jika ada pelanggaran, silakan hubungi kami melalui email.

Mail To:help@itsvse.com