主程序员的练成:HTTP协议和二进制协议的对比

在上一篇《主程序员的练成:TCP、消息分包和协议设计》中谈了协议设计的一些话题,这里补充聊聊HTTP协议和二进制协议的对比。

HTTP协议是一种文本协议,也是一种Name-Based协议,就从这两方面来说。

文本协议 vs 二进制协议

文本协议的特点:

便于人

易于阅读、理解、调试、构造

解析复杂、冗余多

需要考虑字符转义

二进制协议的特点:

便于机器

Name-Based vs Position-Based

Name-Based协议的特点:

协议字段都用Name标识

协议字段与位置无关

协议字段可缺省

新增协议字段比较方便

解析复杂

需要考虑字符转义

Position-Based协议的特点:

每个协议字段都有特定的位置

新增协议字段需要做好协议版本管理(protobuf这类就挺好)

解析更高效

-------- 分割线 ---------

1.主程序员的练成:引言

2.主程序员的练成:技术篇概要

3.主程序员的练成:IP、DNS和CDN

4.主程序员的练成:TCP、消息分包和协议设计

6.主程序员的练成:CGI和FastCGI

推荐wecode程序员云笔记──为程序员而生的开源、简洁高效的云笔记软件,使用有道云做云端存储。

★ 【语法高亮】目前支持 C/C++、C#、Pascal、Java、VB.Net、XML、HTML、Python、SQL等多种方。

★ 【云端存储】除了本地笔记本外,还增加了云存储功能,目前使用有道云笔记做为云存储。

★ 【文档加密】提供了文档加密功能,确保敏感文档的安全性。

★ 【多个本地笔记本】支持多个本地笔记本,你能够新建本地笔记本、打开、压缩和备份本地笔记本。

★ 【文章附件】能够为每个文章添加多个附件,并能够在临时目录中打开附件、导出附件。有道云的附件也存储在云端。

时间: 2024-10-04 20:44:42

主程序员的练成:HTTP协议和二进制协议的对比的相关文章

主程序员的练成:TCP、消息分包和协议设计

在<主程序员的练成:IP.DNS和CDN>中,一次网络请求经过DNS解析知道了目的IP,现在就要发出网络包,这里我们说一说TCP的相关话题. TCP是一种流式协议 讲网络编程的教科书一般都会对TCP的可靠传输,api用法做详细说明,但对于TCP是一种流式协议讲解的不多,但这背后隐藏着很重要的一个知识点.先做个名词定义方便交流,这里的"消息"是指应用层的一个完整的协议包. 流式协议的特点是什么?就像流水连续不断那样,消息之间没有边界.例如send了3条消息,分别是100字节.

主程序员的练成:CGI和FastCGI

消息经过网络传输,到达了服务器端,最常见的服务器是Web服务器,做PHP的同学都知道FastCGI模式的PHP比普通PHP更高效,这篇就聊聊其中的原理. 古老但常见的CGI Web服务器能解析HTTP请求,返回静态资源(HTML页.图片等),但要输出动态内容,必须得PHP/C#/Ruby/Java/Python/C/C++这些外部程序来实现. 早期有个技术叫CGI(Common Gateway Interface,通用网关接口),是用于Web服务器和外部程序之间传输数据的一种标准.一个简单的CG

主程序员的练成──引言

虽然是引言,但也很重要. 程序员如何成长?这个话题百度有大约170万个相关结果,介绍了不少从菜鸟到老鸟的经验,但如何成长为主程序员(以下简称主程),网上的"帮助文档"不完善,也缺少实践指南.本系列文章主题就是说说主程如何练成.为什么用"练"这个字,因为主程的很多技能光知道怎么做远远不够,还需要在实践中不断"训练"才能运用好.只有不断训练才能从知到行,从"知道"成长为"做到". 团队在任命主程时,大多会挑选经

主程序员的练成:技术篇概要

技术是程序员安身立命的家伙,主程的技术不强,向下难以服众,向上有负重托. 或许有人会问:技术深度上该挖多深才能做好主程?程序员至少有两个高阶成长方向: 1.技术型专家非常热爱技术本身,往往会钻研得非常深,甚至可以不承担管理职责(你心目中的榜样是谁?): 2.项目型专家着力于更好更快的实现项目,主导项目的团队组建.技术选型.架构设计.项目进度和质量管理等等,技术深度上不像技术型专家那么深,一般承担管理职责. 主程属于项目型专家方向,对技术深度广度的要求是够用就好,我对程序开发持实用主义态度,80%

文本协议与二进制协议的选择

进行网络通信时,我们经常纠结于到底使用什么样的协议传输数据,下面我谈谈应该怎么选择一种合理的协议格式. 网络协议 标准定义是这样的: 为计算机网络中进行数据交换而建立的规则.标准或约定的集合. 网络协议至少包括三要素: 语法:语法是用户数据与控制信息的结构与格式,以及数据出现的顺序. 语义:解释控制信息每个部分的意义.它规定了需要发出何种控制信息,以及完成的动作与做出什么样的响应. 时序:时序是对事件发生顺序的详细说明. 人们形象地把这三个要素描述为:语义表示要做什么,语法表示要怎么做,时序表示

iOS-二进制协议的封装

对于在SDK socket通信时会存在二进制协议的通信模式,对于此根据以往的工作内容进行小结: 首先在socket通讯中可以有字符串协议和二进制协议,通过协议来达到通讯的目的.对于字符串协议就是通过字符串来制定通讯的标准模式是"string"-"value"模式,通过XML或者json来达到网络传输,解析封装也是基于XML或者json进行信息提取. 对于二进制协议,在C语言是通过struct对协议进行封装,在iOS中使用的是OC,在OC中你也可以通过C语言对二进制协

程序员每天累成狗,是为了什么

HI,想我了吗 了吗 了吗?自从上次情人节一别,我已经接近20天没更新文章了. 至于原因:是,办点其他私事,这一段压根没怎么联网,所以不太好意思,我也很想你们了.大家也不要问为什吗,辣么帅的人有什么事了,从今天开始我就正式回归了!还是那熟悉的节奏和风格,和帅帅的颜值 掌声响起来...啪啪啪 啪啪啪 这篇文章的起因有二点: 一.我这些天之所以没更新,不是因为我懒,是因为我确实很累和其他私事. 二.有许多人问我说:小北哥哥,感觉每天都很累,真不知道为什么,什么时候是个头! 我看我们的很多同行,都是一

CSDN日报20170311——《程序员每天累成狗,是为了什么》

[程序人生]程序员每天累成狗,是为了什么 作者:郭小北 程序员可以投入的资本就是:身体和脑力,说白了都是出卖劳动力换取回报,也就是钱.我们大部分人都是凡人,或许当初是基于兴趣和理想去做一件事,入一门行,但随着阅历的丰富,年龄的增长,责任感的叠加你工作就是为了钱啊,因为在这个物质的社会,你连家都养不了,何来生活的更好? [物联网]Android Things --SDK框架 作者:王玉成 物联网应用开发与手机和平板的应用开发有一些区别,那么Android Things与Android又有哪些差别呢

黑马程序员——OC语言的Block与Protocol(协议)

Block ● Block封装了一段代码,可以在任何时候执?行 ● Block可以作为函数参数或者函数的返回值,?而其本?身又可以带输?入参数或返回值. ● 苹果官?方建议尽量多?用block.在多线程.异步任 务.集合遍历.集合排序.动画转场?用的很多 定义BLOCK变量 Int (^SumBlock)(int,int);//有参数,返回值类型为int Void (^MyBlock)()://无参数,返回值类型为空 Blocks的定义: int (^MySum)(int, int) = ^(i