【发布时间】:2019-12-16 02:39:41
【问题描述】:
起初,我以为http流实际上是实现http块。
所以我做了一个测试来学习。
这是一个 Django 视图
def test_stream(request):
return StreamingHttpResponse(func)
func 返回可迭代 这是使用 curl 访问视图的输出
curl -vv -raw http://172.25.44.238:8004/api/v1/admin/restart_all_agent?cluster_id='dd5aef9cbe7311e99585f000ac192cee' -i
Warning: Invalid character is found in given range. A specified range MUST
Warning: have only digits in 'start'-'stop'. The server's response to this
Warning: request is uncertain.
* About to connect() to 172.25.44.238 port 8004 (#0)
* Trying 172.25.44.238...
* Connected to 172.25.44.238 (172.25.44.238) port 8004 (#0)
> GET /api/v1/admin/restart_all_agent?cluster_id=dd5aef9cbe7311e99585f000ac192cee HTTP/1.1
> Range: bytes=aw
> User-Agent: curl/7.29.0
> Host: 172.25.44.238:8004
> Accept: */*
>
< HTTP/1.1 200 OK
HTTP/1.1 200 OK
< Content-Type: text/html; charset=utf-8
Content-Type: text/html; charset=utf-8
< X-Frame-Options: SAMEORIGIN
X-Frame-Options: SAMEORIGIN
* no chunk, no close, no size. Assume close to signal end
<
some http response body.
* Closing connection 0
从输出中您可以看到没有分块的标头。看来Http流和chunk没有关系。
问题来了
- http 流是通过http chunk 实现的吗?
- 如何在 django 中返回分块响应?
【问题讨论】:
-
func() 是否返回一个可迭代对象?
-
不正确的引用,将第一个撇号移到http://的开头
-
实现实际上是由你的wsgi服务器完成的,你用什么来测试这个(如果是mod_wsgi,是哪个版本)? func() 应该是
yield. -
@OlegRusskin 是的,函数返回一个可迭代对象
-
@dirkgroten 是的。 func 返回可迭代,我正在使用 uwsgi 2.0.18 运行 django。
标签: django http curl http-streaming http-chunked