http - 为文件大小选择什么 application/x-www-form-urlencoded/multipart/form-data 以 GB 为单位?

标签 http post http-headers url-encoding

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

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

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

  2. 另外,如何找到编码数据的长度(使用 application/x-www-form-urlencoded 编码的数据)?

  3. 对二进制数据进行编码会不会很耗时?

  4. 一般来说,编码会跳过一些非字母数字字符。那么,我们可以跳过二进制数据(如视频)的编码吗?我们怎么能跳过呢?

最佳答案

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

multipart/form-data 的工作方式是将数据分成几部分,然后找到该部分中没有出现的任意长度的字符串。
这样的字符串称为边界,它用于分隔作为八位字节流传输的部分的结尾。
所以文件主要是按原样发送,对于足够大的数据来说,大小开销可以忽略不计。

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


  1. 您应该使用multipart/form-data
  2. 这取决于您使用的平台,一般来说,如果您无法访问请求正文,您必须自己重新执行编码。
  3. 对于 multipart/form-data 编码,有一点通常可以忽略不计的开销(与传输时间相比)。

关于http - 为文件大小选择什么 application/x-www-form-urlencoded/multipart/form-data 以 GB 为单位?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39525897/

相关文章:

c# - 什么是生成 ETag 的有效且处理成本低的算法?

javascript - React 选择框从 json 文件获取数据

ruby-on-rails - 如何使用 rails、nginx 和乘客配置 `Access-Control-Allow-Origin`?

c# - 从 IIS 7/8 中的静态内容中删除服务器 header

java - 如何将基于多个条件的 header 添加到 HttpRequest Java 11?

java - 如何通过http长连接从服务端定时向客户端发送请求

Android P - NetworkSecurityPolicy.isCleartextTrafficPermitted false when network-security-config base-config cleartextTrafficPermitted true

javascript - Node.js 练习,使用来自 nodeschool.io 的异步

java 模拟带有重定向的post表单

php - 多个 MYSQL 语句作为单个语句执行