当前位置:首页 > 开发 > 开源软件 > 正文

TOMCAT在POST方法提交参数丢失问题

发表于: 2015-07-10   作者:357029540   来源:转载   浏览:
摘要: 摘自http://my.oschina.net/luckyi/blog/213209 昨天在解决一个BUG时发现一个奇怪的问题,一个AJAX提交数据在之前都是木有问题的,突然提交出错影响其他处理流程。 检查时发现页面处理数据较多,起初以为是提交顺序不正确修改后发现不是由此问题引起。于是删除掉一部分数据进行提交,较少数据能够提交成功。 恢复较多数据后跟踪提交FORM DATA ,发现数
摘自http://my.oschina.net/luckyi/blog/213209
昨天在解决一个BUG时发现一个奇怪的问题,一个AJAX提交数据在之前都是木有问题的,突然提交出错影响其他处理流程。

检查时发现页面处理数据较多,起初以为是提交顺序不正确修改后发现不是由此问题引起。于是删除掉一部分数据进行提交,较少数据能够提交成功。

恢复较多数据后跟踪提交FORM DATA ,发现数据是存在的,同时后台也未报其他错误。

随后设置Tomcat中POST方式提交数据大小:
maxPostSize="0"
修改后提交数据依然会出错,但给出了错误提示:
信息: More than the maximum number of request parameters (GET plus POST) for a single request ([10,000]) were detected. Any parameters beyond this limit have been ignored. To change this limit, set the maxParameterCount attribute on the Connector.

Note: further occurrences of this error will be logged at DEBUG level.

按照错误提示在在Connector 节点中加入maxParameterCount="-1",再进行测试便成功了。
<Connector executor="tomcatThreadPool"

               port="9080"

               protocol="HTTP/1.1"

                maxParameterCount="-1"

               connectionTimeout="20000"

               acceptCount="75"

               disableUploadTimeout="true"

               enableLookups="false"

               URIEncoding="UTF-8" />


maxParameterCount:

The maximum number of parameters (GET plus POST) which will be automatically parsed by the container. 10000 by default. A value of less than 0 means no limit.
查询网上资料了解到引起该问题是
由于Java中的哈希表实现上的漏洞,现如今因为Tomcat使用了哈希表来存储HTTP请求参数,因此也受此问题影响。

为此Tomcat实现了一个变通的做法,提供一个新的选项maxParameterCount用来限制但请求中最大的参数数量,该参数默认值是10000,这对多数应用程序来说已经足够,这个值也足够用来绕过JRE中的哈希表的bug。

如果你正在使用早期的Tomcat版本(Apache Tomcat 5.x,Apache Tomcat 6.x,Apache Tomcat 7.x),没有maxParameterCount属性,那么可以通过限制maxPostSize到10kb以下来解决这个问题。


也可以升级到5.5.35, 6.0.35或7.0.23及以上版本使用maxParameterCount属性进行处理。

TOMCAT在POST方法提交参数丢失问题

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

编辑推荐
思路来源维基百科:http://en.wikipedia.org/wiki/Post/Redirect/Get 下图为传统POST传递方式: 下图
本实例是通过向服务器发送一个xml格式的数据 web端 servlet package com.lin.servlet; import java.
表单大家都很熟悉,上网的时候经常会遇到表单 表单用来接受用户的输入,并将用户的输入以“name=val
表单大家都很熟悉,上网的时候经常会遇到表单 表单用来接受用户的输入,并将用户的输入以“name=val
【js类库AngularJs】解决angular+springmvc的post提交问题 AngularJS诞生于2009年,由Misko Hevery
如果jar文件是以外部依赖的形式导入的。Eclipse将web项目发布到Tomcat时,是不会自动发布这些依赖的
最近一个项目中,使用号称下一代构建工具的Gradle构建项目。 使用中发现一个问题,Gradle从中央库下
狭义讲,这两种方式的区别就是:以何种方式"携带"数据. get提交,通过url后跟一对或多对键|值的方式传
User-Agent: Fiddler Content-Type: application/json; charset=utf-8 Content-Length: 138 Content
headers-custom header 增加一个Content-type: application/x-www-form-urlencoded 然后在body里面
版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号