当前位置: 首页 > news >正文

【HTTP】为何HTTP使用文本描述结构和协议的趋势|HTTP协议问什么要基于文本而不是基于二进制节约带宽...

目录

1、不通用,其他语言难解析

2、历史遗留问题

3、便于直接观察,调试,维护

4、文本可压缩


1、不通用,其他语言难解析

因为这是不通用的,其他语言是很难解析这种流,看看json为什么这么就行就知道了。如果想节省带宽,可以进行压缩,文本的压缩率是很高的。

(问: 压缩数据对性能的消耗和压缩数据所需的时间如何 会不会因为需要额外的时间而导致实际的传输速率下降?

 akari10032:压缩算法的时间跟网络io比起来可以忽略不计

)

2、历史遗留问题

要用明文传输二进制,两个原因,最早之初有些网络只支持7位字节,和大小端问题。

(以前http出现时,很多情况都是字符界面呢,连设计器也木有。最初的网页很多都是在unix下用vi之类的东西敲的。)

3、便于直接观察,调试,维护

“为了便于直接观察,调试,维护” 只有这个能说的通了,可能是 为了便于维护和快速迭代牺牲一定的性能吧

4、 sunny7862632:兼容性差太远了,用文本最大好处就是协议加了新的字段,不管旧的客户端或者新的客户端都可以正常解析,只是旧的客户端新的字段无用罢了。用二进制这种兼容性就很难保证了,多次迭代之后,市场上可能并存着几十个不同版本的协议客户端。

造轮子:用二进制传输,解析不方便,不同的语言、程序解析方式不一样,没法通信,成本太大。

4、文本可压缩

大部分的场景io密集型应用环境,cpu资源相比内存和带宽资源,会富裕

truexf:

2. 文本是可读性更好的字节流
3. 自己编码的应用协议,不一定比文本格式更小。但是可读性会更差。
4. 文本压缩率搞,可以压缩掉1/3, 在大部分的场景io密集型应用环境,cpu资源相比内存和带宽资源,会富裕得多,压缩解压没压力。倒是可读性,可维护性,可调试性比较重要。

5、protocolbuff或许是不错的代替项

原帖地址:https://bbs.csdn.net/topics/396351976 《为什么Http协议要用文本做协议,用二进制不更节约带宽吗? 》

讨论:https://bbs.csdn.net/topics/396351976

为何HTTP使用文本描述结构?

前面的人说的得不错,我概括一下几个观点:
1、文本协议可读性好,好调试
2、兼容性差太远了,用文本最大好处就是协议加了新的字段,不管旧的客户端或者新的客户端都可以正常解析,只是旧的客户端新的字段无用罢了。用二进制这种兼容性就很难保证了,多次迭代之后,市场上可能并存着几十个不同版本的协议客户端。
3、历史包袱。

4、 自己编码的应用协议,不一定比文本格式更小。但是可读性会更差。
5、 文本压缩率搞,可以压缩掉1/3, 大部分场景压缩的资源消耗在IO面前可以忽略。

在大部分的场景io密集型应用环境,cpu资源相比内存和带宽资源,会富裕得多,压缩解压没压力。倒是可读性,可维护性,可调试性比较重要。

趋势:

现在主流都在使用兼容性好的协议我们做蓝牙传输的,以前都是用二进制,现在全改protobuf协议了。实际使用场景兼容性非常重要,时间长了协议肯定会被市场上大量不同时期版本的终端,系统必须保证兼容。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 【算法】递归思想
  • 【加密】OpenSSL 介绍和使用
  • 【加密】对称加密DES和非对称加密AES、数字签名
  • 【加密】DES加密算法中,ECB和CBC模式有什么区别?
  • 【DevOps 】DevOps简介
  • 【mySQL++】C++ 操作mySQL
  • 【压缩】数据压缩算法---编辑中
  • 【MySQL】Linux学习之CentOS7安装Mysql5.7直接覆盖Mariadb
  • 【libevent】libevent快速入门
  • 【Libevent】Libevent使用例子,从简单到复杂
  • 【导航】自己的导航网站
  • 【OSI】TCP网络协议四层/五层/七层协议
  • 【进程间通信】Unix domain socket (进程间通信)
  • 【Redis】Redis数据类型List的安全队列和不安全队列
  • 【多线程】C++11多线程(简约但不简单)
  • [译]如何构建服务器端web组件,为何要构建?
  • 【翻译】babel对TC39装饰器草案的实现
  • Angular2开发踩坑系列-生产环境编译
  • emacs初体验
  • Hibernate【inverse和cascade属性】知识要点
  • JAVA 学习IO流
  • JavaWeb(学习笔记二)
  • Java超时控制的实现
  • java正则表式的使用
  • Mysql数据库的条件查询语句
  • React Native移动开发实战-3-实现页面间的数据传递
  • Spark in action on Kubernetes - Playground搭建与架构浅析
  • zookeeper系列(七)实战分布式命名服务
  • 百度贴吧爬虫node+vue baidu_tieba_crawler
  • 机器学习中为什么要做归一化normalization
  • 技术攻略】php设计模式(一):简介及创建型模式
  • 前端攻城师
  • 视频flv转mp4最快的几种方法(就是不用格式工厂)
  • 小李飞刀:SQL题目刷起来!
  • ​ssh免密码登录设置及问题总结
  • # AI产品经理的自我修养:既懂用户,更懂技术!
  • #我与Java虚拟机的故事#连载01:人在JVM,身不由己
  • #我与Java虚拟机的故事#连载17:我的Java技术水平有了一个本质的提升
  • (1) caustics\
  • (1)(1.13) SiK无线电高级配置(六)
  • (k8s中)docker netty OOM问题记录
  • (八)Flink Join 连接
  • (十八)三元表达式和列表解析
  • (一)、软硬件全开源智能手表,与手机互联,标配多表盘,功能丰富(ZSWatch-Zephyr)
  • ****** 二 ******、软设笔记【数据结构】-KMP算法、树、二叉树
  • .net core Redis 使用有序集合实现延迟队列
  • .NET 中 GetProcess 相关方法的性能
  • .Net(C#)自定义WinForm控件之小结篇
  • .NET教程 - 字符串 编码 正则表达式(String Encoding Regular Express)
  • .NET中 MVC 工厂模式浅析
  • .Net转前端开发-启航篇,如何定制博客园主题
  • @Bean注解详解
  • @RequestMapping 和 @GetMapping等子注解的区别及其用法
  • @Transient注解
  • []使用 Tortoise SVN 创建 Externals 外部引用目录