使用HTTP发送文件数据的BOUNDARY?

时间:2010-09-02 06:44:19

标签: javascript ajax http

我在网上阅读了一些使用HTTP /(Ajax)发送文件的文章。在阅读时我发现需要为文件设置BOUNDARY等内容。

我不明白这是什么?为什么?有人可以帮我理解这一点。

2 个答案:

答案 0 :(得分:1)

在具有enctype="multipart/form-dat a的多部分表单中,客户端使用边界字符串,该字符串将输入字段与上载的文件分开,并在不同文件之间分隔。这是任何表单提交的数据中都不存在的字符串,包括文件数据。边界有助于服务器正确地解析数据以将输入字段与文件数据分开,因为所有数据都是在单个请求中发送的。

来自rfc1867 section 3.3

选择在任何数据中都不会出现的边界。 (这种选择有时是概率性的。)

来自同一RFC的示例:

假设服务器提供以下HTML:

 <FORM ACTION="http://server.dom/cgi/handle"
       ENCTYPE="multipart/form-data"
       METHOD=POST>
 What is your name? <INPUT TYPE=TEXT NAME=submitter>
 What files are you sending? <INPUT TYPE=FILE NAME=pics>
 </FORM>

并且用户在名称字段中键入“Joe Blow”,并选择文本 文件“file1.txt”代表“你发送什么文件?”的答案。 客户端可能会发回以下数据:

    Content-type: multipart/form-data, boundary=AaB03x

    --AaB03x
    content-disposition: form-data; name="field1"

    Joe Blow
    --AaB03x
    content-disposition: form-data; name="pics"; filename="file1.txt"
    Content-Type: text/plain

     ... contents of file1.txt ...
    --AaB03x--

答案 1 :(得分:0)

HTTP消息只有一个主体,并且只能有一个内容类型。这就是为什么multipart messages是零件集合的原因。并且这些部分由边界分开。请参阅this answer for a schematic example of how a multipart message