- 主题:问一个http解析的问题
Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryxxxxyz
----WebKitFormBoundaryxxxxyz
Content-Disposition: form-data; name="Filedata"; filename="/C:/Users/xxxxx/Desktop/sample.png"
Content-Type: image/png
(data)
----WebKitFormBoundaryxxxxyz
没弄过webserver没写过http应用,看到这个问题有点没搞明白。如这种http数据。webserver在收到后,如何提取(data)的内容?
boundary是分割线,但是(data)部分是二进制的图片(或者其他的二进制格式)。那么server在提取data的时候,如何在二进制数据中找boundary?
每次读256个字节,然后在这里面查找boundary?或者把body都读到一个大buffer中,然后找bounday?
感觉这种查找很笨啊。不过我也没想出来什么正规方法。哪位做过或者研究过内部实现的,给介绍一下?正规通常的办法是怎么弄的?
--
修改:chunhui FROM 124.202.206.*
FROM 124.202.206.*
这个不是一般都是由程序库解决了吗?
原理是用这个 bondary.
【 在 chunhui 的大作中提到: 】
: Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryxxxxyz
: ----WebKitFormBoundaryxxxxyz
: Content-Disposition: form-data; name="Filedata"; filename="/C:/Users/xxxxx/Desktop/sample.png"
: ...................
--
FROM 110.81.0.*
我就是问库或者什么其他框架什么自己实现,它具体怎么作的。有没有人研究过。
【 在 hgoldfish 的大作中提到: 】
: 这个不是一般都是由程序库解决了吗?
: 原理是用这个 bondary.
--
FROM 124.202.206.*
就是读入数据的时候不断检测是不是读到 boundary,读到了就切分出一块出来。
python 的标准库里面有个邮件的处理,里面应该有这个 multipart 的处理。
【 在 chunhui 的大作中提到: 】
: 我就是问库或者什么其他框架什么自己实现,它具体怎么作的。有没有人研究过。
--
FROM 110.81.0.*
很久很久以前用python写过一个处理过邮件的小程序。不过没看过它怎么实现的。我啊还以为会有更好的办法。
【 在 hgoldfish 的大作中提到: 】
: 就是读入数据的时候不断检测是不是读到 boundary,读到了就切分出一块出来。
: python 的标准库里面有个邮件的处理,里面应该有这个 multipart 的处理。
--
FROM 124.202.206.*
没啥好办法,协议设计如此
body啥时候完你也不知道,只能字节流里边读边找,一次读256也太小了,很可能找不到boundry或者找到半个,读buffer至少比一个frame大吧,上限不用超过tcp window
【 在 chunhui 的大作中提到: 】
: Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryxxxxyz
: ----WebKitFormBoundaryxxxxyz
: Content-Disposition: form-data; name="Filedata"; filename="/C:/Users/xxxxx/Desktop/sample.png"
: ...................
--
FROM 210.82.72.*
256或者固定大小确实有缺陷,会读一半。然后还要处理剩下的一半。。。
除非按你说的分配一个肯定比frame大的buff。是否现在的webserver,都是按照这种方式来实现的?
还有一个办法就是逐个字节读取,然后判断。这种可以不用分配一个大buffer。不过实现起来也有点复杂。
【 在 anetwork 的大作中提到: 】
: 没啥好办法,协议设计如此
: body啥时候完你也不知道,只能字节流里边读边找,一次读256也太小了,很可能找不到boundry或者找到半个,读buffer至少比一个frame大吧,上限不用超过tcp window
--
FROM 124.202.206.*
HTTP是以行为基本数据元素的协议,也就是它的最小分析单位是一行数据。
说过不是行数据,那就没有解析的必要,继续读就好了,直到行尾标志符号出现。
【 在 chunhui 的大作中提到: 】
: Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryxxxxyz
: ----WebKitFormBoundaryxxxxyz
: Content-Disposition: form-data; name="Filedata"; filename="/C:/Users/xxxxx/Desktop/sample.png"
: ...................
--
FROM 119.251.17.*