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

时间:2011-11-23 22:49:38

标签: 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缓冲区大到足以容纳整个标头字符串”并不是一个理想的答案。

1 个答案:

答案 0 :(得分:6)

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

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

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

  • curl:----------------------------5a56a6c893f2(40)
  • Chrome 30(WebKit):----WebKitFormBoundarym0vCJKBpUYdCIWQG(38)
  • Safari 6(WebKit,与Chrome相同):----WebKitFormBoundaryFHUXvJBZwO2JKkNa(38)
  • FireFox 24:---------------------------7096603861379320641089344535(55)
  • IE 10:---------------------------7dd1961640278(40) - 与curl相同的技巧!
  • Apache HttpClient:-----------------------------1294919323195(42)

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