二元协议与文本协议并不是真正关于如何编码二进制blob。不同之处在于协议是围绕数据结构还是围绕文本字符串。让我举个例子:HTTP。 HTTP是一种文本协议,即使它发送JPEG图像时,它只是发送原始字节,而不是它们的文本编码。
但真正使HTTP文本协议是在交换得到的JPG看起来是这样的:
请求:
GET /files/image.jpg HTTP/1.0
Connection: Keep-Alive
User-Agent: Mozilla/4.01 [en] (Win95; I)
Host: hal.etc.com.au
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, */*
Accept-Language: en
Accept-Charset: iso-8859-1,*,utf-8
响应:
HTTP/1.1 200 OK
Date: Mon, 19 Jan 1998 03:52:51 GMT
Server: Apache/1.2.4
Last-Modified: Wed, 08 Oct 1997 04:15:24 GMT
ETag: "61a85-17c3-343b08dc"
Content-Length: 60830
Accept-Ranges: bytes
Keep-Alive: timeout=15, max=100
Connection: Keep-Alive
Content-Type: image/jpeg
<binary data goes here>
注意,这可以非常容易地被更紧密地包装在看起来像(C)的结构中,像
请求:
struct request {
int requestType;
int protocolVersion;
char path[1024];
char user_agent[1024];
char host[1024];
long int accept_bitmask;
long int language_bitmask;
long int charset_bitmask;
};
响应:
struct response {
int responseType;
int protocolVersion;
time_t date;
char host[1024];
time_t modification_date;
char etag[1024];
size_t content_length;
int keepalive_timeout;
int keepalive_max;
int connection_type;
char content_type[1024];
char data[];
};
凡字段名称就不必在所有的传送,并且其中,例如,在响应结构的responseType
是一个int值200而不是三个字符'2''0''0'。这就是基于文本的协议:被设计为作为平坦的(通常是人类可读的)文本行流而不是作为许多不同类型的结构化数据进行通信的协议。
[二进制VS文协议(http://stackoverflow.com/questions/2364581/binary-vs-text-protocols) – dkinzer 2013-10-14 00:00:21