我正在发送一些视频文件(大小甚至可以是GB)作为application/x-www-form-urlencoded超过HTTP POST
下面的链接link表明,当我们有非字母数字内容时,最好通过多部分表单数据传输它。
哪种编码方式更适合传输此类数据?
另外,如何找到编码数据的长度(使用application/x-www-form-urlencoded编码的数据)?
对二进制数据进行编码会花费很多时间吗?
通常,编码会跳过非字母数字字符和其他字符。那么,我们可以跳过二进制数据(如视频)的编码吗?我们怎么能跳过呢?

最佳答案

x-www-form-urlencoded将表单数据集中的项的值视为字节序列(八位字节)。
在可能的256个值中,只有66个保留为单字节值或仍然编码为单字节值,其他的则被其码位值的十六进制表示所代替。
这通常需要3到5个字节,具体取决于编码方式。
因此,平均(256-66)/256或74%的文件将被编码为占用3到5倍的空间。
然而,这种编码没有报头,也没有显著的开销。
multipart/form-data相反,它的工作原理是将数据分成若干部分,然后查找在所述部分中没有出现的任何长度的字符串。
这样的字符串称为边界,它用于分隔部分的末尾,该部分作为八分之一的流传输。
因此,文件基本上是按原样发送的,对于足够大的数据,其大小开销可以忽略不计。
退一步是,用户代理需要找到一个合适的边界,但是给定一个长度为k的字符串,在统一生成的二进制文件中找到该字符串的概率只有2-8k。
因此,用户代理可以简单地生成一个随机字符串并进行快速搜索,并利用网络传输时间来隐藏搜索的延迟。
您应该使用multipart/form-data
这取决于您使用的平台,通常,如果您无法访问请求主体,则必须重新执行您自己的编码。
对于multipart/form-data编码,有一点开销,通常可以忽略不计(与传输时间相比)。

07-27 19:26