【问题标题】:HTML multipart form - maximum length of "boundary" string?HTML 多部分表单 - “边界”字符串的最大长度?
【发布时间】:2011-11-23 22:49:38
【问题描述】:

在多部分(即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 一个足够大的缓冲区以容纳整个标头字符串”并不是一个理想的答案。

【问题讨论】:

  • 你要求一个上限。当然有可能你没有得到完整的上限而是更少(与 Chrome 边界有关)。
  • 如果你使用AJAX直接处理你的PHP文件中的数据应该没有问题
  • “保存整个标题字符串”?如果只需要边界,为什么要使用整个标题?
  • 为什么不分配实际输入所需的内存?使用 70 字节的上限并拒绝较大的边界为格式错误。
  • @RobertSiemer - 作为硬件成本下降的一个具体例子,这个问题最初是在 Raspberry Pi Rev A 以 35 美元的价格上市时提出的,你不能构建一个低数量的(几千?)Linux 板很多 比那便宜。 Pi 项目只是因为量大而成功。今天,Pi Zero 可以将我们需要的所有功能提高 10 倍,价格为 5 美元。超低功耗(微安待机电流)应用或大容量的东西将是我今天做这样一个项目的唯一原因,无论如何都是专业的。

标签: html http mime-types


【解决方案1】:

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

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

可以肯定的是,我已经使用以下最新版本为您进行了实验验证:

  • 卷曲:----------------------------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 个分配的字节。如果您可以轻松地打开用户代理,您可以挤出更多的性能。 ;-)

【讨论】:

  • 开启用户代理?你是认真的吗?
猜你喜欢
  • 1970-01-01
  • 2013-05-25
  • 1970-01-01
  • 1970-01-01
  • 2010-12-16
  • 2016-11-23
  • 1970-01-01
  • 1970-01-01
  • 2022-09-28
相关资源
最近更新 更多