2012-04-15 11 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値がメッセージヘッダの終了後全てのデータを合計することによって計算されるべきです。あなたの例の場合、これは、この時点の後にすべてのもの(CRLF文字を読みやすくするために含まれて)です:最初の空行(\r\n)の後に来て

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

すべて - あなたの境界区切り文字を含む - はカウントする必要があります全長で実際には、これは通常、完全なメッセージエンティティボディを生成した後にContent-Lengthヘッダー値を表にする必要があることを意味します。メッセージの全身を取得したら、ヘッダーを前置して完全なHTTPメッセージを作成することができます。

HTTP仕様によれば、技術的にはが必要です。は、Content-Lengthヘッダーを指定する必要があります。 RFC 2616 14.13から:これはセクション4.4で規則によって禁止されない限り

アプリケーションは、メッセージボディの転送長さを示すためにこのフィールドを使用すべきです。

しかし、これはContent-Lengthが見つからないか、正しく指定されている場合、一般的にエラー応答を返送しますほとんどのサーバーのためにかなりの標準的な要件です。

+0

はい、HTTPごとに必須要件ではありませんが、一部のCGI実装ではすべてのPOSTトランザクションでコンテンツ長が必要です。 – ViFI

関連する問題