如何限制tomcat 8中的帖子大小?如何为其制作自定义回复?

问题描述 投票:0回答:2

我在我的

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 端完成。有人可以解释一下我在这里缺少什么吗?

java servlets tomcat8
2个回答
6
投票

根据 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

注意: 更改后请务必重新启动服务器。


0
投票

默认情况下,HTTP 容器使用 HTTP 请求对象的输入流并将数据作为字节进行处理。如果请求有任何编码,它将使用基于字符的读取器对象。
https://tomcat.apache.org/tomcat-5.5-doc/servletapi/javax/servlet/ServletRequest.html#getInputStream()

发送响应时,内容长度也以字节为单位设置。您将内容长度设置为字节,并以字符或字节形式写入。

服务器将以字节形式处理数据

© www.soinside.com 2019 - 2024. All rights reserved.