JAVA -tomcat- 请求头太大
Posted
技术标签:
【中文标题】JAVA -tomcat- 请求头太大【英文标题】:JAVA -tomcat- Request header is too large 【发布时间】: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 【参考方案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.xserver.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 路径 <img src="example.com/extremely-long-base64-encoded-string">
而不是 <img scr="data:;base64,extremely-long-base64-encoded-string">
您注意到不同之处,这就是导致错误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>
【讨论】:
以上是关于JAVA -tomcat- 请求头太大的主要内容,如果未能解决你的问题,请参考以下文章