Подтвердить что ты не робот

Java.lang.IllegalArgumentException: Недопустимый символ, найденный в имени метода. Именами HTTP-метода должны быть токены

Я получаю ниже трассировку стека, когда я развертываю свое приложение в среде с несколькими серверами 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)

Может ли кто-нибудь указать мне, как устранить или ограничить такое исключение? Я не получаю никакой ссылки ни на один из моих исходных файлов приложения. Я пытался google, и в ссылках, которые он сказал, вы пытаетесь получить доступ к http url через https, что кажется маловероятным. Я не получаю эту ошибку, когда приложение работает на одном экземпляре 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" />

Даже если кто-то помогает в определении направления моей попытки устранения неполадок, это будет полезно, поскольку в настоящее время я понятия не имею, где искать.

Спасибо заранее.

4b9b3361

Ответ 1

Это исключение может возникнуть при попытке выполнить запрос HTTPS от клиента на конечной точке, для которой не включен HTTPS. Клиент будет шифровать данные запроса, когда сервер ожидает необработанные данные.

Ответ 2

У меня такое же исключение, когда я тестировал локально. Проблема заключалась в схеме URL-адреса в моем запросе.

Измените https://to http://in your client url.

Наверное, это помогает.

Ответ 3

Вы вызываете локальный сервер с http ://localhost: 8080/foo/bar. Вызовите его с помощью https ://localhost: 8080/foo/bar. Это решает проблему

Ответ 4

Я получил это исключение, не связанное с какими-либо проблемами SSL. В моем случае значение заголовка Content-Length не соответствует длине тела.

Ответ 5

Отвечая на этот старый вопрос (для других, которые могут помочь)

Правильная настройка вашего httpd conf поможет решить проблему. Установите любой httpd сервер, если у вас его нет.

Список моего конфига здесь.

[[email protected] ~]$ cat /etc/httpd/conf/httpd.conf | grep shirts | grep -v "#"


        ProxyPass /shirts-service http://local.box002.com:16743/shirts-service
        ProxyPassReverse /shirts-service http://local.box002.com:16743/shirts-service
        ProxyPass /shirts http://local.box002.com:16443/shirts
        ProxyPassReverse /shirts http://local.box002.com:16443/shirts
        ...
        ...
        ...

отредактируйте файл, как указано выше, а затем перезапустите httpd, как показано ниже

[[email protected] ~]$ sudo service httpd restart


И тогда запрос с https будет работать без исключения.
Также запрос с http перенаправит на https ! Не волнуйтесь.

Ответ 6

Я получал такое же исключение, всякий раз, когда страница загружалась,

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, когда я изменил то же самое, ошибка исчезла.

Ответ 7

Обычно это происходит, когда вы используете схему URI, которая не поддерживается сервером, на котором развертывается приложение. Таким образом, вы можете либо проверить, какие все схемы поддерживаются вашим сервером, так и изменить ваш URI запрос соответственно, или вы можете добавить поддержку этой схемы на свой сервер. Объем вашего приложения должен помочь вам принять решение об этом.

Ответ 8

Это случилось со мной, когда у меня был один и тот же порт, используемый в SOCKS туннеле SOCKS для запуска прокси на 8080 порту, и мой сервер и прокси браузера Firefox были настроены на этот порт и получили эту проблему.

Ответ 9

Эту ошибку удалось устранить, выполнив 2 действия в браузере Chrome:

  1. Нажмите Ctrl + Shift + Delete и очистите все данные просмотра с начала.
  2. Перейдите в Chrome: "Настройки" → "Дополнительные настройки" → "Открыть настройки прокси" → "Свойства обозревателя", затем перейдите в окно "Содержимое" и нажмите кнопку "Очистить состояние SSL".

На этом сайте есть эта информация и другие опции: https://www.thesslstore.com/blog/fix-err-ssl-protocol-error/