【问题标题】:JAVA -tomcat- Request header is too largeJAVA -tomcat- 请求头太大
【发布时间】:2017-02-04 20:02:40
【问题描述】:
INFO: Error parsing HTTP request header
 Note: further occurrences of HTTP header parsing errors will be logged at DEBUG level.
java.lang.IllegalArgumentException: Request header is too large
    at org.apache.coyote.http11.InternalInputBuffer.fill(InternalInputBuffer.java:512)
    at org.apache.coyote.http11.InternalInputBuffer.fill(InternalInputBuffer.java:501)
    at org.apache.coyote.http11.InternalInputBuffer.parseRequestLine(InternalInputBuffer.java:171)
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:996)
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:623)
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:318)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    at java.lang.Thread.run(Thread.java:722

如何在我的 Spring Web 应用程序中解决这个问题?

我已经浏览过这个帖子Request header is too large

【问题讨论】:

  • 提示:我猜这与 eclipse 无关。
  • 您是否捕获了此请求的 http 数据包并尝试查看标头?
  • 我认为无论eclipse @GhostCat如何,都应该在tomcat中进行一些配置更改
  • 我需要知道哪些配置更改以及我需要在我的 spring 应用程序或 tomcat 中进行哪些更改? @Himanshu

标签: java http tomcat tomcat7


【解决方案1】:

问题来了,HTTP 标头有限制吗?答案是没有限制,但即使在 POST 请求中,网络服务器也会限制其传入的请求标头大小,因此我们得到 413(请求标头太大)。此限制包括请求行和标头字段。

http://httpd.apache.org/docs/2.2/mod/core.html#limitrequestfieldsize

https://tomcat.apache.org/tomcat-5.5-doc/config/http.html

http://nginx.org/en/docs/http/ngx_http_core_module.html#large_client_header_buffers

Maximum on http header values?


就我而言,我有 SpringBoot 1.5.8 并使用 HTTP POST,但是我必须添加:

server.max-http-header-size=10000000 

在 application.properties 中。

【讨论】:

  • 我将 MB 添加到大小值 10000000 以获得 10000000MB。因为它给出了以下错误无法将'server.max-http-header-size'下的属性绑定到org.springframework.util.unit.DataSize:
  • 10000000MB 差不多是 10TB,你打算在 header 中发送 10TB 吗?
  • 我只是指出我必须将 MB 添加到值中才能为我工作我使用 1MB
  • 我不得不改用 server.tomcat.max-http-header-size
【解决方案2】:

解决了! 我使用的是 HTTP GET 而不是 HTTP POST。 从技术上讲,如果 URL 长度超过 2000 个字符,我已经看到 HttpGet 会出现问题。在这种情况下,最好使用 HttpPost 或拆分 URL。 浏览器限制在 2kb - 8kb

Tomcat: Request header Too large

【讨论】:

    【解决方案3】:

    请求和响应 HTTP 标头的最大大小,在 字节。如果未指定,则此属性设置为 4096 (4 KB)。

    为避免出现Error parsing HTTP request header 错误,您可以通过这样做来增加以下值。

    转到以下位置:$TOMCAT_HOME/conf/server.xml

    server.xml 中更改HTTP/1.1 Connector 条目并将maxHttpHeaderSize 设置为“65536”(64Kb 字节),如下所示:

    <Connector port="8080" maxHttpHeaderSize="65536" protocol="HTTP/1.1" ... />
    

    或者

    您可以使用 POST 方法,根据 Tomcat,它最多可以携带 2 兆字节。

    将由 POST 处理的最大字节数 容器FORM URL参数解析。可以通过以下方式禁用限制 将此属性设置为小于或等于 0 的值。如果不是 指定时,此属性设置为 2097152(2 兆字节)。

    希望这些信息对您有所帮助..

    【讨论】:

      【解决方案4】:

      application.properties 中使用 Spring Boot 2.4:

      server.max-http-header-size=10MB
      

      【讨论】:

        【解决方案5】:

        这与 POST 或 GET 无关,而是您的应用程序使用的 Tomcat 的标头大小限制设置。

        您始终可以使用以下应用程序属性来控制和配置它: server.tomcat.max-http-header-size=1024

        其中 1024 以字节为单位。

        【讨论】:

        • 这里的许多答案似乎混淆了标头和查询字符串/请求正文。
        • 对于 Springboot 2.x server.max-http-header-size=1KB
        【解决方案6】:

        我知道这是一个旧帖子。不过,我认为澄清一些问题是件好事。

        • 使用 _server.tomcat.max-http-header-size=max_wanted_size_ 参数,您可以将服务器更改为接受 max_wanted_size,但即使您将其设置为 10Mb,浏览器也会将您的请求参数减少到浏览器限制大小。我在 chrome 中尝试过,它似乎在 150-200kb 左右。
        • java.lang.IllegalArgumentException 发生在服务器中,与浏览器无关。因此,更改 server.tomcat.max-http-header-size 应该足够好,并且在使用 GET 方法时会发生这种情况,但在使用 POST 方法时也会发生这种情况(在 POST 情况下,应更改 maxPostSize 参数)。

        【讨论】:

          【解决方案7】:

          这是一个旧帖子 - 但任何想要改变的人 最新 Spring Boot 中的 server.max-http-header-size(版本 >=2.1) - 应在 Datasize 可解析值中提供值 例如 - server.max-http-header-size=64KB

          【讨论】:

            【解决方案8】:

            我将为这个问题添加一个不同的“答案”:问题可能是 cookie 太多或太大,在访问网站的用户的浏览器中出现错误。

            虽然大多数人(可以理解)专注于如何将 Tomcat 更改为 ALLOW 更大的标头,但我会指出,在我遇到此错误的情况下,我可以使用我的浏览器开发工具以某种方式看到它是大量 cookie 被发送到产生错误的站点。 (它们似乎有点像我觉得服务器上的某些东西错误地创建了这么多,因为它们命名为彼此几乎重复,具有重复值。)

            我清除了此站点的 cookie(使用浏览器开发工具),现在我没有收到错误消息。当然,清除 cookie 可能会导致退出网站等问题。在我的情况下,这是为了能够再次使用该网站而付出的小代价。

            我留下这个以防其他人有一天会遇到它,或者是收到错误的人(就像我一样)或者是用户报告错误的服务器管理员,他们可以要求他们考虑清除他们网站的 cookie (当然,有很多方法和网站可以提供帮助)。

            【讨论】:

              【解决方案9】:

              在我的例子中,我将 blob 图像显示为 URL 路径 &lt;img src="example.com/{extremely-long-base64-encoded-string}"&gt; 而不是 &lt;img scr="data:;base64,{extremely-long-base64-encoded-string}"&gt;

              您注意到不同之处,这就是导致错误INFO: Error parsing HTTP request header java.lang.IllegalArgumentException: Request header is too large的原因

              【讨论】:

                【解决方案10】:

                我在使用 Spring Boot 应用程序时遇到了同样的错误。我只是将数据发送方式更改为使用查询参数中的 Postman 表单数据,问题已经解决。

                【讨论】:

                  【解决方案11】:

                  我刚刚在尝试为 NetBeans IDE 调试运行 con localhost tomcat 的 Web 应用程序时遇到了这个问题。

                  在我找到任何解决方案之前,从 Firefox 中尝试过,但没有出现问题。

                  原来 Chrome 正在发送一些 cookie 值并达到了一些配置的限制。

                  刚刚从 Chrome 的开发者工具中删除了 localhost 的 cookie 并解决了问题。

                  【讨论】:

                    【解决方案12】:

                    在我的例子中,我有一个 Spring Boot 应用程序,它用于根据请求 URL 重定向到另一个码头应用程序。我不得不在这两个地方修改它。

                    春季启动

                    server.max-http-header-size=20000

                    码头

                    如下所示设置属性 requestHeaderSize 的值。

                       <Call name="addConnector">
                          <Arg>
                              <New class="org.eclipse.jetty.server.nio.SelectChannelConnector">
                                <Set name="host"><Property name="jetty.host" /></Set>
                                <Set name="port"><Property name="jetty.port" default="8080"/></Set>
                                <Set name="maxIdleTime">300000</Set>
                                <Set name="requestHeaderSize">20000</Set>
                                <Set name="Acceptors">2</Set>
                                <Set name="statsOn">false</Set>
                                <Set name="confidentialPort">8443</Set>
                                <Set name="lowResourcesConnections">20000</Set>
                                <Set name="lowResourcesMaxIdleTime">5000</Set>
                              </New>
                          </Arg>
                        </Call>
                    

                    【讨论】:

                      猜你喜欢
                      • 2020-09-01
                      • 2021-05-21
                      • 2017-03-24
                      • 1970-01-01
                      • 1970-01-01
                      • 2020-10-27
                      • 1970-01-01
                      • 1970-01-01
                      • 1970-01-01
                      相关资源
                      最近更新 更多