一個有趣的問題——HTTP是“超文本傳輸協議”還是“超文本轉移協議”


  最近在看《HTTP圖解》這本書,書中提到了對國內對HTTP協議名稱的翻譯問題,並且給出了一些網友討論的原稿鏈接,我看了一下覺得挺有意思的,另外我本人也覺得翻譯對於理解協議本身非常重要,就整理了一些觀點。

  HTTP的全稱是HyperText Transfer Protocol,大家主要的關注點在於Transfer應該如何翻譯。

  以下是整理的內容:

  李錕:

  1.紙面釋義

  在IETF的RFC中,“transport”(傳輸)的含義是指:從端到端(例如從ip1:port1到ip2:port2)可靠地搬運比特,也就是TCP/IP協議棧中的第3層傳輸層(transport layer)協議所做的那些事情。

  而“transfer”的含義是:通過在客戶端-服務器端之間轉移一些帶有操作語義的操作原語,來執行某種操作。“transfer”是TCP/IP協議棧中的第4層應用層的概念,而不是第3層傳輸層的概念。“transfer”所轉移的是帶有明確操作語義的操作原語,而不是沒有操作語義的比特流。

  2.HTTP協議在TCP/IP協議族中的位置

  HTTP其實是一種應用協議。HTTP/FTP/NNTP..... 全是應用層協議。transfer是應用層的概念。傳輸這件事情,TCP+UDP已經干的很好了。

  不過本着人有多大膽地有多大產的革命樂觀冒險主義,非把HTTP當作傳輸協議來用,確實也死不了人。但是這是低效的用法,會付出一些代價。

  3.HTTP設計者Fielding博士的釋疑

  HTTP定制者之一的Roy Fielding博士在其論文[1](6.5.3節)中使用“transfer”表達的是“(表述狀態的)轉移”(Representational State Transfer),而不是“傳輸”。這是因為英語單詞“transfer”在不同語境下的多義性,請勿誤解。

 6.5.3 HTTP is not a Transport Protocol

HTTP is not designed to be a transport protocol. It is a transfer protocol in which the messages reflect the semantics of the Web architecture by performing actions on resources through the transfer and manipulation of representations of those resources. It is possible to achieve a wide range of functionality using this very simple interface, but following the interface is required in order for HTTP semantics to remain visible to intermediaries. 

   嘗試翻譯一下: 

   HTTP不是為了設計成一個傳輸協議。它是一個轉移協議,通過對資源表征的轉移和操作,它反映了Web架構的含義。它使得通過簡單的接口實現非常大范圍的功能訴求,同時接口又是必須的,它使得HTTP的語義對於中間媒介保持可見。

  4.HTTP協議的有設計與發展

  HTTP協議為何要這樣設計、設計出來是為了做什么事情,指導思想是REST。REST其實就是中庸之道,沒什么神秘。

  HTTP 1.0和HTTP 1.1最大的區別是什么,我接下來詳細解釋。

  HTTP 1.0基本上就是一個服務器端靜態文件的操作協議,並沒有抽象的資源概念,HTTP 1.0認為Web服務器上就是一大堆靜態文件。HTTP 1.0里面的transfer,就是傳遞、轉移文件。有人把它理解為傳輸,似乎也可以。但是在協議里面,傳輸transport其實指的是搬運bit層次的苦力活。

  如何來很好地支持動態內容,是HTTP 1.1協議要解決的一個主要問題。因此就發明了一個新的概念叫做資源,注意:資源和面向對象編程里面的對象類似,是一個抽象的工具。資源不僅僅可以代表服務器端一個文件、數據庫中一條記錄這類具體的東西。可以要多抽象有多抽象。有了資源之后,還需要設計一個統一的接口來操作資源。否則每一個資源操作的方式都不一樣,那樣做會嚴重降低Web應用的可伸縮性。

 

  陳睿傑-小狗

  其實說起來,http還真和郵局很相似,你去寄信,信封上的東西,比如地址、郵編,是有語義的,你可以看作是“應用層”的東西,你通過信件“轉移”你的想法給對方;郵局的派送車,只管幫你運輸的,那個是“傳輸層”的東西,幫你“傳輸”這封信件。
  對應到HTTP協議的內容,request header、response header,就是信封上的元信息,body是你的信件內容。http很依賴這些元信息的,它根本不關注整個東西是怎么送達到對方手里的,傳輸有TCP、IP在做了。

  其實要真正明白區別,就要明白資源的概念,資源是抽象的概念,你不可能在網絡上真正的交換一個資源實體,你只能操作表述,資源永遠無法直接觸及,在REST架構中,服務器和客戶端之間都只能通過資源的表述來進行交流,而非資源本身,這就是為什么要用“轉移”來稱呼這個操作。轉移表述,而非傳輸資源。

  

  參考文檔:

  http://www.ituring.com.cn/article/1817#

  http://www.ituring.com.cn/article/937

  http://www.ics.uci.edu/~fielding/pubs/dissertation/evaluation.htm


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM