2011-09-14 8 views
10

HTTP POSTまたはPUTで大きなリクエストボディを処理するには、HttpServletRequest.getContentLength()に依存することは良いことではありません。 2GBを超える要求本文の場合javax.servlet.HttpServletRequest.getContentLength()はintのみを返します

しかし、理由がわかりません、なぜ、より大きなリクエストの本文が許可されるべきではないのでしょうか。 RFC 2616は、

と言います。0以上の任意のContent-Lengthは有効な値です。

HttpServletRequest.getHeader('content-length')を使用して、それをLongに解析するのは有効ですか?

+2

わからない、それならばアップロードに適用されますが、チャンクエンコーディングを参照することもできます。 – McDowell

+0

Java Servletは1997年にリリースされました。当時、2GBは想像もつかなかった。当時の1GBのコンシューマハードディスクもあったのですか? RFC 2616の日付は1999年です。 – irreputable

答えて

8

はい、これは良い方法です。getHeader("Content-Length")(大文字)とLong.parseLong(..)を使用してください。私はコンテナがやっていることだと信じていますが、それはserlvet仕様によってintに限定されています。 、新しい方法が利用可能であるサーブレット3.1(7のJava EE)ので

+1

実際、もう一方の側からは、 'response.setHeader(" Content-Length "、String.valueOf(someLong));'を実行することも完全に有効です。特定のディスクファイルシステムでは4GBの制限があり、おそらくサーバーの2GBのPOSTサイズ設定にも注意する必要があります。 – BalusC

+0

@McDowellは "chuncked"について良い点があります。 (とにかく> 2Gファイルを処理するのは奇妙だと思う) – Bozho

+0

@BalusC、サーバーの2GBのPOSTサイズの設定*をどういう意味なのか説明できますか?どうも。 – Hank

関連する問題