discipline19810128
discipline19810128

Reputation: 821

When Spring Boot starts up, it throws the "method names must be tokens" exception

When Spring Boot starts up, it throws the method names must be tokens exception

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
[email protected]

Anyone knows why it throws this exception?

Upvotes: 82

Views: 181974

Answers (6)

Panchito91
Panchito91

Reputation: 1850

This exception can occur when you try to execute an HTTPS request from a client on an endpoint that isn't HTTPS enabled. The client will encrypt request data when the server is expecting raw data.

Change https:// to http:// in your client url.

Upvotes: 145

YellowStrawHatter
YellowStrawHatter

Reputation: 938

I have encountered the same error using Spring Boot. The provided answers focused only on the error explanation and provided a way to use HTTP instead of HTTPS.

But in my case, we are already using TLS certicates. So the solution was to enable SSL by configuring the embedded Tomcat server through either the application.yml or application.properties file.

We only need to define these peroperties:

server:
  ssl:
    key-store: classpath:/path/to/keystore.p12
    key-store-password: password-to-access-keystore
    key-store-type: pkcs12
    key-alias: my-spring-boot-app
    key-password: password-for-the-private-key-if-you-have-any
    enabled: true
  port: 8443

The following documentation list all needed properties and their default values: Spring Common Application Properties

Upvotes: 1

Nikita Agarwal
Nikita Agarwal

Reputation: 36

you must have added https intead of http i also was getting same error with given below code

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

This is what i got with https enter image description here

Also Error in IDE with stack trace

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]

and This is what i got with http only enter image description here

Upvotes: 2

Dmitry V.
Dmitry V.

Reputation: 51

In my case it was when Tomcat created HTTPS request without SSL certificate installed on it. To fix it I changed schema in request to HTTP. Or you should create SSL certificate to use HTTPS.

Upvotes: 3

rwenz3l
rwenz3l

Reputation: 237

Another Case: SpringBoot and Tomcat use port 8080 or 8888 by default. I had a Jupyter Notebook running at the same time which has a token in it's url path and some random characters. Anyway: The Notebook was still trying to make requests when the jupyter notebook server was down.

If you encounter this error: Check if you have another Application running that is either spawning a webserver or talking to a webserver on such ports.

Upvotes: 8

Night White
Night White

Reputation: 41

The same problem.

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

I find a process try send package not Http request to my 8888 port, so the tomcat throw the method names must be tokens Exception.

you can:

  • change server port;

  • find the process and kill it;

Upvotes: 4

Related Questions