2011-12-16 3 views
5

nginx는 청크 요청을 잘 지원하지 않는 것 같습니다. 그러나 나는보다 명확한 (그리고 현재의) 대답을 얻으려고 노력하고있다. 클라이언트가 헤더를 설정하는 Java 클라이언트에서 서버에 SOAP 요청을합니다. Transfer-Encoding: chunked. Tomcat에서 내 응용 프로그램에 직접 연결할 때 잘 작동합니다.nginx를 통해 청크 요청을하는 방법

하지만 그들 사이에 nginx를 넣을 때, 모든 일이 깨지게됩니다.

몇 가지 세부 정보를 추가하려면 CloudFoundry로 작업하고 있습니다. 나는 Micro Cloud Foundry를 사용하여 일이 nginx가 없을 때 예상대로 작동하는지 확인합니다. 하지만 내 요구 사항은 cloudfoundry.com을 사용하는 것이므로 nginx를 우회 할 수있는 능력이 없습니다.

This question and answer은 아마도 이것이 유일한 해결책 일 것이라고 말합니다 : http://wiki.nginx.org/NginxHttpChunkinModule. 하지만 cloudfoundry.com에서 구성을 수정할 수 없기 때문에 해결 방법을 사용할 수 없습니다.

This question도 비슷하지만 실제로이 요구 사항의 반대를 다룹니다. 청크 된 요청보다는 청크 응답을 처리합니다.

이 문제를 해결하기위한 클라이언트의 변경 사항은 어떻습니까? Transfer-Encoding: chunkedContent-Length: 123을 헤더로 보낼 수 있습니까? 이 영역은 나에게 새 것이지만 Apache HttpComponents와 같은 프로젝트에서 길이 또는 청킹 중 하나를 설정 하겠지만 둘 다 설정하지는 않는 것으로 보입니다. 청킹의 요점은 요청이 시작될 때 길이를 알 필요가 없다는 것입니다. 내 고객에게 HTTP/1.0을 사용하고 청크없이 nginx와 잘 작동하도록 말할 수 있습니까? 내가 잊고있는 다른 해결 방법 아이디어가 있습니까?

답변

4

이 질문의 모든 부분에 대한 답변을 정리했습니다.

Base nginx는 청크 요청을 지원하지 않습니다 (Alexander가 확인한 것처럼!). Nginx는 NginXHttpCunkinModule (내 질문에 언급 한대로)을 사용하여 청크 요청을 지원할 수 있습니다. 이 모듈은 18 개월 전에 베타 상태를 생산 품질로 졸업했습니다. 최고 : CloudFoundry 엔지니어링 팀의 일부 구성원과 최근 meetup에서 연설했습니다. 그들은 nginx 버전에이 모듈을 추가 할 계획임을 확인합니다. 문제 해결됨. (글쎄요, 장기간에 걸쳐 완전히 해결되었지만,이시기를 예상 할 정확한시기가 없습니다.)

그러므로 단기적인 해결책도 좋을 것입니다. 찾았 어.

알렉산더에게 보내는 내 질문에 대답 : 청크 메시지로 "Content-Length"를 보낼 수 없습니다. 그것은 실제로 청크 메시지의 요점입니다 : 전체 내용을 갖기 전에 보내기 시작하기 때문에 아직 길이를 알 수 없습니다. 청크 요청을 피하기위한 그의 생각은 옳습니다. 그러나 더 실용적으로 말하면, "HTTP/1.1보다는 HTTP/1.0 사용"이라고 말할 것입니다. 이것은 청크 메시지를 보내지 않는 효과가 있습니다. 우리는이 아이디어를 테스트하기 위해 클라이언트를 임시적으로 패치 할 수있었습니다. 그것은 효과가 있었다. 그러나 우리는 공개 패치를 공개 할 계획이 없습니다. 이 상황에 대한 문제를 해결하기 위해 모든 사람들이 10 년 된 프로토콜 (및 10 년 된 지원되지 않는 클라이언트 라이브러리!)을 사용하는 것은 비생산적인 것처럼 보입니다.

대신 필요할 때 해킹 된 클라이언트를 사용할 것이고 다른 사람들이 필요성을 발견하면 이메일로 보내 드리며 HttpChunkin 및 HTTP/1.1에 대한 CloudFoundry 업데이트를 기다리게 될 것입니다.

2

Nginx는 실제로 청크 요청을 지원하지 않습니다. Content-Length 헤더가없는 경우 411 Content Length required을 반환합니다.

클라이언트 코드를 제어하고 있으므로 청크 요청을 사용하지 않고 명시 적으로 Content-Length을 지정하는 것이 유일한 선택이라고 생각합니다.

+0

전송 인코딩 : 청크 분할과 Content-Length : 123을 헤더로 보낼 수 있습니까? 일반적인가요? – mdahlman