2009-12-12 195 views
21

看來二進制文件會更緊湊,並且可以用標準方式進行反序列化,爲什麼使用文本呢?這看起來效率低下,Web框架只能用字符串進行操作。爲什麼沒有二元標準?網絡會更快,瀏覽器可以非常快速地加載二進制頁面。爲什麼我們不在http上發送文本而不是發送文本?

如果我要啓動一個二進制協議(HBP超二進制協議),我會定義什麼樣的標準?

+1

我猜,因爲沒有二元標準,但我真的不知道。我很想看到這個答案。 – 2009-12-12 02:09:34

+4

圖像通過HTTP作爲二進制數據發送。我不明白你在找什麼。 – 2009-12-12 02:10:11

+0

你說'用字符串擰'就好像它是壞事*。 – pavium 2009-12-12 02:30:46

回答

30

HTTP協議本身是可讀的文本。這很有用,因爲您可以遠程登錄到任何服務器並與之通信。

正文還可讓您輕鬆地使用wireshark等程序觀看HTTP通信。然後,您可以輕鬆診斷問題的來源。

HTTP定義了一種使用resources的方法。這些資源不需要是文本,它們可以是圖像或其他任何東西。文本資源可以通過指定Content-Encoding標題以二進制形式發送。您的資源類型通過Content-Type標題指定。

所以你的問題確實只適用於HTTP協議本身,而不是資源的有效載荷。

網絡會更快,瀏覽器將能夠非常快速地加載二進制頁面。

我不認爲這是真的。最慢的部分可能是連接建立和slow TCP start

下面是如何的HTTP響應將發送文本資源與一個二進制表示一個例子:

HTTP/1.1 200 OK
服務器:Apache/2.0
內容編碼:gzip
Content-Length:1533 Content-Type:text/html;字符集= ISO-8859-1

+2

您好,先生,是個紳士和學者,優秀的答案 – Pierreten 2009-12-13 16:48:43

+2

內容編碼與有效載荷是否是二進制無關。 – 2014-12-15 07:52:12

+0

@JulianReschke - 在GZIP完成字符串處理之後,它肯定是通過線路發送/接收的二進制有效負載,儘管處理的壓力和解壓縮每邊數據的成本都是如此。 – 2016-10-10 03:04:46

2

您可以隨時gzip壓縮文本。

13

基於文本的協議有許多重要優點:

  • 假設你使用UTF-8或另一種面向字節的編碼,沒有字節順序問題滿意於。讓每個人都同意基於文本的模式(例如用XML完成的模式)是很困難的。想象一下,試圖讓每個人都同意在二進制協議中應該有多少位數。
    • 相關的,試想讓他們同意浮點表示法。這並不是一個假設--IBM威脅要破壞有關浮點表示問題的ECMAScript 5標準化工作。
  • 網絡是基於文本的,我不只是在協議層面上。大部分內容都是文本(一次,幾乎所有的內容都是文本)。因此,現代編程語言圍繞着他們正在處理文本的想法而成長起來,解析二進制格式並不重要。
    • 不久前,我不得不產生 Python中一個不起眼的二進制格式與傳統系統接口。結果比我想象的要痛苦得多。解析它會遠遠更糟糕。
  • 開發人員無法查看字節流,並以他可以查看的方式說「哦,我的字符串長度已丟失」。一個XML文檔並說「哦,那個元素沒有關閉」。這使得開發和故障排除更容易。
  • 性能被高估了,XML解析器最近「足夠快」。如果你正在做的事情確實需要將硬件中的每一點性能都排除在外,那麼幾乎可以肯定的是,你可以做任何基於Web的事情,並且可能會構建自己的二進制協議以在兩個應用程序之間進行通信你已經控制了。
+1

非常合理的答案++ – Pierreten 2009-12-13 19:50:43

11

還有二進制通信標準,其中許多是預先日期http。我構建/處理了一個二進制的客戶端/服務器數據庫協議,它確實有效並且字節效率很高。所以問題是,爲什麼在市場上有文本格式的WIN?

我覺得可能有許多因素,但我相信這是最重要的:

  • 您可能無法從XML前幾天還記得,但字節順序曾經是王室頭痛,只要努力交換數據。每一位都很珍貴,因此文件格式儘可能緊湊。但是,當你試圖在Mac和PC和大型機之間交換文件時,你意識到整數的二進制版本遠沒有標準。程序員花費了無數個小時來糾正這個問題。
  • 使用文本流進行調試和開發要容易得多。正如有人指出的那樣,您可以使用telnet終端會話進行一些開發。很多時候你可以忽略字符編碼問題。 Unix對管道和流的簡單比喻可能是它成功的主要原因。這很簡單。
1

在過去,它被認爲是浪費(帶寬)資源來編碼二進制文本。您不僅需要進行編碼和解碼,還必須非常清楚二進制對象的類型,以及您想要發送的對象的結構。 XML有時會給你一個錯覺,認爲這是自動產生的。但事實並非如此。

正如Brian提到的那樣,文本編碼具有很大的優勢,您作爲人類可以輕鬆地生成和調試它們。

一個有趣的非文本格式是ASN.1(抽象語法標記No.1)。結合編碼規則(BER - 基本編碼規則,DER - 專有編碼規則等),您將得到非常非常緊湊的二進制結構編碼,該編碼高度優化用於網絡傳輸。即使處理不同的字節是在這裏定義的。 ASN.1在協議族(X.25,X.400,X.500等)中被使用和傳播。它仍然在LDAP中使用。還有編碼規則被定義爲用XML編碼數據(XER-XML編碼規則)。見http://en.wikipedia.org/wiki/Abstract_Syntax_Notation_One

0

只要我們人類與數據進行交互 - 即通過UI視圖,無論是編輯還是隻是閱讀,它都可以保持爲文本。

如果軟件系統決定將文本轉換爲二進制文件以實現緊湊存儲,緩存或傳輸,則可以這樣做,但它應該在場景後面。所以這只是最優化問題。由於不成熟的優化是許多問題的根源,因此可以在項目路線圖的最後階段實施。

6

好吧,它看起來像necro-posting,但是......看起來,你是在預測未來。 HTTP 2.0將是二進制的。

相關問題