首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Transfer-encoding: chunked应该如何呈现?

Transfer-encoding: chunked应该如何呈现?
EN

Stack Overflow用户
提问于 2013-02-06 16:31:00
回答 3查看 2.4K关注 0票数 0

当浏览器渲染使用分块编码传输的数据时,浏览器应该渲染原始数据,而不是添加块大小和CRLF来编码数据,对吗?

以下面的代码为例:

https://gist.github.com/josiahcarlson/3250376

我的浏览器(Chrome和FF)呈现

代码语言:javascript
复制
12
this is chunk: 0

12
this is chunk: 1

12
this is chunk: 2

12
this is chunk: 3

12
this is chunk: 4

12
this is chunk: 5

12
this is chunk: 6

12
this is chunk: 7

12
this is chunk: 8

12
this is chunk: 9

0

我没想到会看到块的大小。

是否应该在浏览器中使用our呈现数据而不使用endcoding信息?

EN

回答 3

Stack Overflow用户

发布于 2013-02-06 19:15:58

HTTP 1.0客户端不需要解码分块的数据。python的BaseHTTPServer类发送的默认http版本是HTTP1.0。如果您发送的是1.1版本,浏览器将按照您的预期呈现数据。我想curl只是为了聪明,做了正确的事情,即使服务器发送了错误的协议版本。

在发送响应之前,修补代码以设置BaseHTTPServer实例的protocol_version属性。将其添加到示例的第73行。

self.protocol_version = 'HTTP/1.1‘

有关HTTP1.0和HTTP1.1之间差异的更多详细信息,可以参考此http://www8.org/w8-papers/5c-protocols/key/key.html

票数 1
EN

Stack Overflow用户

发布于 2013-02-06 16:37:43

代码显式地发送该消息。生成器创建这些块:

代码语言:javascript
复制
yield "this is chunk: %s\r\n"%i

,然后将它们写入套接字。

代码语言:javascript
复制
def write_chunk():
    tosend = '%X\r\n%s\r\n'%(len(chunk), chunk)
    self.wfile.write(tosend)

你可以发送任何你想要的东西,如果你改编的话。

因此,如果生成的块是"this is chunk: 0\r\n",那么write_chunk方法实际上会发送"18\r\nthis is chunk: 0\r\n\r\n"

"\r\n"是表示回车符、换行符的转义序列。或windows版本的换行符。在Linux上,你可以只使用\n

票数 0
EN

Stack Overflow用户

发布于 2013-02-06 16:42:45

你在头文件中指定了内容编码了吗?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14724624

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档