当浏览器渲染使用分块编码传输的数据时,浏览器应该渲染原始数据,而不是添加块大小和CRLF来编码数据,对吗?
以下面的代码为例:
https://gist.github.com/josiahcarlson/3250376
我的浏览器(Chrome和FF)呈现
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信息?
发布于 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
发布于 2013-02-06 16:37:43
代码显式地发送该消息。生成器创建这些块:
yield "this is chunk: %s\r\n"%i,然后将它们写入套接字。
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。
发布于 2013-02-06 16:42:45
你在头文件中指定了内容编码了吗?
https://stackoverflow.com/questions/14724624
复制相似问题