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

Posted

技术标签:

【中文标题】HTTP 多部分 (POST) 请求中的边界参数是啥?【英文标题】:What is the boundary parameter in an HTTP multi-part (POST) Request?HTTP 多部分 (POST) 请求中的边界参数是什么? 【发布时间】:2011-01-19 07:10:20 【问题描述】:

我正在尝试开发一个侧边栏小工具,它可以自动检查网页以了解我的传输配额的演变。我快到了,但我需要最后一步才能让它工作:将带有正确 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。

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

【问题讨论】:

您找到解决方案了吗?如何使用 curl 发送 SOMENAME、OTHERNAME 等字段? 我遇到类似问题的经验列在[这里][1] [1]:***.com/questions/31774695/… 【参考方案1】:

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

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

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

然后澄清:

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

 Content-Type: multipart/mixed; boundary=gc0p4Jq0M2Yt08jU534c0p

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

注意事项:

    封装边界必须出现在行首,即在 CRLF(回车换行)之后 边界必须紧跟另一个 CRLF 和下一部分的标头字段,或两个 CRLF,在这种情况下,下一部分没有标头字段(因此假定为 Content-输入文本/纯文本)。 封装边界不得出现在封装内,且不得超过 70 个字符,不包括两个前导连字符。

最后但并非最不重要的一点:

最后一个正文部分之后的封装边界是一个可区分的分隔符,表示后面不会有其他正文部分。这样的分隔符与前面的分隔符相同,只是在行尾添加了两个连字符:

 --gc0p4Jq0M2Yt08jU534c0p-- 

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

【讨论】:

注意:当边界改变时,Content-Length应该改变 我认为边界是用来分隔不同部分的,不表示长度。【参考方案2】:

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

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

【讨论】:

谢谢!这帮助我更接近我的目标!还没有工作,但这澄清了;-) 注意:当边界改变时,Content-Length应该改变【参考方案3】:

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

【讨论】:

以上是关于HTTP 多部分 (POST) 请求中的边界参数是啥?的主要内容,如果未能解决你的问题,请参考以下文章

警告:第 0 行未知中的多部分/表单数据 POST 数据中缺少边界

如何使用 JMeter 设置多部分边界

提供的“HttpContent”实例无效。它没有带有“边界”参数的“多部分”内容类型标头

HTTP请求报文和响应报文

【SpringBoot】http请求注解之Post请求

Spring boot http POST @RequestParam 多参数