HTTP üstbilgisindeki "İçerik Uzunluğu" alanı nedir?


282

Bu ne demek?

  1. Başlıkta belirtilen kodlama ile kodlanmış içerik dizesinin bayt sayısı.
  2. İçerik dizesinin karakter sayısı.

Özellikle de Content-Type: application/x-www-form-urlencoded.

Yanıtlar:


239

RFC2616

İçerik Uzunluğu varlık başlığı alanı, alıcıya gönderilen ondalık sayıdaki OCTET sayısıyla varlık gövdesinin boyutunu veya HEAD yöntemi durumunda, gönderilecek varlık gövdesinin boyutunu istek bir GET oldu.

İçerik türünün ne olduğu önemli değil.

Aşağıdaki yayında uzantı .


14
Bu yanıtı Tom Cabanski'nin yanıtıyla birleştirin ve ihtiyacınız olan tüm bilgilere sahip olun. Metin söz konusu olduğunda ASCII 8 bit olduğu için karakter sayısını sayabilirsiniz.
hcpl

9
@hcpl: ancak metin her zaman ASCII olmak zorunda değildir, ayrıca ASCII 8 bit 7 bittir.
Lie Ryan

2
ASCII'yi kullandığınız kodlama ile değiştirin ve kodlamanın gerektirdiği bit sayısına bakın. 7'ye 8 bit yanıtı için; Aslında 7 bit gerçekten bu yüzden tekrar haklısın. Ancak bugün bilgisayar belleğinin düzenlenmesi nedeniyle çoğu durumda (hepsi değilse de) 8 bit kullanılmaktadır. edit: Cevabımı tekrar okuyorum Nereye gittiğini görüyorum. Orijinal yorumumu tekrar yazmalıyım.
hcpl

6
@hcpl: bayt ve karakter sorununun önemli olmasının nedeni, "bit sayısı" nın sabit olmadığı UTF-8 ve UTF-16 gibi değişken genişlik kodlamalarından kaynaklanmaktadır.
StefanKarpinski

2
bu numarayı taklit edebilir misin? POST gibi büyük uzunlukta bir dizi param ama içerik uzunluğunu 1 olarak mı ayarlıyorsunuz?
Shih-Min Lee

260

İstek veya yanıtın gövdesindeki verilerin bayt sayısıdır. Gövde, başlıkların altındaki boş satırdan sonra gelen bölümdür.


1
"İstek veya yanıt" yerine, yalnızca "yanıtın gövdesi" değil mi? İsteğin başlık ve veri arasında boş bir satırı yok.
ajfbiw.s

filtresinde dosyalanan HTTP yanıt başlığı içerik uzunluğunu nasıl değiştirebilirim
KItis

2
@ ajfbiw.s Bir http posta isteği düşünün. W3.org/Protocols/rfc2616/rfc2616-sec4.html# adresinden
Roy Guanyu

68

Content-LengthBaşlık, bir HTTP gövdesinin tam bayt uzunluğunu gösteren bir sayıdır. HTTP gövdesi, başlangıç ​​çizgisinden ve başlıklardan sonra bulunan ilk boş satırdan hemen sonra başlar.

Genellikle Content-Lengthüstbilgi HTTP 1.1 için kullanılır, böylece alıcı taraf geçerli yanıtın * ne zaman bittiğini bilir , böylece bağlantı başka bir istek için yeniden kullanılabilir .

* ... veya POST, PUT veya PATCH gibi bir gövdeye sahip istek yöntemleri durumunda istek

Alternatif olarak, Content-Lengthbaşlık atlanabilir ve bir yığın Transfer-Encodingbaşlık kullanılabilir.

Her iki takdirde Content-Lengthve Transfer-Encodingbaşlıklar eksik, o zaman tepki sonundaki bağlantı kapalı olmalıdır.

Aşağıdaki kaynak, HTTP hakkında bilgi edinirken çok yararlı bulduğum bir kılavuzdur:

HTTP Gerçekten Çok Kolay .


45

Bir sekizli 8 bittir. İçerik uzunluğu, ileti gövdesinin temsil ettiği sekizli sayıdır.


37
Octet = AKA Baytı?
ViniciusPires

77
@ViniciusPires 'byte', tüm mimarilerde mutlaka 8 bit olmayan en küçük adreslenebilir bellek birimini tanımlamak için yaygın olarak kullanılır. Bu nedenle 'oktet' herhangi bir belirsizliği önlemek için kullanılır
PJK

6
@PJK, Hayır, tam olarak doğru değil. OCTETburada <herhangi bir 8 bit veri dizisi> anlamına gelen çok özel bir anlamı vardır. W3.org/Protocols/rfc2616/rfc2616-sec2.html#sec2.2
Pacerier

28

Buradan :

İçerik Uzunluğu varlık başlığı alanı, alıcıya gönderilen ondalık sayıdaki OCTET sayısıyla varlık gövdesinin boyutunu veya HEAD yöntemi durumunda, gönderilecek varlık gövdesinin boyutunu istek bir GET oldu.

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

Bir örnek

   Content-Length: 3495

Başvurular bu kuralların yasaklamadığı sürece, mesaj vücudun transfer uzunluğunu belirtmek için bu alanı kullanabilirsiniz GEREKEN bölüm 4.4 .

Sıfıra eşit veya sıfırdan büyük herhangi bir İçerik Uzunluğu geçerli bir değerdir. Bölüm 4.4, bir İçerik Uzunluğu verilmezse bir mesaj gövdesinin uzunluğunun nasıl belirleneceğini açıklar.

