2012-04-15 45 views
10

Làm thế nào tôi có thể tính toán chiều dài nội dung ví dụ của:Tính chiều dài nội dung 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-- 

Trả lời

16

Giá trị Content-Length nên được tính bằng cách tính tổng tất cả dữ liệu sau chấm dứt tiêu đề thư. Trong trường hợp ví dụ của bạn, đây là tất cả mọi thứ sau thời điểm này (với CRLF ký tự bao gồm cho dễ đọc):

... 
Content-Length: ?????\r\n 
Content-Type: multipart/form-data; boundary=--------------------4d2179e6b3c0\r\n 
\r\n 

Tất cả mọi thứ đến sau khi dòng đầu tiên có sản phẩm nào (\r\n) - bao gồm delimiters ranh giới của bạn - nên được tính trong tổng chiều dài. Trong thực tế, điều này thường có nghĩa là bạn sẽ cần phải lập bảng giá trị tiêu đề Content-Length sau khi tạo toàn bộ thực thể thư. Khi bạn có toàn bộ nội dung thư, bạn có thể thêm nó vào đầu của bạn để tạo thông báo HTTP đầy đủ.

Theo thông số HTTP bạn không yêu cầu kỹ thuật yêu cầu để chỉ định tiêu đề Content-Length. Từ RFC 2616 14.13:

Ứng dụng NÊN sử dụng trường này để biểu thị độ dài truyền của nội dung thư, trừ khi điều này bị cấm theo quy tắc trong phần 4.4.

Tuy nhiên, đây là yêu cầu khá chuẩn đối với hầu hết các máy chủ nói chung sẽ gửi trả lời lỗi nếu thiếu Content-Length hoặc được chỉ định không chính xác.

+0

Có, theo HTTP, đó không phải là yêu cầu bắt buộc nhưng một số triển khai CGI yêu cầu độ dài nội dung trong tất cả các giao dịch POST. – ViFI

Các vấn đề liên quan