之前遇到一个问题,在Jboss server上,将一个页面3000多条数据post到后台进行数据下载的时候,接受请求的地方会报错,但是如果数量低于3000条的情况的就不会报错,于是就怀疑是请求体的大小限制导致的报错,因为之前在NodeJs server遇到过类似的问题,于是通过查询资料找到了问题所在。
jboss有一个配置叫做max-post-size:
- max-post-size Maximum size in bytes of a POST request that can be parsed by the container.
Attribute | Value |
---|---|
Default Value | 2097152 |
Type | INT |
Nillable | true |
Expressions Allowed | true |
Min | 0 |
Max | 2,147,483,647 |
Storage | configuration |
Access Type | read-write |
Restart Required | all-services |
从介绍中可以看到改配置就是限制jboss能够处理的post request的大小,默认值是2MB,然后我们通过Chrome发现3000多条数据的时候content-length是大于2097152,所以问题就出在这里。
首先我们确认了一下jboss 的max-post-size的配置大小。
运行./jboss-cli.sh --connect --controller=localhost:9999
连接到jboss cli。然后运行/profile=sps-profile/subsystem=web/connector=http:read-resource(recursive=true)
获取如下结果:
{
"outcome" => "success",
"result" => {
"enable-lookups" => false,
"enabled" => true,
"executor" => undefined,
"max-connections" => undefined,
"max-post-size" => 2097152,
"max-save-post-size" => 4096,
"name" => "http",
"protocol" => "HTTP/1.1",
"proxy-binding" => undefined,
"proxy-name" => undefined,
"proxy-port" => undefined,
"redirect-binding" => undefined,
"redirect-port" => 443,
"scheme" => "http",
"secure" => false,
"socket-binding" => "http",
"virtual-server" => undefined,
"configuration" => undefined
}
}
从中可以看到max-post-size的值是2097152也就是2MB,为了解决该问题,我们需要将其改成20MB来满足我们的需求,可以运行以下命令:
/profile=sps-profile/subsystem=web/connector=http:write-attribute(name=max-post-size,value=20971520)
、
然后将影响到的server-group重启之后,解决了该问题。
网友评论