为何说HTTP/1.1 是用纯文本进行传输的?

为何说HTTP/1.1 是用纯文本进行传输的?

image.png

使用HTTP工具进行POST测试,这里有 binary 的Body 参数方式,这是2进制流吧。
请问:

1.这里的binary是在HTTP/1.1 是没有这个选项的吗?只有HTTP/2.0才有吗?
2.这里的选项,其他的form-data x-www-form-urlencoded json xml raw 都是文本格式传输吗?

阅读 3.5k
2 个回答

我感觉你是不是漏看了啥啊……

说的是请求头部以纯文本传输,不是说整个请求呀。

我们来看一个 HTTP/1.1 的请求报文:

image.png

(注:上图 Cookies 已做脱敏处理)

这是浏览器请求思否首页的一个 GET 请求,你会发现光请求头部就有 1 千来个字符了,换算下来就是 1KB 的占用。这还是光这一个请求,实际上你访问一个思否首页,总共有几十个请求被发出,有去下载各种外链资源的(JS、CSS、IMG 这些)、也有各种 AJAX 接口的调用(获取广告位、获取推荐列表、获取个人信息等等)。


人们发现,每次请求都至少有这么多内容要被传输一次,这不是很浪费带宽?

于是 HTTP/2.0 有了头部压缩(Header Compression)。

用纯文本的意思就是它的请求头、响应头,分隔符等都是以文本方式传输的,整个通讯框架都是基于纯文本,是人类可阅读的。而你例子中的二进制仅仅属于嵌套在纯文本框架中的二进制payload。

关于二进制和纯文本传输的区别可以看一个简单的例子,如果我想传输一个无符号数字123,用二进制的方式是直接发送一个字节,该字节内容是123。用纯文本的方式需要发送三个字节,内容是49 50 51,接收方收到之后可以解析为字符串123,在根据字符串123转为数字123

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进