代码之家  ›  专栏  ›  技术社区  ›  Tom Taylor

对于以GB为单位的文件大小,选择应用程序/x-www-form-urlencoded/multipart/form-data是什么?

  •  1
  • Tom Taylor  · 技术社区  · 8 年前

    我正在发送一些视频文件(大小可以是GB)作为 application/x-www-form-urlencoded HTTP POST .

    以下链接 link 建议当我们有非字母数字内容时,最好通过Multipart表单数据传输。

    1. 哪种编码方式更适合传输此类数据?

    2. 应用程序/x-www-form-urlencoded )?

    3. 对二进制数据进行编码会花费很多时间吗?

    4. 通常,编码会跳过非字母数字字符和其他字符。那么,我们可以跳过二进制数据(如视频)的编码吗?我们怎么能跳过它呢?

    1 回复  |  直到 8 年前
        1
  •  5
  •   Margaret Bloom    8 年前

    x-www-form-urlencoded 处理 表单数据集 作为字节序列(八位字节)。
    在可能的256个值中,只有66个值保留原样或仍编码为单字节值,其他值由其码位值的十六进制表示形式替换。 这通常需要三到五个字节,具体取决于编码。
    因此,平均(256-66)/256或74%的文件将被编码为占用原来空间的三到五倍。 然而,这种编码没有标头,也没有显著的开销。

    multipart/form-data 相反,它的工作原理是将数据分成几个部分,然后找到一个在所述部分中没有出现的任何长度的字符串。
    这样的字符串称为 边界 它用于界定部件的末尾,即作为八位字节流传输。
    因此,文件大部分是按原样发送的,对于足够大的数据,其大小开销可以忽略不计。

    缺点是用户代理需要找到一个合适的边界,但给定的是一个字符串的长度 k 概率只有2 在统一生成的二进制文件中查找该字符串。
    因此,用户代理可以简单地生成一个随机字符串,进行快速搜索,并利用网络传输时间来隐藏搜索的延迟。


    1. 你应该使用 多部分/表单数据 .
    2. 这取决于您使用的平台,通常,如果您无法访问请求正文,则必须重新执行编码。
    3. 对于 多部分/表单数据 编码的开销很小,通常可以忽略不计(与传输时间相比)。