바이너리 프로토콜과 텍스트 프로토콜은 바이너리 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
응답 구조에서는 세 문자 '2' '0' '0'대신 값 200을 갖는 int입니다. 이것이 바로 텍스트 기반 프로토콜입니다. 다양한 유형의 구조화 된 데이터가 아닌 (일반적으로 사람이 읽을 수있는) 텍스트 줄의 플랫 스트림으로 전달되도록 설계된 프로토콜입니다.