programing

Spring Boot이 시작되면 "메소드 이름은 토큰이어야 합니다" 예외가 발생합니다.

bestprogram 2023. 7. 26. 22:14

Spring Boot이 시작되면 "메소드 이름은 토큰이어야 합니다" 예외가 발생합니다.

Spring Boot이 시작되면 Spring Boot은 다음을 던집니다.method names must be tokens예외.

2016-08-11 16:53:54.499  INFO 14212 --- [0.1-8888-exec-1] o.apache.coyote.http11.Http11Processor   : 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.Http11InputBuffer.parseRequestLine(Http11InputBuffer.java:462) ~[tomcat-embed-core-8.5.4.jar!/:8.5.4]
        at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:994) ~[tomcat-embed-core-8.5.4.jar!/:8.5.4]
        at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66) [tomcat-embed-core-8.5.4.jar!/:8.5.4]
        at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:785) [tomcat-embed-core-8.5.4.jar!/:8.5.4]
        at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1425) [tomcat-embed-core-8.5.4.jar!/:8.5.4]
        at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) [tomcat-embed-core-8.5.4.jar!/:8.5.4]
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) [na:1.8.0_72]
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) [na:1.8.0_72]
        at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) [tomcat-embed-core-8.5.4.jar!/:8.5.4]
        at java.lang.Thread.run(Thread.java:745) [na:1.8.0_72]

2016-08-11 16:53:58.885  INFO 14212 --- [0.1-8888-exec-2] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring FrameworkServlet 'dispatcherServlet'
2016-08-11 16:53:58.888  INFO 14212 --- [0.1-8888-exec-2] o.s.web.servlet.DispatcherServlet        : FrameworkServlet 'dispatcherServlet': initialization started
2016-08-11 16:53:58.922  INFO 14212 --- [0.1-8888-exec-2] o.s.web.servlet.DispatcherServlet        : FrameworkServlet 'dispatcherServlet': initialization completed in 30 ms
11111111-chinadfadf-xxxxxxxx@121.com

왜 이런 예외를 두는지 아는 사람?

이 예외는 https가 활성화되지 않은 엔드포인트의 클라이언트에서 https 요청을 실행하려고 할 때 발생할 수 있습니다.서버가 원시 데이터를 예상할 때 클라이언트는 요청 데이터를 암호화합니다.

클라이언트 URL에서 https://를 http://로 변경합니다.

다른 경우: SpringBoot 및 Tomcat은 기본적으로 포트 8080 또는 8888을 사용합니다.저는 주피터 노트북을 동시에 실행했는데, 주피터 노트북의 URL 경로에 토큰과 몇 가지 임의의 문자가 있습니다.어쨌든:주피터 노트북 서버가 다운되었을 때 노트북이 여전히 요청을 시도하고 있었습니다.

이 오류가 발생하는 경우:웹 서버를 생성하거나 해당 포트에서 웹 서버와 통신하는 다른 응용프로그램이 실행 중인지 확인합니다.

같은 문제입니다.

cmd -> netstat -ano then find the port your have used(e.g 8888)

나는 내 8888 포트에 Http 요청이 아닌 패키지를 보내려고 시도하는 프로세스를 발견했다, 그래서 톰캣은.method names must be tokens예외.

할 수 있는 일:

  • 서버 포트 변경;

  • 과정을 찾아서 죽입니다.

제 경우에는 Tomcat이 SSL 인증서를 설치하지 않고 HTTPS 요청을 만들 때였습니다.수정하기 위해 HTTP로 스키마를 변경했습니다.또는 HTTPS를 사용하려면 SSL 인증서를 생성해야 합니다.

당신은 http 대신 https를 추가했을 것입니다. 또한 아래 주어진 코드로 동일한 오류를 받고 있었습니다.

@RestController
public class MyController {
    @GetMapping("/myobject")
    public MyObject getMyObject() {
        return new MyObject("John Doe", true, 42);
    }
}

이것이 제가 https로 얻은 것입니다.

스택 추적이 있는 IDE에서도 오류가 발생했습니다.

2023-03-22T03:32:56.767+05:30  INFO 21684 --- [nio-8080-exec-2] o.apache.coyote.http11.Http11Processor   : Error parsing HTTP request header
 Note: further occurrences of HTTP request parsing errors will be logged at DEBUG level.

java.lang.IllegalArgumentException: Invalid character found in method name [0x160x030x010x000xf70x010x000x000xf30x030x030x950xa2*tU0x050x1a0xe20xf5]0x1c0x8f0x070x160x0b9q10xa9d0x800xc50xdau0xfd0x8d*0xe00xec0xe80xd3C ]. HTTP method names must be tokens
    at org.apache.coyote.http11.Http11InputBuffer.parseRequestLine(Http11InputBuffer.java:419) ~[tomcat-embed-core-10.1.5.jar:10.1.5]
    at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:272) ~[tomcat-embed-core-10.1.5.jar:10.1.5]
    at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65) ~[tomcat-embed-core-10.1.5.jar:10.1.5]
    at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:859) ~[tomcat-embed-core-10.1.5.jar:10.1.5]
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1734) ~[tomcat-embed-core-10.1.5.jar:10.1.5]
    at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52) ~[tomcat-embed-core-10.1.5.jar:10.1.5]
    at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191) ~[tomcat-embed-core-10.1.5.jar:10.1.5]
    at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) ~[tomcat-embed-core-10.1.5.jar:10.1.5]
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) ~[tomcat-embed-core-10.1.5.jar:10.1.5]
    at java.base/java.lang.Thread.run(Thread.java:1589) ~[na:na]

그리고 이것은 제가 http로만 얻은 것입니다.

언급URL : https://stackoverflow.com/questions/38891866/when-spring-boot-starts-up-it-throws-the-method-names-must-be-tokens-exceptio