2008-11-12 3 views
5

청크 분할 된 인코딩 된 데이터를 웹 서버에 게시하는 j2me 클라이언트가 있습니다. 파이썬으로 데이터를 처리하고 싶습니다. 스크립트는 CGI 스크립트로 실행되지만 분명히 아파치는 청크 인코딩 된 게시물 요청을 CGI 스크립트로 거부합니다. 내가 mod_python을 볼 수있는 한, WSGI와 FastCGI는 아무 것도 아니다.파이썬 (또는 일반 CGI, 아파치에서 청크로 인코딩 된 HTTP POST 요청 처리)

저는 파이썬 스크립트가 이러한 종류의 입력을 처리하는 방법이 있는지 알고 싶습니다. 어떤 제안이든 공개적으로 열려 있습니다 (예 : apache2의 confguration 설정, 청크 조립, 독립 실행 형 파이썬 서버, 같은 일을 할 것입니다.). 나는 꽤 많이 인터넷을 검색했는데 사용할 수있는 것을 찾지 못했습니다. 아주 이상합니다.

나는 서버 측에서 자바를 의지하는 것이 해결책이 될 것이라는 것을 알고 있지만, 이것은 아파치 + 파이썬으로는 해결 될 수 없다고 상상할 수 없다.

+0

설정으로 문제를 해결해 드리겠습니다. 아파치 2 (.2)에서 설정하는 방법과 아이디어가 있다면 알려 주시기 바랍니다. –

+0

사소한 구성 변경으로 실제로이 작업을 수행 할 수 있습니다.자세한 내용은 내 대답을 참조하십시오. –

답변

1

구성 문제 일 수 있습니까? Django는 mod_python, WSGI 및 FastCGI에 의해 Apache와 접할 수 있으며 파일 업로드를 허용 할 수 있습니다.

2

아파치 2.2 mod_cgi은 나에게 잘 작동하며, 아파치는 CGI 애플리케이션에 전달 될 때 투명하게 요청을 풀어 낸다.

WSGI는 현재 청크 분할 요청을 허용하지 않으며 mod_wsgi는 실제로 411 응답으로 차단합니다. WSGI 2.0의 도면 보드에 있습니다. 그러나 요청을 청크하는 것을 찾은 것을 축하합니다. 전에 한 번도 본적이 없습니다!

6

1 년 전 J2ME 클라이언트가 Python/Ruby 백엔드와 이야기 할 때 똑같은 문제가있었습니다. 이 필요하지 않은 유일한 해결책은 상대적으로 알려지지 않은 mod_proxy 기능을 사용하는 것이 었습니다.

Mod_proxy는 들어오는 (청크 분할 된) 요청을 버퍼링 한 다음이를 Content-Length 헤더가있는 단일 요청으로 다시 작성하여 프록시 백엔드로 전달합니다. 깔끔한 속임수는 요청을 동일한 Apache 서버로 다시 전달하는 작은 프록시 구성을 만들 수 있다는 것입니다. 즉, 포트 80에서 들어오는 청크 요청을 가져 와서 "dechunk"한 다음 포트 81에서 비 HTTP 1.1 호환 서버로 전달하십시오.

1 년 동안이 구성을 1 년 넘게 사용하지 않았습니다. 문제. 그것은이 같은 작은 선물 같습니다

ProxyRequests Off 

<Proxy http://example.com:81> 
    Order deny,allow 
    Allow from all 
</Proxy> 

<VirtualHost *:80> 
    SetEnv proxy-sendcl 1 
    ProxyPass/http://example.com:81/ 
    ProxyPassReverse/http://example.com:81/ 
    ProxyPreserveHost On 
    ProxyVia Full 

    <Directory proxy:*> 
    Order deny,allow 
    Allow from all 
    </Directory> 

</VirtualHost> 

Listen 81 

<VirtualHost *:81> 
    ServerName example.com 
    # Your Python application configuration goes here 
</VirtualHost> 

나는 또한 문제의 전체 작성자를 가지고와 내 솔루션은 on my blog을 설명.

+0

+1 nice find! 나는 mod_proxy가 이것을 할 수 있음을 깨닫지 못했다. –

+0

우분투 8.04/apache 2.2.8에서 동일한 설정을 사용했지만 프록시 로그에서이 오류가 발생합니다. [오류] 프록시 : 청크 분할 전송이 지원되지 않습니다. – sharjeel

+0

블로그 링크가 끊어졌습니다. – bubakazouba

2

mod_python으로 원하는 것을 할 수 없습니다. 버전 3.0을 사용하는 경우 mod_wsgi를 사용하여이 작업을 수행 할 수 있습니다. 그러나 WSGI는 청크 된 요청 내용을 효과적으로 금지하므로 WSGI 1.0 사양을 벗어나야합니다.

WSGIChunkedRequest를 http://code.google.com/p/modwsgi/wiki/ChangesInVersion0300에서 검색하십시오.