HTTP 헤더의 "Content-Length"필드는 무엇입니까?


282

무슨 뜻인가요?

  1. 헤더에 지정된 인코딩을 사용하여 인코딩 된 컨텐츠 문자열의 바이트 수입니다.
  2. 콘텐츠 문자열의 문자 수

특히 Content-Type: application/x-www-form-urlencoded.

답변:


239

rfc2616

Content-Length entity-header (콘텐츠 길이 엔티티 헤더) 필드는 엔티티 본문의 크기를 10 진수 (OCTET 수)로 수신자에게 전송하거나 HEAD 방법의 경우 전송 된 엔티티 본문의 크기를 나타냅니다. 요청은 GET이었습니다.

컨텐츠 유형이 무엇인지는 중요하지 않습니다.

아래 게시물의 확장 프로그램 입니다.


14
이 답변을 Tom Cabanski의 답변과 결합하면 필요한 모든 정보를 얻을 수 있습니다. 텍스트의 경우 ASCII가 8 비트이므로 문자 수를 계산할 수 있습니다.
hcpl

9
@hcpl : 텍스트가 반드시 ASCII 일 필요는 없으며 ASCII도 8이 아닌 7 비트입니다.
Lie Ryan

2
ASCII를 사용중인 인코딩으로 바꾸고 인코딩에 필요한 비트 수를 찾으십시오. 7 대 8 비트 응답; 원래 그것은 실제로 7 비트 였으므로 다시 맞습니다. 그러나 오늘날 8 비트는 컴퓨터 메모리가 구성되는 방식 때문에 대부분의 경우에 사용됩니다. 편집 : 내 대답을 다시 읽고 어디로 가고 있는지 알 수 있습니다. 원래 의견을 바꿔야합니다.
hcpl

6
@hcpl : 바이트 대 문자 문제가 중요한 전체 이유는 "비트 수"가 고정되지 않은 UTF-8 및 UTF-16과 같은 가변 폭 인코딩 때문입니다.
StefanKarpinski

2
이 번호를 위조 할 수 있습니까? POST는 길이가 큰 문자열 매개 변수이지만 콘텐츠 길이를 1로 설정합니까?
의 Shih-민 리

260

요청 또는 응답 본문의 데이터 바이트 수입니다. 본문은 헤더 아래의 빈 줄 다음에 오는 부분입니다.


1
"요청 또는 응답"이 아니라 "응답의 본문"만 아닌가? 요청에 헤더와 데이터 사이에 빈 줄이 없습니다.
ajfbiw.s

Java 필터에 기록 된 HTTP 응답 헤더 내용 길이를 변경할 수
있습니까

2
@ ajfbiw.s http 게시 요청을 고려하십시오. "요청에 메시지 본문이 있다는 것은 요청의 메시지 헤더에 Content-Length 또는 Transfer-Encoding 헤더 필드가 포함되어 있음을 나타냅니다
Roy

68

Content-Length헤더는는 HTTP 본문의 정확한 바이트 길이를 나타내는 숫자입니다. HTTP 본문은 시작 줄과 헤더 다음에 나오는 첫 번째 빈 줄 바로 뒤에 시작됩니다.

일반적으로 Content-Length헤더는 HTTP 1.1에 사용하므로 수신 당사자가 현재의 응답이 때 알고 * 그렇게, 완료 연결이 다른 요청을 재사용 할 수 있습니다 .

* ... POST, PUT 또는 PATCH와 같이 본문이있는 요청 방법의 경우 요청

또는 Content-Length헤더를 생략하고 청크 Transfer-Encoding헤더를 사용할 수 있습니다.

헤더 Content-LengthTransfer-Encoding헤더가 모두 없으면 응답이 끝날 때 연결을 닫아야합니다.

다음 리소스는 HTTP에 대해 배울 때 매우 유용한 가이드입니다.

HTTP가 정말 쉬워 졌습니다.


45

1 옥텟은 8 비트입니다. 내용 길이는 메시지 본문이 나타내는 옥텟 수입니다.


37
옥텟 = AKA 바이트?
ViniciusPires

77
@ViniciusPires 'byte'는 일반적으로 주소 지정이 가능한 가장 작은 메모리 단위를 나타내는 데 사용되며 모든 아키텍처에서 반드시 8 비트 일 필요는 없습니다. 그렇기 때문에 '옥텟'이 모호성을 피하기 위해 사용되는 이유
PJK

6
@PJK, 아뇨, 정확 하지 않습니다 . OCTET여기에는 <8 비트 데이터 시퀀스>를 의미 하는 매우 구체적인 의미 가 있습니다. w3.org/Protocols/rfc2616/rfc2616-sec2.html#sec2.2
Pacerier

28

여기에서 :

Content-Length entity-header (콘텐츠 길이 엔티티 헤더) 필드는 엔티티 본문의 크기를 10 진수 (OCTET 수)로 수신자에게 전송하거나 HEAD 방법의 경우 전송 된 엔티티 본문의 크기를 나타냅니다. 요청은 GET이었습니다.

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

예를 들면

   Content-Length: 3495

