我在我的
server.xml
文件中配置了这个:
<Connector URIEncoding="UTF-8"
connectionTimeout="20000"
maxHttpHeaderSize="65536"
maxPostSize="1024"
port="8080"
protocol="HTTP/1.1"
redirectPort="8443"/>
但是,超过 1 KB 的请求会通过,就好像从未设置
maxPostSize
一样。谁能建议是什么原因导致的?
另一件事,我想知道如果帖子大小超过1 KB,如何从tomcat制作自定义http回复
更新 因为我在这个问题上已经关注了这么久了。我有机会查看 Tomcat 的源代码来检查到底发生了什么:
Request.java
docjar.com(死链接)(Request.java
docjar.com(存档版本),Request.jar
(Github))
我注意到从第2541行到第2550行,他们正在使用
getContentLength()
,尽管文档说“maxPostSize
:最大大小(以字节为单位)”。怎么会是字节呢?对我来说,它看起来更注重字符数,并且可以在 servlet 端完成。有人可以解释一下我在这里缺少什么吗?
根据 tomcat doc maxPostSize 是 2M。
将由容器 FORM URL 参数解析处理的 POST 的最大大小(以字节为单位)。可以通过将此属性设置为小于零的值来禁用该限制。如果未指定,则该属性设置为 2097152(2 兆字节)。请注意,FailedRequestFilter 可用于拒绝超出此限制的请求。
如果您想更改默认值,请更改以下文件位置:
$CATALINA_HOME/conf/server.xml
示例:
<Connector port="80" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443"
maxPostSize="6291456" />
大小以字节为单位 6291456*(1024*1024)=6M
注意: 更改后请务必重新启动服务器。
默认情况下,HTTP 容器使用 HTTP 请求对象的输入流并将数据作为字节进行处理。如果请求有任何编码,它将使用基于字符的读取器对象。
https://tomcat.apache.org/tomcat-5.5-doc/servletapi/javax/servlet/ServletRequest.html#getInputStream()
发送响应时,内容长度也以字节为单位设置。您将内容长度设置为字节,并以字符或字节形式写入。
服务器将以字节形式处理数据