【问题标题】:HTTP Request (POST) field size limit & Request.BinaryRead in JSPsJSP 中的 HTTP 请求 (POST) 字段大小限制和 Request.BinaryRead
【发布时间】:2009-12-01 14:28:00
【问题描述】:

首先,我的 Java 已经过时了,而且我从未做过 JSP 或 servlet,但我正在尝试帮助其他人解决问题。

由 JavaScript 呈现的表单正在回发到 JSP。 此表单中的某些字段的大小超过 100KB。 但是,当在 JSP 端检索表单字段时,该字段的值被截断为 100KB。

现在我知道在 ASP Request.Form 中有一个类似的问题,可以通过使用 Request.BinaryRead 来解决。 Java中是否有等价物?

或者 Websphere/Apache/IBM HTTP Server 中是否有解决相同问题的设置?

【问题讨论】:

  • 没有代码,不知道哪里出了问题。

标签: java jsp request


【解决方案1】:

由于发布的请求必须由 servlet 容器保存在内存中以提供 ServletRequest API 所需的功能,因此大多数 servlet 容器都有一个可配置的大小限制以防止 DoS 攻击,否则少数虚假客户端可能会引发服务器内存不足。

如果 WebSphere 静默截断请求而不是正常失败,这有点奇怪,但如果这是您的问题的原因,您可能会找到配置选项 here in the WebSphere documentation

【讨论】:

    【解决方案2】:

    我们已经解决了这个问题。 事实证明,这与网络服务器设置无关,帖子中没有任何内容被截断。

    发布之前的表单字段被 JavaScript 分割成 102399 字节大小的块,每个块都作为一个值添加到表单字段中,因此它最终得到一个值数组。 Request.Form() 似乎会自动连接这些值以重现单个巨型字符串,但 Java getParameter() 不会。 然而,使用 getParameterValues() 并从返回的值重建字符串就可以了。

    【讨论】:

      【解决方案3】:

      您可以使用getInputStream(原始字节)或getReader(解码的字符数据)从请求中读取数据。注意how this interacts 读取参数。如果您不想使用 servlet,请查看使用 Filterwrap 的请求。

      我希望 WebSphere 拒绝请求而不是任意截断数据。我怀疑其他地方有错误。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-07-26
        • 1970-01-01
        • 2020-10-29
        • 2023-03-27
        • 1970-01-01
        • 2014-08-13
        • 2012-02-21
        • 2018-08-16
        相关资源
        最近更新 更多