programing

SpringBoot - HTTP 요청 헤더 구문 분석 오류

powerit 2023. 7. 22. 10:30
반응형

SpringBoot - HTTP 요청 헤더 구문 분석 오류

나는 달리고 있습니다SpringBoot Application방금 서버 로그를 확인했는데 이런 오류가 몇 개 발생했습니다.매일 12/24시간 이후에 오류가 발생하여 무엇이 원인인지 이해할 수 없습니다.

실행 중인 Tomcat 버전8.5.11

2018-03-04 17:03:26 [http-nio-8080-exec-85] INFO  o.a.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:421)
    at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:667)
    at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)
    at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:798)
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1434)
    at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    at java.lang.Thread.run(Thread.java:748)

HTTP 대신 HTTPS 헤더를 구문 분석하기 때문에 이 문제가 발생할 수 있습니다.시도:

  1. 추가:
    logging.level.org.springframework.web: trace
    logging.level.org.apache: trace
    응용 프로그램.properties에 연결하고 Spring이 사용자에게 하는 말을 확인합니다.
  2. SSL로 암호화된 다른 리소스를 참조하는 예약된 활동이 있는지 확인합니다.참고 항목: java.lang.잘못된 인수예외: 메서드 이름에 잘못된 문자가 있습니다. HTTP 메서드 이름은 토큰이어야 합니다.

제가 이 비슷한 질문에서 답변했듯이, 실수로 HTTP 프로토콜이 아닌 HTTPS 프로토콜로 요청하는 것이 아닌지 확인하십시오.Tomcat에서 SSL을 구성하지 않고 HTTPS 요청을 보내면 이 이상한 메시지가 표시됩니다.

Spring Boot 2(2.0.1)에서 이 오류가 발생했습니다.포트 8443에서 HTTPS를 서비스하고 포트 8080 HTTP 트래픽을 포트 8443으로 리디렉션하도록 구성된 RELEASE) 응용 프로그램입니다.

마이크로소프트 Edge에서 애플리케이션은 예상대로 작동했습니다.http://localhost:8080로 리디렉션https://localhost:8443그러나 Chrome 66에서는 이것이 한 번만 작동하고 Chrome은 "localhost가 잘못된 응답을 보냈다"고 불평합니다.ERR_SSL_PROTOCOL_ERROR).

서버 로그에 다음이 표시되었습니다. DEBUG 11440 --- [nio-8080-exec-1] o.a.coyote.http11.Http11InputBuffer: Received [ <<unprintable characters>> ] INFO 11440 --- [nio-8080-exec-1] o.apache.coyote.http11.Http11Processor: Error parsing HTTP request header

Chrome이 추가한 것으로 밝혀졌습니다.localhostSpring Boot이 다시 전송했기 때문에 HSTS 목록에Strict-Transport-Security: max-age=31536000 ; includeSubDomainshttps://localhost:8443에 대한 헤더 백.따라서 기본적으로 이 문제는 클라이언트(즉, 브라우저)가 HTTP 엔드포인트에 HTTPS를 전달하려고 하기 때문에 발생했습니다.

추가.headers().httpStrictTransportSecurity().disable();<? extends WebSecurityConfigurerAdapter>.configure스택 오버플로 질문에서 언급한 대로 문제를 해결했습니다.

언급URL : https://stackoverflow.com/questions/49273847/springboot-error-parsing-http-request-header

반응형