为了处理HTTP POST或PUT中的大型请求主体,依赖HttpServletRequest.getContentLength()
不是一个好主意,因为它只返回整数值,或者对于> 2GB的请求主体,返回-1.
但是,我认为没有理由,为什么不应该允许更大的请求机构.RFC 2616说
任何大于或等于零的Content-Length都是有效值.
是否有效使用HttpServletRequest.getHeader('content-length')
并将其解析为Long?
是的,这是一个很好的方法 - 使用getHeader("Content-Length")
(大写)和Long.parseLong(..)
.我相信这是容器正在做的事情,但它受限于int
serlvet规范.
从Servlet 3.1(Java EE 7)开始,可以使用一种新方法getContentLengthLong()
:
long contentLength = request.getContentLengthLong();
Run Code Online (Sandbox Code Playgroud)
这同样适用于答复的对应方setContentLengthLong()
:
response.setContentLengthLong(file.length());
Run Code Online (Sandbox Code Playgroud)