애플리케이션은 4.4 필드 의 규칙에 의해 금지되지 않는 한이 필드를 사용하여 메시지 본문의 전송 길이를 표시해야합니다 .

0보다 크거나 같은 Content-Length는 유효한 값입니다. 4.4 절에는 Content-Length가 제공되지 않은 경우 메시지 본문의 길이를 결정하는 방법이 설명되어 있습니다.

이 필드의 의미는 "메시지 / 외부 본문"컨텐츠 유형에서 사용되는 선택적 필드 인 MIME의 해당 정의와 크게 다릅니다. HTTP에서는 4.4 장의 규칙에 의해 금지되지 않는 한, 전송 전에 메시지 길이를 결정할 수있을 때마다 전송되어야한다.

내 해석은 이것이 "전선상의"길이, 즉 * 인코딩 된 "내용의 길이를 의미한다는 것입니다.


7
"와이어에서"길이는 압축에 따라 변경되지만 압축하기 전에 길이를 말하는 것이 맞습니다.
BayssMekanique

Content-Length는 Mac / Linux와 같은 다른 유형의 컴퓨터에서 다릅니 까? 또는 curl / postman과 같은 다른 클라이언트를 사용하는 동안 다를 수 있습니까?
Kanagavelu Sugumar

1
다른 모든 것이 동일하게 유지된다고 가정하면 (예 : 인코딩, 압축 등) 컨텐츠 길이는 플랫폼에 독립적이어야합니다. 이것은 서버의 헤더이므로 사용자 에이전트를 스니핑하지 않고 다르게 행동한다고 ​​가정하면 클라이언트는 아무런 차이가 없어야합니다.
Daniel Renshaw

Typescript에서 이것에 오류가 발생합니다. 'string'유형에 'number'유형을 지정할 수 없습니다. string [] '그래서 예제는"Content-length": "3495"
A. D' Alfonso

8

에서 이 페이지

POST의 가장 일반적인 용도는 HTML 양식 데이터를 CGI 스크립트에 제출하는 것입니다. 이 경우 Content-Type : 헤더는 일반적으로 application / x-www-form-urlencoded이며 Content-Length : 헤더는 URL로 인코딩 된 양식 데이터의 길이를 나타냅니다 (여기서는 URL 인코딩에 대한 참고 사항). CGI 스크립트는 STDIN을 통해 메시지 본문을 수신하여 디코딩합니다. POST를 사용한 일반적인 양식 제출은 다음과 같습니다.

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

사양 에 따르면 :

Content-Length entity-header (콘텐츠 길이 엔티티 헤더) 필드는 엔티티 본문의 크기를 10 진수 (OCTET 수)로 수신자에게 전송하거나 HEAD 방법의 경우 전송 된 엔티티 본문의 크기를 나타냅니다. 요청은 GET이었습니다.

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

예를 들면

Content-Length: 3495

4.4 절의 규칙에 의해 금지되지 않는 한, 애플리케이션은이 필드를 사용하여 메시지 본문의 전송 길이를 표시해야한다.

0보다 크거나 같은 Content-Length는 유효한 값입니다. 4.4 절에는 Content-Length가 제공되지 않은 경우 메시지 본문의 길이를 결정하는 방법이 설명되어 있습니다.

이 필드의 의미는 "메시지 / 외부 본문"컨텐츠 유형에서 사용되는 선택적 필드 인 MIME의 해당 정의와 크게 다릅니다. HTTP에서는 4.4 장의 규칙에 의해 금지되지 않는 한, 전송 전에 메시지 길이를 결정할 수있을 때마다 전송되어야한다.


2

Content-Length entity-header (콘텐츠 길이 엔티티 헤더) 필드는 엔티티 본문의 크기를 10 진수 (OCTET 수)로 수신자에게 전송하거나 HEAD 방법의 경우 전송 된 엔티티 본문의 크기를 나타냅니다. 요청은 GET이었습니다.

Content-Length = "컨텐츠 길이" ":"1 * DIGIT

예를 들면

내용 길이 : 1024

응용 프로그램은이 필드를 사용하여 메시지 본문의 전송 길이를 표시해야합니다.

PHP에서는 이와 같은 것을 사용합니다.

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

"Content-Type : application / x-www-form-urlencoded"의 경우 인코딩 된 데이터는 지정된 처리 에이전트로 전송되므로 게시 할 데이터의 길이 또는 크기를 설정할 수 있습니다.


0

다음과 같은 헤더가 있는지 고려하십시오.

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

내용 길이 의 크기입니다 압축 "진수"(즉, 될 일이 8 비트 단위로 모든 현대 컴퓨터에 대해 "바이트")의 메시지 본문.

실제 메시지 본문 의 크기 는 150280 바이트 일 수 있습니다.

문자가 일부 유니 코드 문자가 여러 바이트 (주 UTF-8 표준 인코딩입니다) 사용하기 때문에 아마도, 다시 150,231 문자 다를 수 있습니다.

따라서 얼마나 많은 데이터가 전송되는지, 얼마나 많은 데이터가 보유되는지 또는 얼마나 많은 심볼이 표시되는지에 따라 숫자가 다릅니다. 물론 이러한 헤더가 제공 될 것이라는 보장은 없습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.