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 AbstractAnnotationConfigDispatcherServletInitializer
desde 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.
GO TO FULL VERSION