对于最新的稳定版本,请使用 Spring Framework 6.2.0spring-doc.cadn.net.cn

过滤器

表单数据

浏览器只能通过 HTTP GET 或 HTTP POST 提交表单数据,但非浏览器客户端也可以 使用 HTTP PUT、PATCH 和 DELETE。Servlet API 需要ServletRequest.getParameter*()方法仅支持 HTTP POST 的表单字段访问。spring-doc.cadn.net.cn

spring-webmodule 提供FormContentFilter拦截 HTTP PUT、PATCH 和 DELETE 内容类型为application/x-www-form-urlencoded中,从 请求正文,并将ServletRequest创建表单数据 可通过ServletRequest.getParameter*()方法系列。spring-doc.cadn.net.cn

请求头转发

当请求通过代理(例如负载均衡器)时,主机、端口和 方案可能会更改,这使得创建指向正确 Host、Port 和 Scheme。spring-doc.cadn.net.cn

RFC 7239 定义了ForwardedHTTP 标头 代理可用于提供有关原始请求的信息。还有其他 非标准标头,包括X-Forwarded-Host,X-Forwarded-Port,X-Forwarded-Proto,X-Forwarded-SslX-Forwarded-Prefix.spring-doc.cadn.net.cn

ForwardedHeaderFilter是一个 Servlet 过滤器,它修改请求以便 a) 根据Forwarded标头,以及 b) 删除这些 标头以消除进一步的影响。过滤器依赖于包装请求,并且 因此,它必须优先于其他过滤器排序,例如RequestContextFilter那 应该使用修改后的请求,而不是原始请求。spring-doc.cadn.net.cn

转发的 Headers 存在安全注意事项,因为应用程序无法知道 标头是由代理按预期添加的,还是由恶意客户端添加的。这就是为什么 应将信任边界的代理配置为删除 UntrustedForwarded来自外部的标头。您还可以配置ForwardedHeaderFilterremoveOnly=true,在这种情况下,它会删除但不使用标头。spring-doc.cadn.net.cn

为了支持异步请求和错误调度,此 filter 应该映射为DispatcherType.ASYNC以及DispatcherType.ERROR. 如果使用 Spring Framework 的AbstractAnnotationConfigDispatcherServletInitializer(请参见 Servlet 配置)所有过滤器都自动注册到所有分派 类型。但是,如果通过web.xml或在 Spring Boot 中通过FilterRegistrationBean请务必包括DispatcherType.ASYNCDispatcherType.ERROR除了DispatcherType.REQUEST.spring-doc.cadn.net.cn

浅层 ETag

ShallowEtagHeaderFilterfilter 通过缓存内容来创建 “浅层” ETag 写入响应并从中计算 MD5 哈希。下次客户端发送时, 它执行相同的作,但它也会将计算的值与If-None-Matchrequest 标头,如果两者相等,则返回 304 (NOT_MODIFIED)。spring-doc.cadn.net.cn

此策略可节省网络带宽,但不节省 CPU,因为必须为每个请求计算完整响应。 状态更改 HTTP 方法和其他 HTTP 条件请求标头,例如If-MatchIf-Unmodified-Since不在此筛选器的范围内。控制器级别的其他策略 可以避免计算,并对 HTTP 条件请求提供更广泛的支持。 请参阅 HTTP 缓存spring-doc.cadn.net.cn

此过滤器具有writeWeakETag参数,该参数将过滤器配置为写入弱 ETag 类似于以下内容:W/"02a2d595e6ed9a0b24f027f2b63b134d6"(如 RFC 7232 第 2.3 节中所定义)。spring-doc.cadn.net.cn

为了支持异步请求,必须映射此过滤器 跟DispatcherType.ASYNC以便过滤器可以延迟并成功生成 ETag 添加到最后一个异步调度的末尾。如果使用 Spring Framework 的AbstractAnnotationConfigDispatcherServletInitializer(请参阅 Servlet 配置) 所有过滤器都会自动为所有 Dispatch 类型注册。但是,如果注册 通过web.xml或在 Spring Boot 中通过FilterRegistrationBean请务必包括DispatcherType.ASYNC.spring-doc.cadn.net.cn

CORS

Spring MVC 通过 控制器。但是,当与 Spring Security 一起使用时,我们建议依赖内置的CorsFilter必须在 Spring Security 的过滤器链之前订购。spring-doc.cadn.net.cn

有关更多详细信息,请参阅有关 CORSCORS 筛选器的部分。spring-doc.cadn.net.cn