2012-04-15 3 views
10

어떻게의 예를 들어 내용 길이를 계산할 수 있습니다계산 내용 길이 POST

POST /Upload/ HTTP/1.1 
Host: test.lan 
User-Agent: Shockwave Flash 
Connection: Keep-Alive 
Cache-Control: no-cache 
Accept: text/* 
Content-Length: ????? 
Content-Type: multipart/form-data; boundary=----------------------------4d2179e6b3c0 

------------------------------4d2179e6b3c0 
Content-Disposition: form-data; name="Filename" 

phpinfo.php 
------------------------------4d2179e6b3c0 
Content-Disposition: form-data; name="ASPSESSID" 

6e223eb1c7561e9c599f03cc04e9444b 
------------------------------4d2179e6b3c0 
Content-Disposition: form-data; name="Filedata"; filename="phpinfo.php" 
Content-Type: application/octet-stream 

<? phpinfo(); ?> 
------------------------------4d2179e6b3c0 
Content-Disposition: form-data; name="Upload" 

Submit Query 
------------------------------4d2179e6b3c0-- 

답변

16

Content-Length 값은 후 모든 데이터를 메시지 헤더의 종료를 총에 의해 계산되어야한다. 당신의 경계 구분 기호를 포함하여 - - 계산해야

가 첫 번째 빈 라인 (\r\n) 후 오는
... 
Content-Length: ?????\r\n 
Content-Type: multipart/form-data; boundary=--------------------4d2179e6b3c0\r\n 
\r\n 

모든 : 귀하의 예제의 경우,이 (CRLF 문자 가독성을 위해 포함하여)이 시점 이후의 모든입니다 전체 길이. 실제로 이는 일반적으로 전체 메시지 엔터티 본문을 생성 한 후 Content-Length 헤더 값을 표로 만들어야 함을 의미합니다. 메시지 본문이 완성되면 헤더 앞에 메시지를 추가하여 전체 HTTP 메시지를 작성할 수 있습니다.

HTTP 사양에 따르면 이 필요합니다.Content-Length 헤더를 지정해야합니다. RFC 2616 14.13에서 :

응용 프로그램이이 섹션 4.4의 규칙에 의해 금지되지 않는 한, 메시지 본문의 전송-을 지정하려면이 필드를 사용해야한다.

그러나 이것은 일반적으로 Content-Length이 없거나 잘못 지정된 경우 오류 응답을 다시 보내는 대부분의 서버에서 요구되는 표준입니다.

+0

예, HTTP 당 필수 항목은 아니지만 일부 CGI 구현에는 모든 POST 트랜잭션에서 내용 길이가 필요합니다. – ViFI

관련 문제