[tomcat8] java.lang.IllegalArgumentException : 메소드 명에 유효하지 않은 문자가 있습니다. HTTP 메소드 이름은 토큰이어야합니다

다중 서버 Apache Tomcat 8 환경에서 응용 프로그램을 배포 할 때 스택 추적이 낮아집니다. 이 오류가 자주 발생하고 바람둥이 스레드를 차단하는 것 같습니다.

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 요청 을 실행하려고 할 때 발생할 수 있습니다 . 클라이언트는 서버가 원시 데이터를 기대할 때 요청 데이터를 암호화합니다.


답변

로컬 테스트를 할 때도 동일한 예외가 발생했습니다. 문제는 요청의 URL 스키마였습니다.

변화 https:// to http:// in your client url.

아마 도움이 될 것입니다.


답변

http : // localhost : 8080 / foo / bar를 사용 하여 로컬 서버를 호출하고 있습니다. https : // localhost : 8080 / foo / bar로 호출하십시오 . 이것은 문제를 해결


답변

누군가가 swagger를 사용하는 경우 :

실행하기 전에 Scheme을 HTTP또는로 변경하고 HTTPS필요에 따라 변경하십시오 .

우편 집배원:

URL 경로 http://또는 https://URL 주소로 URL 경로 변경


답변

TLS 문제와 관련이없는이 예외를 받았습니다. 필자의 경우 Content-Length 헤더 값이 본문 길이와 일치하지 않았습니다.


답변

(도움이 될 수 있습니다 다른 사람을 위해)이 오래된 질문에 대답

문제를 만들 것입니다 올바르게 아파치의 conf의 구성 해결했다. httpd 서버가 없으면 설치하십시오.

내 설정을 여기에 나열하십시오.

[smilyface@box002 ~]$ 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를 다시 시작하십시오.

[smilyface@box002 ~]$ sudo service httpd restart

그런 다음 with 요청은 https예외없이 작동합니다.
또한 http의지 와 함께 요청 합니다 https! 걱정 마.


답변

크롬 브라우저에서 두 가지 작업을 수행 하여이 오류가 해결되었습니다.

  1. Ctrl + Shift + Delete를 누르고 모든 브라우징 데이터를 처음부터 지 웁니다.
  2. Chrome : 설정-> 고급 설정-> 프록시 설정 열기-> 인터넷 속성으로 이동 한 다음 콘텐츠 창으로 이동하여 SSL 상태 지우기 버튼을 클릭하십시오.

이 사이트에는이 정보와 다른 옵션들도 있습니다 : https://www.thesslstore.com/blog/fix-err-ssl-protocol-error/