2012-10-09 23 views
5

HTTP 1.1 estados: "Un cliente debe incluir un campo de encabezado de host en todos los mensajes HTTP/1.1 petición"¿Puede Tomcat aceptar solicitudes de HTTP 1.1 sin un encabezado de host?

Sin embargo, las máquinas que estoy trabajando enviar este Mensaje exacta (que contiene las coordenadas), que no lo hago tener acceso a cambiar:

POST /touch HTTP/1.1 
Content-type: application/x-www-form-urlencoded 
Content-Length: <n> 

x=<int x>&y=<int y> 

Tomcat 7 responde inmediatamente con 400 Bad Request debido a la falta de un campo de encabezado de host, y la POST nunca llega a mi servlet. ¿Hay alguna manera de evitar esta respuesta de error y manejar el POST con el servlet para admitir estas máquinas más antiguas?

Respuesta

4

Como ya se ha señalado, HTTP 1.1 spec says (el mío negrita):

Un cliente debe incluir un campo de cabecera Host en todos los mensajes HTTP/1.1 petición. [...] Un proxy HTTP/1.1 DEBE garantizar que cualquier mensaje de solicitud que reenvíe contenga un campo de encabezado de host apropiado que identifique el servicio solicitado por el proxy. Todos los servidores HTTP/1.1 basados ​​en Internet DEBEN responder con un código de estado 400 (Solicitud incorrecta) a cualquier mensaje de solicitud HTTP/1.1 que carece de un campo de encabezado Host.

El cliente está utilizando el protocolo HTTP 1.1 de forma incorrecta, no se debe tratar de evitar que en el lado del servidor. Lo que puede hacer es configurar algún proxy HTTP personalizado que simplemente agregue el encabezado Host. Pero esa es una solución sucia. Alternativamente, rebaje el protocolo a 1.0.

También tenga en cuenta que incluso si de alguna manera logra hacer que Tomcat acepte tales solicitudes (lo cual está en contra de la especificación), de todos modos se encontrará con algunos problemas si algún proxy HTTP está entre los extremos.

+0

Esto es para una herramienta de prueba en el trabajo, por lo que los proxies intermedios no son un problema. Prefiero tener algún tipo de trabajo en tomcat, como un filtro o una válvula, en lugar de configurar un proxy, pero no creo que la válvula pueda interceptar la solicitud antes de que se rechace. – user1684196

Cuestiones relacionadas