是啥导致“HTTP 方法名称必须是令牌”错误?

Posted

技术标签:

【中文标题】是啥导致“HTTP 方法名称必须是令牌”错误?【英文标题】:What causes "HTTP method names must be tokens" error?是什么导致“HTTP 方法名称必须是令牌”错误? 【发布时间】:2021-01-20 15:49:11 【问题描述】:

我根本无法再访问我的 Spring Web 应用程序的 url,因为它总是抛出这个错误:

2020-10-05 15:18:02.599  INFO 13060 --- [nio-8083-exec-1] 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 [0x160x030x010x020x000x010x000x010xfc0x030x030x06m0xb9$0xccs0xc9D\0xecJA0x950x810xafM(0x1b0xbf0xad0x0dy-0x97S0xe70xe8e0xe30xee]. HTTP method names must be tokens
    at org.apache.coyote.http11.Http11InputBuffer.parseRequestLine(Http11InputBuffer.java:418) ~[tomcat-embed-core-9.0.37.jar:9.0.37]
    at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:260) ~[tomcat-embed-core-9.0.37.jar:9.0.37]
    at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65) [tomcat-embed-core-9.0.37.jar:9.0.37]
    at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:868) [tomcat-embed-core-9.0.37.jar:9.0.37]
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1589) [tomcat-embed-core-9.0.37.jar:9.0.37]
    at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) [tomcat-embed-core-9.0.37.jar:9.0.37]
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) [na:1.8.0_261]
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) [na:1.8.0_261]
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) [tomcat-embed-core-9.0.37.jar:9.0.37]
    at java.lang.Thread.run(Unknown Source) [na:1.8.0_261]

我尝试清理浏览器历史记录和 cookie(使用不同的浏览器),我尝试使用 http 而不是 https 来访问它,我尝试运行几个不同的项目(过去曾经可以工作) )。我不知道还有什么办法可以解决这个错误。

可能是什么原因造成的?

控制器:

@Controller
public class ProductController 

@Autowired
private ProductService productService;

@Autowired
public ProductController(ProductService productService) 
    this.productService = productService;


@GetMapping("/products")
public ModelAndView products() 
    ModelAndView mv = new ModelAndView();

    List<Product> productList = (List<Product>) productService.getAllProducts();

    mv.addObject("activeTabProducts", true);
    mv.addObject("productList", productList);

    return mv;

【问题讨论】:

可能尝试 1.尝试更改服务器端口; 2.找到进程并杀死它; 我试过了,没有任何变化。 将url中的https改为http。 【参考方案1】:

我不知道为什么,但是当我尝试从匿名标签访问它时它起作用了

【讨论】:

【参考方案2】:

您调用的接口具有身份验证。您应该将令牌添加到您的 cookie。

【讨论】:

您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center。

以上是关于是啥导致“HTTP 方法名称必须是令牌”错误?的主要内容,如果未能解决你的问题,请参考以下文章

是啥导致 AWS SageMaker kmeans predict 方法输出 413 Request Entity Too Large 错误?

是啥导致了这个推进错误?

是啥导致错误“用户缺少权限或找不到对象:FieldName”

WIFI密码正确但总提示密码错误是啥原因?

是啥导致 cellForRowAtIndexPath 中的 outOfBounds 错误?

是啥导致发生分段错误?