【问题标题】:When I submit a large number of parameters via g:form, some are missing from the params object当我通过 g:form 提交大量参数时,params 对象中缺少一些参数
【发布时间】:2015-07-29 11:46:15
【问题描述】:

我正在开发的 Grails 2.4.3 应用程序中有一个批量导入功能,其最后一个阶段是每个单元格都有一个输入的表格。我通过标签提交这一切。

我注意到,当表大到足以包含超过 10,002 个参数时,参数中会丢失一些数据。我注意到这是由于某些已保存域中的验证失败(由于缺少必填字段),然后通过打印确定了这个最大数量

params.keySet().size() // always 10,002

作为健全性检查,我创建了一个包含 20k 条目的 Groovy 映射,因此这不是语言级别的约束。参数包括控制器和动作,因此对于用户定义的参数来说,它看起来像是一个不错的 10k 轮。这是一个已知的限制吗?如果可以,是否可配置?

【问题讨论】:

  • 这些都是通过 URL 的 GET 请求吗?如果是这样:stackoverflow.com/questions/417142/…
  • @tim_yates - 我认为您的问题的答案可能是“否”,但我不能确定。他/她在邮件列表上发布了相同的问题,并指出这些可能是表单参数。
  • @tim_yates 这些是正在发布的表单参数。正如 JSB 提到的,我在邮件列表上发布了这个并得到了他的回复,讨论在这里:groups.google.com/forum/…

标签: tomcat grails groovy


【解决方案1】:

您已超出 Tomcat 的默认最大参数计数。请注意,这种情况是可以检测到的(请参阅下面的文档链接)。

查看http://tomcat.apache.org/tomcat-8.0-doc/config/http.html,搜索maxParameterCount

如果您愿意,可以简单地将值设置得更高。

奇怪的是您看到的是 10002 而不是 10000

【讨论】:

  • 10002包括'controller'和'action',它们实际上并不是从表单提交,而是由框架注入到params对象中。你能解释一下如何改变这个吗?我尝试将maxParameterCount="20000" 添加到 server.xml 中的 http 连接器配置,但没有效果。
  • 你用的是什么版本的Tomcat?
  • 我们使用的是 Tomcat 7.0.42
  • 请尝试使用 Tomcat 7.0.latest,目前为 7.0.63。
  • 你是对的,这是 Tomcat 的 maxParameterCount 启动的。Tomcat 会默默地忽略 x+1st 参数和它之后的所有其他参数。解决方法是在 Tomcat 的 server.xml <Connector port="8080" protocol="HTTP/1.1" maxParameterCount="200000" connectionTimeout="20000" redirectPort="8443" /> 中的 Connector 属性上添加我们自己的值。当为此选择值时,值得记住的是,此限制的一个动机是减轻 DOS 攻击:stackoverflow.com/a/12277296跨度>
猜你喜欢
  • 2011-11-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多