[解決済み] バイナリプロトコル vs テキストプロトコル
質問
バイナリ プロトコルとは何か、テキスト プロトコルとは何か、電線に送信されるビットの点で、これらは互いにどのように比較されるのでしょうか?
バイナリプロトコルについてwikipediaに書いてあることは以下の通りです。
バイナリプロトコルとは、人間ではなく機械に読ませることを意図・期待したプロトコルである ( http://en.wikipedia.org/wiki/Binary_protocol )
おいおい
もっと明確に言うと、もし私がjpgファイルを持っていたら、バイナリプロトコルを通してどのように送られ、テキストプロトコルを通してどのように送られるのでしょうか? もちろん、ワイヤー上に送られるビット/バイトの点で、です。
言い換えれば、最初のデータ (jpg ファイル) が送信される前にどのようにエンコードされるかにかかっているのです。
どのように解決するのですか?
バイナリプロトコルとテキストプロトコルの違いは、バイナリブロブがどのようにエンコードされるかについてではありません。違いは、プロトコルがデータ構造を中心としたものか、テキスト文字列を中心としたものかということです。例を挙げましょう。例えば、HTTPです。HTTP はテキスト プロトコルですが、JPEG 画像を送信するときは、テキスト エンコードではなく生のバイトを送信するだけです。
しかし、HTTPがテキストプロトコルである理由は、以下のようなやり取りがあることです。 を取得することです。 を実行すると、このようになります。
リクエストしてください。
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
が3文字 '2' '0' '0' ではなく、値 200 の int である場合です。これがテキスト ベースのプロトコルです。これは、さまざまな種類の構造化データとしてではなく、(通常は人間が読める) テキスト行のフラット ストリームとして通信するように設計されたものです。
関連
-
[解決済み] Sublime Text 2にはアセンブリのシンタックスハイライトがありますか?
-
[解決済み] Linuxで特定のテキストを含むすべてのファイルを検索するにはどうすればよいですか?
-
[解決済み] MySQLです。大きなVARCHARとTEXTの比較?
-
[解決済み] Python int to binary string?
-
[解決済み] 2の補数 "とは何ですか?
-
[解決済み】文字列をテキストファイルに出力する
-
[解決済み】なぜBase64を使うのか?
-
[解決済み】テキストファイルのエンコーディング/コードページを検出する方法
-
[解決済み】コサインの類似性の例を、とても簡単な図式で誰か教えてください。[クローズド]
-
[解決済み] cssによるテキストボーダー(テキスト周りの枠)
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] XQuery データと text() 関数
-
[解決済み] Sublime Text 2にはアセンブリのシンタックスハイライトがありますか?
-
[解決済み] LaTeXの表でテキストを折り返すには?
-
[解決済み】SVGの矩形にテキストを配置し、中央に配置する方法
-
[解決済み】SVG:矩形内のテキスト
-
[解決済み】grepで空白行を削除する。
-
[解決済み】コサインの類似性の例を、とても簡単な図式で誰か教えてください。[クローズド]
-
[解決済み] UIButtonのテキストに下線を引く
-
[解決済み] Text Editor which shows \rn? [クローズド]
-
[解決済み] cssによるテキストボーダー(テキスト周りの枠)