2012-10-09 5 views
5

HTTP 1.1 상태 : 이Tomcat이 호스트 헤더없이 HTTP 1.1 요청을 수락 할 수 있습니까?

"클라이언트의 모든 HTTP/1.1 요구 메시지에 Host 헤더 필드를 포함해야한다"는 그러나, 내가 작업하고있는 기계는 내가하지 않습니다이 정확한 POST를 (좌표를 포함), 보내

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

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

톰캣 7 즉시 인해 호스트 헤더 필드의 부족으로 400 Bad Request로 응답하고, POST 결코 내 서블릿에 도달하지 : 변경 액세스 할 수 있습니다. 이 오류 응답을 피할 수 있고 서블릿을 사용하여 POST를 처리하여 이러한 오래된 시스템을 지원할 수있는 방법이 있습니까?

답변

4

이미 언급 한 바와 같이, HTTP 1.1 spec says (굵은 광산) :

클라이언트 모든 HTTP/1.1 요청 메시지에서 호스트 헤더 필드를 포함해야한다. [...] HTTP/1.1 프락시는 그것이 전달하는 모든 요청 메시지가 프락시가 요청한 서비스를 식별하는 적절한 Host 헤더 필드를 포함하고 있는지 확인해야한다 (MUST). 모든 인터넷 기반 HTTP/1.1 서버 은 호스트 헤더 필드가없는 HTTP/1.1 요청 메시지에 400 (잘못된 요청) 상태 코드로 응답해야합니다.

클라이언트가 HTTP 1.1 프로토콜을 잘못 사용하고 있으므로 서버 측에서이를 해결하지 마십시오. 당신이 할 수있는 일은 단지 Host 헤더를 추가 할 사용자 정의 HTTP 프록시를 설치하는 것입니다. 하지만 그것은 더러운 해결 방법입니다. 또는 프로토콜을 1.0으로 다운 그레이드하십시오.

Tomcat이 그런 요청을 받아들이도록 관리하더라도 (사양에 위배되는), HTTP 프록시가 끝나면 여전히 문제가 발생합니다.

+0

이 도구는 직장에서 사용하는 도구이므로 중간 프록시는 문제가되지 않습니다. 차라리 필터 나 밸브 같은 바람둥이를 프록시 대신 설치하는 것이 좋지만, 밸브가 거부되기 전에 밸브가 요청을 가로 챌 수 있다고는 생각하지 않습니다. – user1684196

관련 문제