首页 > 为什么大多数文件上传时的边界符是 AaB03x 是什么规范吗

为什么大多数文件上传时的边界符是 AaB03x 是什么规范吗

的确这个边界值可以自定义,但是很都时候都是AaB03x,是有什么典故么?

POST /path/to/script.php HTTP/1.1
Host: example.com
Content-type: multipart/form-data, boundary=AaB03x
Content-Length: $requestlen

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

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

$field2
--AaB03x
content-disposition: form-data; name="userfile"; filename="$filename"
Content-Type: $mimetype
Content-Transfer-Encoding: binary

$binarydata
--AaB03x--

我们在sf上传文件的时候


这个应该是表达一种示例吧。按意义来说,边界分隔符要用来分界,所以最重要的性质是要与内容区分开来。也就是说,要避免使用在参数内容中出现的值来做边界分隔符。在浏览器中,一般都采用相对比较长的随机串来做分隔符。而像 AaB03x 这样长度又短,又唯一的分隔符是非常不推荐使用的。


RFC 2046里的第五章"5. Composite Media Type Values"详细规范了用于声明边界的字符串 boundary delimiter 的语法,摘几个应当知道的规则:

  1. 如果不被""包裹,boundary delimiter 不允许出现:
    Content-Type: multipart/mixed; boundary=gc0pJq0M:08jU534c0p应当改为Content-Type: multipart/mixed; boundary="gc0pJq0M:08jU534c0p"

  2. boundary delimiter 不应当出现在包裹内容中

  3. boundary delimiter 不应当比70个字符更长(不包括起始的--

所以如@有明 所说,这个boundary delimiter应当随机生成,并不出应现在文件内容中。


说来好笑,这个东西为何在谷歌中能搜到一大把呢,因为它曾经出现在W3C HTML4规范的样例里……

Content-Type: multipart/form-data; boundary=AaB03x

W3C的样例应该加一句“技术动作请勿模仿”2333

【热门文章】
【热门文章】