Apa bidang "Panjang Konten" di header HTTP?

282

Apa artinya?

  1. Jumlah byte string konten yang disandikan dengan penyandian yang ditentukan dalam header.
  2. Hitungan karakter dari string konten.

Terutama dalam hal Content-Type: application/x-www-form-urlencoded.

Eonil
sumber

Jawaban:

239

rfc2616

Bidang header entitas Konten-Panjang menunjukkan ukuran entitas-tubuh, dalam jumlah desimal OCTET, dikirim ke penerima atau, dalam hal metode HEAD, ukuran entitas-badan yang akan dikirim telah memiliki permintaan menjadi GET.

Tidak masalah apa jenis kontennya.

Perpanjangan pos di bawah ini .

Angin puyuh
sumber
14
Gabungkan jawaban ini dengan jawaban dari Tom Cabanski dan Anda memiliki semua informasi yang Anda butuhkan. Dalam hal teks, Anda dapat menghitung jumlah karakter karena ASCII adalah 8 bit.
hcpl
9
@ hcpl: tetapi teks tidak selalu selalu ASCII, juga ASCII adalah 7-bit, bukan 8.
Lie Ryan
2
Ganti ASCII dengan pengkodean apa pun yang Anda gunakan dan cari jumlah bit yang diperlukan pengodean. Untuk respons 7 vs 8 bit; Awalnya itu 7 bit memang jadi kamu benar lagi. Tetapi hari ini 8 bit digunakan dalam sebagian besar (jika tidak semua) kasus karena cara memori komputer diatur. sunting: Membaca ulang jawaban saya, saya melihat ke mana Anda pergi. Saya harus mengulangi komentar asli saya.
hcpl
6
@ hcpl: seluruh alasan mengapa masalah byte dan karakter adalah signifikan karena pengkodean lebar variabel seperti UTF-8 dan UTF-16 di mana "jumlah bit" tidak diperbaiki.
StefanKarpinski
2
bisakah kamu memalsukan nomor ini? seperti POST param string dengan panjang besar tetapi atur panjang konten Anda menjadi 1?
Shih-Min Lee
260

Ini adalah jumlah byte data di badan permintaan atau respons. Tubuh adalah bagian yang muncul setelah garis kosong di bawah header.

Tom Cabanski
sumber
1
Daripada "meminta atau merespons", bukankah "badan tanggapan" SAJA? Permintaan tidak memiliki garis kosong antara header dan data.
ajfbiw.s
dapatkah saya mengubah panjang konten tajuk respons HTTP yang diajukan dalam filter java
KItis
2
@ ajfbiw.s Pertimbangkan permintaan posting http. "Kehadiran badan pesan dalam permintaan ditandai dengan dimasukkannya bidang header Panjang-Konten atau Transfer-Pengkodean dalam header pesan permintaan." Dari w3.org/Protocols/rfc2616/rfc2616/rfc2616-sec4.html# sec4.3
Roy Guanyu
68

The Content-Lengthheader sejumlah yang menunjukkan suatu panjang byte yang tepat dari tubuh HTTP. Badan HTTP dimulai segera setelah baris kosong pertama yang ditemukan setelah baris awal dan tajuk.

Umumnya Content-Lengthtajuk digunakan untuk HTTP 1.1 sehingga pihak penerima tahu kapan respons saat ini * selesai, sehingga koneksi dapat digunakan kembali untuk permintaan lain .

* ... atau permintaan, dalam hal metode permintaan yang memiliki badan, seperti POST, PUT atau PATCH

Atau, Content-Lengthtajuk dapat dihilangkan dan Transfer-Encodingtajuk yang dipotong dapat digunakan.

Jika keduanya Content-Lengthdan Transfer-Encodingtajuk tidak ada, maka di akhir respons koneksi harus ditutup.

Sumber daya berikut adalah panduan yang saya temukan sangat berguna ketika belajar tentang HTTP:

HTTP Dibuat Sangat Mudah .

pemboros
sumber
45

Satu oktet adalah 8 bit. Panjang konten adalah jumlah oktet yang diwakili oleh badan pesan.

proyeknya
sumber
37
Octet = AKA Byte?
ViniciusPires
77
@ViniciusPires 'byte' biasanya digunakan untuk menggambarkan unit memori beralamat terkecil, yang tidak harus 8 bit pada semua arsitektur. Itulah sebabnya 'oktet' digunakan untuk menghindari ambiguitas
PJK
6
@ PJK, Tidak, tidak persis benar. OCTETdi sini memiliki arti yang sangat spesifik yang berarti <urutan data 8-bit>. Lihat definisi di w3.org/Protocols/rfc2616/rfc2616-sec2.html#sec2.2
Pacerier
28

Dari sini :

Bidang header entitas Konten-Panjang menunjukkan ukuran entitas-tubuh, dalam jumlah desimal OCTET, dikirim ke penerima atau, dalam hal metode HEAD, ukuran entitas-badan yang akan dikirim telah memiliki permintaan menjadi GET.

   Content-Length    = "Content-Length" ":" 1*DIGIT

Contohnya adalah

   Content-Length: 3495

Aplikasi HARUS menggunakan bidang ini untuk menunjukkan panjang transfer badan pesan, kecuali jika ini dilarang oleh aturan di bagian 4.4 .

