HttpRequestMethodNotSupportedException

本文探讨了Spring MVC中出现的HttpRequestMethodNotSupportedException异常,详细解释了为何会出现“HEAD”请求不支持的问题,并提供了相应的解决方案。此外,还介绍了HEAD请求的作用及应用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

异常

org.springframework.web.HttpRequestMethodNotSupportedException: Request method ‘HEAD’ not supported

异常原因

项目使用的是SprngMVC,查看服务器日志,发现访问首页报了以上的异常。异常的意思是:请求方法“HEAD”不支持,为何不支持呢?查看项目源码,发现配置了:@RequestMapping(value = “”,method = RequestMethod.GET)。此方法只支持GET请求,不支持HEAD请求。

解决方法

去掉method = RequestMethod.GET即可

为何会有HEAD请求

我们在浏览器输入地址,都是GET请求,查看服务器日志,发现有许多HEAD请求,一时找不到为何有那么多HEAD请求。突然想起,项目是用的Tengine做的负载均衡,会不会是Tengine做的请求,通过查看资料,终于明白了,因为开启了Tengine的主动式后端服务器健康检查功能,Tengine会不定时发送HEAD请求,向后端发送的健康检查包。

参考文章1
参考文章2

Http 1.1 规范定义了一些方法:OPTIONS, GET, HEAD, POST, PUT, DELETE, TRACE and CONNECT.
常见的是:GET 和 POST。浏览器依靠这两个方法从web服务器发送和获取数据。

  • GET
    从web服务器获取数据。
  • POST
    操作web服务器内容,比如:增删改。

其他的方法呢?
浏览器不是唯一与web服务器通信的客户端,还有:代理服务器(proxy servers)和爬虫(web crawlers),这两种类型的客户端特别喜欢第三个http方法:HEAD。

HEAD和GET相似,不过HEAD方法只返回headers,body被丢弃。
这个主要用来校验URLs的正确性。(下面的不知如何翻译)服务器的负载 content-length头必须返回。The load on the server will most likely remain the same as the content-length header must be returned (and thus potentially calculated based on the generated response body). Only the bandwidth is saved。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值