Bu alanın anlamının, "ileti / dış gövde" içerik türünde kullanılan isteğe bağlı bir alan olduğu MIME'deki karşılık gelen tanımdan önemli ölçüde farklı olduğuna dikkat edin. HTTP'de, bölüm 4.4'teki kurallar tarafından yasaklanmadığı sürece, mesajın uzunluğu aktarılmadan önce belirlenebildiğinde gönderilmelidir.

Benim yorumum, bunun "kablodaki" uzunluk, yani * kodlanmış "içeriğin uzunluğu anlamına gelmesidir.


7
"Kabloda", uzunluk sıkıştırmaya bağlı olarak değişecektir, ancak sıkıştırılmadan önce uzunluğu söylemek doğrudur.
BayssMekanique

İçerik Uzunluğu Mac / Linux gibi farklı makinelerde farklılık gösterir mi? VEYA kıvırmak / postacı gibi farklı bir istemci kullanırken farklılık gösterecek mi?
Kanagavelu Sugumar

1
Diğerlerinin eşit kaldığı varsayılarak (örn. Kodlama, sıkıştırma vb.) İçerik uzunluğunun platformdan bağımsız olması gerekir. Bu sunucudan bir başlık olduğundan, kullanıcı aracısını koklamadığı ve farklı davranmadığı varsayılarak, istemci herhangi bir fark yaratmamalıdır.
Daniel Renshaw

Daktilo yazımı bu konuda bir hata verir. 'Number' türü 'string' türüne atanamaz | string [] 'yani örnek"Content-length": "3495"
A. D'Alfonso

8

Gönderen bu sayfada

POST'un en yaygın kullanımı, HTML form verilerini CGI komut dosyalarına göndermektir. Bu durumda, Content-Type: üstbilgisi genellikle application / x-www-form-urlencoded şeklindedir ve Content-Length: üstbilgisi, URL kodlamalı form verilerinin uzunluğunu verir (burada URL kodlamasıyla ilgili bir not). CGI betiği ileti gövdesini STDIN aracılığıyla alır ve kodunu çözer. POST kullanarak tipik bir form gönderme:

POST /path/script.cgi HTTP/1.0
From: frog@jmarshall.com
User-Agent: HTTPTool/1.0
Content-Type: application/x-www-form-urlencoded
Content-Length: 32

5

Spec göre :

İçerik Uzunluğu varlık başlığı alanı, alıcıya gönderilen ondalık sayıdaki OCTET sayısıyla varlık gövdesinin boyutunu veya HEAD yöntemi durumunda, gönderilecek varlık gövdesinin boyutunu istek bir GET oldu.

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

Bir örnek

Content-Length: 3495

Uygulamalar Bölüm 4.4'teki kurallar tarafından yasaklanmadığı sürece, mesaj gövdesinin aktarım uzunluğunu belirtmek için bu alanı KULLANMALIDIR.

Sıfıra eşit veya sıfırdan büyük herhangi bir İçerik Uzunluğu geçerli bir değerdir. Bölüm 4.4, bir İçerik Uzunluğu verilmezse bir mesaj gövdesinin uzunluğunun nasıl belirleneceğini açıklar.

Bu alanın anlamının, "ileti / dış gövde" içerik türünde kullanılan isteğe bağlı bir alan olduğu MIME'deki karşılık gelen tanımdan önemli ölçüde farklı olduğuna dikkat edin. HTTP'de, bölüm 4.4'teki kurallar tarafından yasaklanmadığı sürece, mesajın uzunluğu aktarılmadan önce belirlenebildiğinde gönderilmelidir.


2

İçerik Uzunluğu varlık başlığı alanı, alıcıya gönderilen ondalık sayıdaki OCTET sayısıyla varlık gövdesinin boyutunu veya HEAD yöntemi durumunda, gönderilecek varlık gövdesinin boyutunu istek bir GET oldu.

İçerik Uzunluğu = "İçerik Uzunluğu" ":" 1 * DIGIT

Bir örnek

İçerik Uzunluğu: 1024

Uygulamalar Mesaj gövdesinin aktarım uzunluğunu belirtmek için bu alanı KULLANMALIDIR.

PHP'de böyle bir şey kullanırsınız.

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

"Content-Type: application / x-www-form-urlencoded" durumunda, kodlanan veriler, göndereceğiniz verilerin uzunluğunu veya boyutunu ayarlayabilmeniz için atanan işleme aracına gönderilir.


0

Aşağıdaki gibi başlıklarınız olup olmadığını düşünün:

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

İçerik uzunlukta boyutudur sıkıştırılmış "sekizli" (yani olmak ne 8 bit, birimlerinde tüm modern bilgisayarlar için "bayt") Mesaj gövdesi.

Boyut gerçek ileti gövdesinin başka bir şey, belki 150.280 bayt olabilir.

Bazı unicode karakterler birden çok bayt kullandığından karakter sayısı tekrar farklı olabilir, belki 150231 karakter (UTF-8'in standart bir kodlama olduğuna dikkat edin).

Bu nedenle, ne kadar verinin iletildiğine veya ne kadar verinin tutulduğuna veya kaç sembolün göründüğüne bağlı olduğunuza bağlı olarak farklı sayılar. Tabii ki, bu başlıkların sağlanacağının garantisi yoktur.

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.