当我在多服务器Apache Tomcat 8环境中部署我的应用程序时,我的堆栈跟踪不足。我经常得到这个错误,似乎它阻塞了tomcat线程:

INFO [http-nio-80-exec-4461] org.apache.coyote.http11.AbstractHttp11Processor.process Error parsing HTTP request header
 Note: further occurrences of HTTP header parsing errors will be logged at DEBUG level.
 java.lang.IllegalArgumentException: Invalid character found in method name. HTTP method names must be tokens
 at org.apache.coyote.http11.AbstractNioInputBuffer.parseRequestLine(AbstractNioInputBuffer.java:233)
 at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1017)
 at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:684)
 at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1524)
 at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1480)
 at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
 at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
 at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
 at java.lang.Thread.run(Unknown Source)

任何人可以指导我如何排除故障或缩小这样一个例外?我没有得到任何引用的任何我的应用程序源文件。我试着谷歌周围,在它说的链接中,你试图通过https访问http url,这似乎不太可能。当应用程序运行在单个Tomcat 8实例上时,我没有得到这个错误。我只有在多服务器环境中才会遇到这种情况。

我还分享了我在每个页面上嵌入的元标签,如果这有助于识别原因。

<%
    response.setHeader("Cache-Control", "no-cache");
    response.setHeader("Cache-Control", "no-store");
    response.setDateHeader("Expires", 0);
    response.setHeader("Pragma", "no-cache");
%>


<head>
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, minimum-scale=1.0, maximum-scale=1.0">
<meta name="viewport" content="width=device-width, initial-scale=1">

我还在几页中使用了以下内容,基本上与上述内容相同:

<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta http-equiv="Expires" content="-1" />
<meta http-equiv="Cache-Control" content="private" />
<meta http-equiv="Cache-Control" content="no-store" />
<meta http-equiv="Pragma" content="no-cache" />

即使有人帮助给我的故障排除尝试的方向,这将是有用的,因为目前我不知道在哪里寻找。


当前回答

当您试图在未启用HTTPS的端点上从客户端执行HTTPS请求时,可能会发生此异常。当服务器需要原始数据时,客户端将加密请求数据。

其他回答

您正在使用http://localhost:8080/foo/bar调用本地服务器。使用https://localhost:8080/foo/bar调用它。这就解决了问题

我得到了同样的异常,每当一个页面被加载时,

NFO: Error parsing HTTP request header
 Note: further occurrences of HTTP header parsing errors will be logged at DEBUG level.
java.lang.IllegalArgumentException: Invalid character found in method name. HTTP method names must be tokens
    at org.apache.coyote.http11.InternalInputBuffer.parseRequestLine(InternalInputBuffer.java:139)
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1028)
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:637)
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:316)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    at java.lang.Thread.run(Thread.java:748)

我发现我的一个页面URL是https而不是http,当我改变了一样,错误就消失了。

我在chrome浏览器中做了2件事来解决这个错误:

按下Ctrl + Shift + Delete,清除所有浏览数据。 去Chrome的:设置->高级设置->打开代理设置-> Internet属性,然后进入内容窗口,单击清除SSL状态按钮。

这个网站有这些信息和其他选项:https://www.thesslstore.com/blog/fix-err-ssl-protocol-error/

它发生在我身上,当我有一个相同的端口使用ssh隧道SOCKS运行代理在8080端口和我的服务器和我的firefox浏览器代理被设置到该端口,并得到这个问题。

我知道这是一个旧的线程,但有一个特殊的情况下,这种情况可能会发生:

如果您使用AWS api网关与VPC链路耦合,并且如果网络负载均衡器启用了代理协议v2,则也会发生400坏请求。

我花了一下午的时间才弄明白,所以如果它能帮助到别人,我很高兴:)