看來二進制文件會更緊湊,並且可以用標準方式進行反序列化,爲什麼使用文本呢?這看起來效率低下,Web框架只能用字符串進行操作。爲什麼沒有二元標準?網絡會更快,瀏覽器可以非常快速地加載二進制頁面。爲什麼我們不在http上發送文本而不是發送文本?
如果我要啓動一個二進制協議(HBP超二進制協議),我會定義什麼樣的標準?
看來二進制文件會更緊湊,並且可以用標準方式進行反序列化,爲什麼使用文本呢?這看起來效率低下,Web框架只能用字符串進行操作。爲什麼沒有二元標準?網絡會更快,瀏覽器可以非常快速地加載二進制頁面。爲什麼我們不在http上發送文本而不是發送文本?
如果我要啓動一個二進制協議(HBP超二進制協議),我會定義什麼樣的標準?
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
您好,先生,是個紳士和學者,優秀的答案 – Pierreten 2009-12-13 16:48:43
內容編碼與有效載荷是否是二進制無關。 – 2014-12-15 07:52:12
@JulianReschke - 在GZIP完成字符串處理之後,它肯定是通過線路發送/接收的二進制有效負載,儘管處理的壓力和解壓縮每邊數據的成本都是如此。 – 2016-10-10 03:04:46
您可以隨時gzip壓縮文本。
基於文本的協議有許多重要優點:
非常合理的答案++ – Pierreten 2009-12-13 19:50:43
還有是二進制通信標準,其中許多是預先日期http。我構建/處理了一個二進制的客戶端/服務器數據庫協議,它確實有效並且字節效率很高。所以問題是,爲什麼在市場上有文本格式的WIN?
我覺得可能有許多因素,但我相信這是最重要的:
在過去,它被認爲是浪費(帶寬)資源來編碼二進制文本。您不僅需要進行編碼和解碼,還必須非常清楚二進制對象的類型,以及您想要發送的對象的結構。 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。
只要我們人類與數據進行交互 - 即通過UI視圖,無論是編輯還是隻是閱讀,它都可以保持爲文本。
如果軟件系統決定將文本轉換爲二進制文件以實現緊湊存儲,緩存或傳輸,則可以這樣做,但它應該在場景後面。所以這只是最優化問題。由於不成熟的優化是許多問題的根源,因此可以在項目路線圖的最後階段實施。
好吧,它看起來像necro-posting,但是......看起來,你是在預測未來。 HTTP 2.0將是二進制的。
我猜,因爲沒有二元標準,但我真的不知道。我很想看到這個答案。 – 2009-12-12 02:09:34
圖像通過HTTP作爲二進制數據發送。我不明白你在找什麼。 – 2009-12-12 02:10:11
你說'用字符串擰'就好像它是壞事*。 – pavium 2009-12-12 02:30:46