Setiap Konten-Panjang lebih besar dari atau sama dengan nol adalah nilai yang valid. Bagian 4.4 menjelaskan cara menentukan panjang badan pesan jika Panjang Konten tidak diberikan.

Perhatikan bahwa makna bidang ini sangat berbeda dari definisi yang sesuai di MIME, di mana ini adalah bidang opsional yang digunakan dalam tipe konten "message / external-body". Dalam HTTP, itu HARUS dikirim setiap kali panjang pesan dapat ditentukan sebelum ditransfer, kecuali ini dilarang oleh aturan di bagian 4.4.

Interpretasi saya adalah ini berarti panjang "di kabel", yaitu panjang konten * yang disandikan

Daniel Renshaw
sumber
7
"On the wire", panjangnya akan diubah tergantung pada kompresi, tetapi benar untuk mengatakan panjangnya sebelum dikompres.
BayssMekanique
Akankah Content-Length berbeda pada berbagai jenis mesin seperti Mac / Linux? ATAU apakah akan berbeda ketika menggunakan klien yang berbeda seperti curl / tukang pos ...?
Kanagavelu Sugumar
1
Dengan asumsi semua yang lain tetap sama (misalnya penyandian, kompresi, dll.) Maka panjang konten harus independen terhadap platform. Ini adalah tajuk dari server sehingga, dengan anggapan ia tidak menghirup agen-pengguna dan berperilaku berbeda, klien seharusnya tidak membuat perbedaan.
Daniel Renshaw
Naskah melempar kesalahan pada ini. Ketik 'angka' tidak dapat ditentukan untuk mengetik 'string | string [] 'jadi contohnya adalah"Content-length": "3495"
A. D'Alfonso
8

Dari halaman ini

Sejauh ini, penggunaan POST yang paling umum adalah mengirimkan data formulir HTML ke skrip CGI. Dalam kasus ini, header Content-Type: biasanya application / x-www-form-urlencoded, dan header Content-Length: memberikan panjang data form yang dikodekan URL (inilah catatan pada pengkodean URL). Skrip CGI menerima isi pesan melalui STDIN, dan menerjemahkannya. Berikut ini adalah pengiriman formulir yang khas, menggunakan POST:

POST /path/script.cgi HTTP/1.0
From: [email protected]
User-Agent: HTTPTool/1.0
Content-Type: application/x-www-form-urlencoded
Content-Length: 32
Ada
sumber
5

Menurut spesifikasi :

Bidang header entitas Konten-Panjang menunjukkan ukuran entitas-tubuh, dalam jumlah desimal OCTET, dikirim ke penerima atau, dalam hal metode HEAD, ukuran entitas-badan yang akan dikirim telah memiliki permintaan menjadi GET.

Content-Length    = "Content-Length" ":" 1*DIGIT

Contohnya adalah

Content-Length: 3495

Aplikasi HARUS menggunakan bidang ini untuk menunjukkan panjang transfer badan pesan, kecuali jika ini dilarang oleh aturan di bagian 4.4.

Setiap Konten-Panjang lebih besar dari atau sama dengan nol adalah nilai yang valid. Bagian 4.4 menjelaskan cara menentukan panjang badan pesan jika Panjang Konten tidak diberikan.

Perhatikan bahwa makna bidang ini sangat berbeda dari definisi yang sesuai di MIME, di mana ini adalah bidang opsional yang digunakan dalam tipe konten "message / external-body". Dalam HTTP, itu HARUS dikirim setiap kali panjang pesan dapat ditentukan sebelum ditransfer, kecuali ini dilarang oleh aturan di bagian 4.4.

Bozhidar Batsov
sumber
2

Bidang header entitas Konten-Panjang menunjukkan ukuran entitas-tubuh, dalam jumlah desimal OCTET, dikirim ke penerima atau, dalam hal metode HEAD, ukuran entitas-badan yang akan dikirim telah memiliki permintaan menjadi GET.

Content-Length = "Content-Length" ":" 1 * DIGIT

Contohnya adalah

Panjang Konten: 1024

Aplikasi HARUS menggunakan bidang ini untuk menunjukkan panjang transfer badan pesan.

Di PHP Anda akan menggunakan sesuatu seperti ini.

header("Content-Length: ".filesize($filename));

Dalam hal "Tipe Konten: aplikasi / x-www-form-urlencoded" data yang disandikan dikirim ke agen pemrosesan yang ditunjuk sehingga Anda dapat mengatur panjang atau ukuran data yang akan Anda posting.

Gaurav Jassal
sumber
0

Pertimbangkan jika Anda memiliki tajuk seperti:

content-encoding: gzip
content-length: 52098
content-type: text/javascript; charset=UTF-8

Panjang konten adalah ukuran isi pesan terkompresi , dalam "oktet" (yaitu dalam satuan 8 bit, yang kebetulan merupakan "byte" untuk semua komputer modern).

The ukuran tubuh pesan yang sebenarnya dapat menjadi sesuatu yang lain, mungkin 150.280 bytes.

Jumlah karakter dapat berbeda lagi, mungkin 150231 karakter, karena beberapa karakter unicode menggunakan beberapa byte (perhatikan UTF-8 adalah pengkodean standar).

Jadi, angka yang berbeda tergantung pada apakah Anda peduli berapa banyak data yang dikirimkan, atau berapa banyak data yang disimpan, atau berapa banyak simbol yang terlihat. Tentu saja, tidak ada jaminan bahwa header ini akan diberikan ..

benjimin
sumber