HTML多部分表单 - "边界"字符串的最大长度?

Bri*_*and 6 html http mime-types

在多部分(即Content-Type=multipart/form-data)形式中,HTTP服务器应该接受的边界字符串的长度是否有上限?

据我所知,相关的RFC说70个字符:

  • RFC2616(HTTP/1.1)部分"3.7媒体类型"表示Content-Type标头中允许的类型由RFC1590(媒体类型注册过程)定义.
  • RFC1590更新RFC-1521(MIME).
  • RFC1521说边界"必须不超过70个字符,不包括两个主要连字符".
  • 同样的文本也出现在RFC2046中,据称它已废弃RFC1521.

那么我可以肯定今天所有主要的HTTP/1.1浏览器都遵守这个限制吗?是否有任何浏览器(或其他HTTP客户端/库)可以打破此限制?

是否有一些其他规格或常见的经验法则我错过了说字符串将于70个字符?在Chrome(ium)中,我得到了这样的东西:----WebKitFormBoundaryLu4dNSGEhJZUgoe5显然短于70个字符.

我问这个问题是因为我的服务器是在极其受内存限制的环境中运行的,因此"malloc缓冲区大到足以容纳整个标头字符串"并不是一个理想的答案.

mjk*_*mjk 6

如您所知,RFC 2046更新了MIME规范,但将最大边界字符串的限制保持为70个字符,不包括两个前导连字符.

我认为这是一个公平的假设,所有主流浏览器(以及所有使用MIME的客户端,如邮件程序)都遵循规范,因为否则传递多部分数据确实非常危险.

可以肯定的是,我已经通过实验验证了它使用的最新版本:

  • 卷曲:----------------------------5a56a6c893f2(40)
  • Chrome 30(WebKit):( ----WebKitFormBoundarym0vCJKBpUYdCIWQG38)
  • Safari 6(WebKit,与Chrome相同):( ----WebKitFormBoundaryFHUXvJBZwO2JKkNa38)
  • FireFox 24:---------------------------7096603861379320641089344535(55)
  • IE 10:---------------------------7dd1961640278(40) - 与卷曲相同的技术!
  • Apache HttpClient:-----------------------------1294919323195(42)

因此,不仅每个主要的浏览器/客户端都符合,而且所有允许您从理论最大值为每个缓冲区的每个边界保存15个分配的字节.如果你可以轻松地打开用户代理,你可以挤出更多的性能.;-)