为何说HTTP/1.1 是用纯文本进行传输的?
使用HTTP工具进行POST测试,这里有 binary 的Body 参数方式,这是2进制流吧。
请问:
1.这里的binary是在HTTP/1.1 是没有这个选项的吗?只有HTTP/2.0才有吗?
2.这里的选项,其他的form-data x-www-form-urlencoded json xml raw 都是文本格式传输吗?
为何说HTTP/1.1 是用纯文本进行传输的?
使用HTTP工具进行POST测试,这里有 binary 的Body 参数方式,这是2进制流吧。
请问:
1.这里的binary是在HTTP/1.1 是没有这个选项的吗?只有HTTP/2.0才有吗?
2.这里的选项,其他的form-data x-www-form-urlencoded json xml raw 都是文本格式传输吗?
用纯文本的意思就是它的请求头、响应头,分隔符等都是以文本方式传输的,整个通讯框架都是基于纯文本,是人类可阅读的。而你例子中的二进制仅仅属于嵌套在纯文本框架中的二进制payload。
关于二进制和纯文本传输的区别可以看一个简单的例子,如果我想传输一个无符号数字123,用二进制的方式是直接发送一个字节,该字节内容是123。用纯文本的方式需要发送三个字节,内容是49 50 51,接收方收到之后可以解析为字符串123
,在根据字符串123
转为数字123
我感觉你是不是漏看了啥啊……
说的是请求头部以纯文本传输,不是说整个请求呀。
我们来看一个 HTTP/1.1 的请求报文:
(注:上图 Cookies 已做脱敏处理)
这是浏览器请求思否首页的一个 GET 请求,你会发现光请求头部就有 1 千来个字符了,换算下来就是 1KB 的占用。这还是光这一个请求,实际上你访问一个思否首页,总共有几十个请求被发出,有去下载各种外链资源的(JS、CSS、IMG 这些)、也有各种 AJAX 接口的调用(获取广告位、获取推荐列表、获取个人信息等等)。
人们发现,每次请求都至少有这么多内容要被传输一次,这不是很浪费带宽?
于是 HTTP/2.0 有了头部压缩(Header Compression)。