我有一个问题HANDELING HTTP分块传输编码。
我正在使用:
- 阿帕奇。
- mod_wsgi的插件。
- Django的。
django的,只能够处理与内容长度报头字段reqular http请求,但是当涉及到处理TE(传输编码),分块或gzip的,它返回一个空的结果。
我想的方法2:
- 做一些修改django.wsgi Python文件
- 添加一些中间件Python文件在模块中使用,拦截任何分块http请求,将其转换为与内容长度报头字段requelar http请求,然后,把它传递给DJANGO,它可以很好地处理它。
任何人都可以与任何上述2个选项帮助(更多的选择当然是最欢迎)
谢谢!
这是一个推广到格雷厄姆的第一个前面回答后,我的问题:
首先,感谢您的快速反应。 正在使用的客户端是轴,这是另一家公司的系统与我们沟通的一部分。 我有WSGIChunkedRequest On
一套,我也做了一些修改,我WSGI的包装是这样的:
def application(environ, start_response):
if environ.get("mod_wsgi.input_chunked") == "1":
stream = environ["wsgi.input"]
print stream
print 'type: ', type(stream)
length = 0
for byte in stream:
length+=1
#print length
environ["CONTENT_LENGTH"] = len(stream.read(length))
django_application = get_wsgi_application()
return django_application(environ, start_response)
但它给了我(从Apache的error.log中文件中提取)这些错误:
[Sat Aug 25 17:26:07 2012] [error] <mod_wsgi.Input object at 0xb6c35390>
[Sat Aug 25 17:26:07 2012] [error] type: <type 'mod_wsgi.Input'>
[Sat Aug 25 17:26:08 2012] [error] [client xxxxxxxxxxxxx] mod_wsgi (pid=27210): Exception occurred processing WSGI script '/..../wsgi.py'.
[Sat Aug 25 17:26:08 2012] [error] [client xxxxxxxxxxxxx] Traceback (most recent call last):
[Sat Aug 25 17:26:08 2012] [error] [client xxxxxxxxxxxxx] File "/..../wsgi.py", line 57, in application
[Sat Aug 25 17:26:08 2012] [error] [client xxxxxxxxxxxxx] for byte in stream:
[Sat Aug 25 17:26:08 2012] [error] [client xxxxxxxxxxxxx] IOError: request data read error
我究竟做错了什么?!