起初,我认为http流实际上是通过http分块实现的。
所以我进行了一项测试来学习。
这里是一个Django视图:
def test_stream(request):
return StreamingHttpResponse(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流与分块无关。
那么问题来了
- http流是由http块实现的吗?
- 如何在django中返回分块响应?
yield
。 - dirkgroten-raw
应该改为--raw
(两个破折号)。-raw
是-r
(范围),带有无效范围(aw
),在发送请求之前curl
也会发出警告。 - axiac