Los navegadores solo pueden enviar datos de formulario utilizando el método HTTP GET o el método HTTP POST, pero los clientes que no utilizan el navegador también pueden utilizar los métodos HTTP PUT, PATCH y DELETE. La API de Servlet requiere los métodos ServletRequest.getParameter*() para admitir el acceso a los campos del formulario solo para el método HTTP POST.

El módulo spring-web proporciona un FormContentFilter para interceptar solicitudes de métodos HTTP PUT, PATCH y DELETE con tipo de contenido application/x-www-form-urlencoded, leyendo los datos del formulario del cuerpo de la solicitud y empaquetando ServletRequest para que esos datos del formulario estén disponibles a través de la familia de métodos ServletRequest.getParameter*().

Encabezados transmitidos

A medida que la solicitud pasa a través de servidores proxy (como un equilibrador de carga), el host, el puerto y el esquema pueden cambiar, lo que dificulta la creación de enlaces que apunten al host, el puerto y el esquema correctos desde la perspectiva del cliente.

La especificación RFC 7239 define el encabezado HTTP Forwarded que Los servidores proxy se pueden utilizar para proporcionar información sobre la solicitud original. Hay otros encabezados no estándar, incluidos X-Forwarded-Host, X-Forwarded-Port, X-Forwarded-Proto, X-Forwarded-Ssl y Prefijo-X-Prefix.

ForwardedHeaderFilter es un filtro de servlet que modifica la solicitud para a) cambiar el host, el puerto y el esquema según los encabezados Forwarded y b) eliminar esos encabezados para excluir su influencia adicional. El filtro funciona en función del ajuste de solicitudes y, por lo tanto, debe solicitarse antes que otros filtros, como RequestContextFilter, que debe funcionar en la solicitud modificada en lugar de en la solicitud original.

Existen precauciones para los encabezados que se pasan porque la aplicación no tiene forma de saber si los encabezados fueron agregados por el proxy según lo previsto o por un cliente malicioso. Esta es la razón por la que el proxy en el límite de confianza debe configurarse para eliminar los encabezados Forwarded que no son de confianza y que provienen del exterior. También puede configurar ForwardedHeaderFilter con removeOnly=true, en cuyo caso eliminará pero no utilizará los encabezados.

Para brindar soporte para solicitudes asincrónicas y distribución de errores, este filtro debe asignarse a DispatcherType.ASYNC así como a DispatcherType.ERROR. Cuando se utiliza AbstractAnnotationConfigDispatcherServletInitializer de Spring Framework, todos los filtros se registran automáticamente para cualquier tipo de envío. Sin embargo, al registrar un filtro a través de web.xml o en Spring Boot a través de FilterRegistrationBean, asegúrese de habilitar DispatcherType.ASYNC y DispatcherType.ERROR además de DispatcherType.REQUEST.

ETag de superficie

El ShallowEtagHeaderFilter crea una ETag "superficial" almacenando en caché el contenido escrito en la respuesta y calculando un hash MD5 a partir de ella. La próxima vez que el cliente lo envía, el filtro hace lo mismo, pero compara el valor calculado con el encabezado de solicitud If-None-Match y, si son iguales, devuelve 304 (NOT_MODIFIED).

Esta estrategia ahorra ancho de banda de la red, pero no recursos del procesador, ya que se debe calcular la respuesta completa para cada solicitud. Otras estrategias a nivel de controlador descritas anteriormente evitan el cálculo.

Este filtro tiene un parámetro writeWeakETag que configura el filtro para escribir ETags débiles similares a las siguientes: W/"02a2d595e6ed9a0b24f027f2b63b134d6" (como se define en RFC 7232 Sección 2.3).

Para admitir solicitudes asincrónicas, este filtro debe asignarse a DispatcherType.ASYNC para que el filtro pueda diferir el procesamiento y generar correctamente la ETag hasta el final del último envío asincrónico. Cuando se utiliza AbstractAnnotationConfigDispatcherServletInitializerdesde Spring Framework, todos los filtros se registran automáticamente para todos los tipos de envío. Sin embargo, si registra un filtro a través de web.xml o en Spring Boot a través de FilterRegistrationBean, asegúrese de incluir DispatcherType.ASYNC.

CORS

Spring MVC proporciona soporte de configuración CORS detallado a través de anotaciones para controladores. Sin embargo, cuando se utiliza con Spring Security, recomendamos confiar en el CorsFilter integrado, que debe colocarse al frente de la cadena de filtros de Spring Security.

Consulte las secciones sobre CORS y el filtro CORS para obtener más información.