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

周梦康
  • 8.9k

的确这个边界值可以自定义,但是很都时候都是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上传文件的时候

回复
阅读 4.1k
2 个回答
Humphry
  • 16.4k
✓ 已被采纳

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

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

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
宣传栏