HTTP多部分(POST)请求中的边界参数是什么?

时间:2010-02-21 07:42:17

标签: http xmlhttprequest mime-types multipartform-data

我正在尝试开发一个侧边栏小工具,它可以自动检查网页以确保我的转移配额的演变过程。我差不多了,但还有最后一步我需要让它工作:将带有正确POST数据的HttpRequest发送到php页面。使用firefox插件,这里是标题的“Content-Type”:

Content-Type=multipart/form-data; boundary=---------------------------99614912995

参数“boundary”似乎是随机的,POSTDATA是这样的:

POSTDATA =-----------------------------99614912995
Content-Disposition: form-data; name="SOMENAME"

Formulaire de Quota
-----------------------------99614912995
Content-Disposition: form-data; name="OTHERNAME"

SOMEDATA
-----------------------------99614912995--

我不明白如何使用神秘的“边界”参数正确模拟POSTDATA。

有人知道如何解决这个问题吗?

3 个答案:

答案 0 :(得分:75)

引用RFC 1341, section 7.2.1,我认为是boundary标题的Content-Type参数(对于MIME)的相关位:

  

“multipart”的所有子类型都有一个共同的语法...

     

多部分实体的Content-Type字段需要一个参数“boundary”,用于指定封装边界。封装边界定义为一条完全由两个连字符(“ - ”,十进制代码45)组成的行,后跟来自Content-Type标题字段的边界参数值。

然后澄清:

  

因此,典型的multipart Content-Type标头字段可能如下所示:

 Content-Type: multipart/mixed; boundary=gc0p4Jq0M2Yt08jU534c0p
  

这表明该实体由几个部分组成,每个部分本身都具有与RFC 822消息在语法上相同的结构,除了标题区域可能完全为空,并且每个部分都以行开头        --gc0p4Jq0M2Yt08jU534c0p

注意事项:

  1. 封装边界必须出现在一行的开头,即遵循CRLF(回车换行)
  2. 边界必须紧跟另一个CRLF和下一部分的标题字段,或者两个CRLF,在这种情况下,下一部分没有标题字段(因此假定它是Content-输入text / plain)。
  3. 封装边界不得出现在封装内,且不得超过70个字符,不包括两个前导连字符。
  4. 最后但并非最不重要:

      

    最后一个身体部位后面的封装边界是一个区别分隔符,表示不会跟随其他身体部位。这样的分隔符与先前的分隔符相同,在行尾添加了两个连字符:

     --gc0p4Jq0M2Yt08jU534c0p-- 
    

    我希望将来可以帮助其他人,因为我必须漫游一段时间才能全面了解(请确保阅读必要的RFC以获得最深入的了解)。

答案 1 :(得分:38)

边界参数设置为多个连字符加上最后的随机字符串,但您可以将其设置为任何内容。问题是,如果边界字符串出现在请求数据中,它将被视为边界。

有关一些提示,以及发送multipart / form-data的示例函数,请参阅我对this question的回答。修改该函数以便为要发送的每个部分使用循环都不会太困难。

答案 2 :(得分:6)

multipart / form-data的实际规范在RFC 7578。边界在Section 4.1中定义。