mod_wsgi에서 어떤 결함이 있다고 생각합니까?
WSGI 1.0은 요청 내용의 내용 길이를 변경하는 입력 필터를 변경하는 것을 지원하지 않습니다. 따라서 기술적으로 WSGI 1.0을 사용할 때 요청 내용에 대해 Apache에서 mod_deflate를 사용할 수 없습니다. 콘텐츠 길이를 실제 크기가 아닌 다른 값으로 설정하면 mod_deflate의 작동이 멈출 수 있습니다.
압축 된 요청 내용을 처리하려면 WSGI 1.0 사양을 벗어나 비표준 코드를 사용해야합니다. 이 문제와 그것에 대해 제안 설명
http://blog.dscpl.com.au/2009/10/details-on-wsgi-10-amendmentsclarificat.html
:
나는 당신의 읽기를 제안한다.
코드를 작성하는 방법에 대한 토론을 위해이 문제를 공식 mod_wsgi mailing list에게 보내 주시면 매우 좋습니다. 그러나 파이썬 프레임 워크 중 하나를 사용하고 있지만 WSGI 1.0을 구현할 때 수행 할 수있는 작업에 제한이있을 수 있습니다.
UPDATE mod_wsgi에 목록 논의에서 1
는 원래 WSGI 응용 프로그램은 WSGI 미들웨어를 다음에 싸여되어야한다. 이것은 WSGI 어댑터가 실제로 입력에 대한 엔드 센티널로 빈 문자열을 제공하는 경우에만 작동하며 WSGI 1.0에서는 필요하지 않습니다. 이것은 모든 것을 메모리에 읽어 들이기 때문에 작은 업로드에만 사용되어야합니다. 큰 압축 된 업로드가 필요한 경우 축적 된 데이터를 대신 파일에 기록해야합니다.
class Wrapper(object):
def __init__(self, application):
self.__application = application
def __call__(self, environ, start_response):
if environ.get('HTTP_CONTENT_ENCODING', '') == 'gzip':
buffer = cStringIO.StringIO()
input = environ['wsgi.input']
blksize = 8192
length = 0
data = input.read(blksize)
buffer.write(data)
length += len(data)
while data:
data = input.read(blksize)
buffer.write(data)
length += len(data)
buffer = cStringIO.StringIO(buffer.getvalue())
environ['wsgi.input'] = buffer
environ['CONTENT_LENGTH'] = length
return self.__application(environ, start_response)
application = Wrapper(original_wsgi_application_callable)
는 결함에 관해서는, 우리가 실제로 이전에 여기에이 논의 : http://code.djangoproject.com/ticket/10819#comment:1 난 그냥 내용을 설정해야한다는 것을 의미하는 당신의 코멘트를했다 -length는 압축되지 않은 메시지 크기입니다. 그 일을 지금까지 잘 작동했습니다 ... 어느 쪽이든, 나는 mod_wsgi 목록에 물었다. 당신의 도움을 주셔서 감사합니다. – UsAaR33
mod_wsgi 목록에 대한 토론은 'http://groups.google.com/group/modwsgi/browse_frm/thread/54eba8ddff1a8eec'에 나와 있습니다. –