【发布时间】:2010-09-27 10:37:50
【问题描述】:
最近我们转移到 spring 3.0 控制器处理如下:
@Controller
public class MyController {
@RequestMapping(method = RequestMethod.POST)
protected String onSubmit ( Form form, Errors errors) {
// handle POST
}
@RequestMapping(method = RequestMethod.GET)
protected void getForm ( Form form ) {
// handle GET
}
}
现在,由于 HEAD 请求,我们的日志中出现了很多异常。
org.springframework.web.HttpRequestMethodNotSupportedException: Request method 'HEAD' not supported
at org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter$ServletHandlerMethodResolver.resolveHandlerMethod(AnnotationMethodHandlerAdapter.java:621)
at org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.invokeHandlerMethod(AnnotationMethodHandlerAdapter.java:422)
at org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.handle(AnnotationMethodHandlerAdapter.java:415)
...
我想像 GET 请求一样支持 HEAD 请求,但当然要遵守 HTTP 参考:
HEAD 方法与 GET 相同 除了服务器不得
在响应中返回消息体。 包含的元信息 响应 HEAD 的 HTTP 标头 请求应该与 响应 GET 发送的信息 要求。这个方法可以用 用于获取有关的元信息 请求所暗示的实体 不转移实体主体 本身。这种方法经常使用 用于测试超文本链接 有效性、可访问性和最近 修改。 http://www.ietf.org/rfc/rfc2616.txt
有没有人有一个优雅的解决方案,或者是否有开箱即用的弹簧解决方案?
我在网上搜索,但没有找到任何答案。
【问题讨论】:
-
发出 HEAD 请求的原因是什么?这可能是客户端或客户端代码(Javascript)的错误配置吗?我问是因为通常 HEAD 是为了检查页面的更新(即 Cache-Control / LastModified 标头),因此浏览器可以更新是必要的。
-
PycURL 做一个请求方法 = head 做gets。通常,我发现这对于很多搜索引擎来说是很正常的,比如:oneriot.com、ask.com 等。
-
谁在乎哪个工具在发出 HEAD 请求。这是一个有效的 HTTP 请求,许多浏览器实际上都在这样做(检查书签或其他)。
-
根据下面的链接,如果给定的请求 url 不存在,spring 应该提供隐式 HEAD 和 OPTIONS,从 spring 4 开始是真的吗?还是我想念的其他东西? spring docs mvc 是链接。
标签: http spring spring-mvc controller httprequest