HTTP的歷史 3 項 WWW 構建技術,分別是:把 SGML(Standard Generalized Markup Language,標準通用標記語言)作為頁面的文本標記語言的 HTML(HyperText Markup Language,超文本標記語言);作為文檔傳遞協議的 HTTP ; 指定 ...
HTTP的歷史
3 項 WWW 構建技術,分別是:把 SGML(Standard Generalized Markup Language,標準通用標記語言)作為頁面的文本標記語言的
HTML(HyperText Markup Language,超文本標記語言);作為文檔傳遞協議的 HTTP ; 指定文檔所在地址的
URL(Uniform Resource Locator,統一資源定位符)
HTTP/0.9 HTTP 於1990 年問世。那時的 HTTP 並沒有作為正式的標準被建立。現在的 HTTP 其實含有 HTTP1.0 之前版本的意思,因此被稱為HTTP/0.9。
HTTP/1.0 HTTP 正式作為標準被公佈是在 1996 年的 5 月,版本被命名為HTTP/1.0,並記載於 RFC1945。雖說是初期標準,但該協議標準至今仍被廣泛使用在伺服器端。
HTTP/1.1 1997 年 1 月公佈的 HTTP/1.1 是目前主流的 HTTP 協議版本。當初的標準是 RFC2068,之後發佈的修訂版 RFC2616 就是當前的最新版本。
HTTP/2.0 主要技術方向
TCP/IP
TCP/IP的分層管理
應用層:決定了向用戶提供應用服務時通信的活動。TCP/IP 協議族內預存了各類通用的應用服務。比如,FTP(FileTransfer Protocol,文件傳輸協議)和 DNS(Domain Name System,功能變數名稱系統)服務就是其中兩類。HTTP 協議也處於該層。
傳輸層:傳輸層對上層應用層,提供處於網路連接中的兩台電腦之間的數據傳輸。在傳輸層有兩個性質不同的協議:TCP(Transmission ControlProtocol,傳輸控制協議)和 UDP(User Data Protocol,用戶數據報協議)。
網路層:用來處理在網路上流動的數據包。數據包是網路傳輸的最小數據單位。該層規定了通過怎樣的路徑(所謂的傳輸路線)到達對方電腦,並把數據包傳送給對方。與對方電腦之間通過多台電腦或網路設備進行傳輸時,網路層所起的作用就是在眾多的選項內選擇一條傳輸路線
數據鏈路層:用來處理連接網路的硬體部分。包括控制操作系統、硬體的設備驅動、NIC(Network Interface Card,網路適配器,即網卡),及光纖等物理可見部分(還包括連接器等一切傳輸媒介)。硬體上的範疇均在鏈路層的作用範圍之內
TCP/IP通信傳輸流
利用 TCP/IP 協議族進行網路通信時,會通過分層順序與對方進行通信。發送端從應用層往下走,接收端則往應用層往上走。
舉例來說明,首先作為發送端的客戶端在應用層(HTTP 協議)發出一個想看某個 Web 頁面的 HTTP 請求。
接著在傳輸層(TCP 協議)把從應用層處收到的數據(HTTP 請求報文)進行分割,併在各個報文上打上標記序號及埠號後轉發給網路層。
在網路層(IP 協議),增加作為通信目的地的 MAC 地址後轉發給鏈路層。
接收端的伺服器在鏈路層接收到數據,按序往上層發送,一直到應用層。當傳輸到應用層,才能算真正接收到由客戶端發送過來的 HTTP請求
發送端在層與層之間傳輸數據時,每經過一層時必定會被打上一個該層所屬的首部信息。反之,接收端在層與層傳輸數據時,每經過一層時會把對應的首部消去。這種把數據信息包裝起來的做法稱為封裝。
負責傳輸的 IP 協議
IP 協議的作用是把各種數據包傳送給對方。而要保證確實傳送到對方那裡,則需要滿足各類條件。其中兩個重要的條件是 IP 地址和 MAC地址(Media Access Control Address)
IP 地址指明瞭節點被分配到的地址,MAC 地址是指網卡所屬的固定地址。IP 地址可以和 MAC 地址進行配對。IP 地址可變換,但 MAC地址基本上不會更改。使用 ARP 協議憑藉 MAC 地址進行通信IP 間的通信依賴 MAC 地址。
在網路上,通信的雙方在同一區域網(LAN)內的情況是很少的,通常是經過多台電腦和網路設備中轉才能連接到對方。而在進行中轉時,會利用下一站中轉設備的 MAC地址來搜索下一個中轉目標。這時,會採用 ARP 協議(AddressResolution Protocol)。ARP 是一種用以解析地址的協議,根據通信方的 IP 地址就可以反查出對應的 MAC 地址---------這種機制稱為路由選擇
TCP 協議
TCP 位於傳輸層,提供可靠的位元組流服務。所謂的位元組流服務(Byte Stream Service)是指,為了方便傳輸,將大塊數據分割成以報文段(segment)為單位的數據包進行管理
為了準確無誤地將數據送達目標處,TCP 協議採用了三次握手
握手過程中使用了 TCP 的標誌(flag) —— SYN(synchronize) 和ACK(acknowledgement)
發送端首先發送一個帶 SYN 標誌的數據包給對方。接收端收到後,回傳一個帶有 SYN/ACK 標誌的數據包以示傳達確認信息。最後,發送端再回傳一個帶 ACK 標誌的數據包,代表“握手”結束。若在握手過程中某個階段莫名中斷,TCP 協議會再次以相同的順序發送相同的數據包
各種協議與 HTTP 協議的關係
URL(UniformResource Locator,統一資源定位符)URL 正是使用 Web 瀏覽器等訪問 Web 頁面時需要輸入的網頁地址
URI(統一資源標識符):URI 就是由某個協議方案表示的資源的定位標識符。協議方案是指訪問資源所使用的協議類型名稱
HTTP/1.0 和 HTTP/1.1 支持的方法
持久連接
HTTP/1.1 和一部分的 HTTP/1.0 想出了持久連接(HTTP Persistent Connections,也稱為 HTTP keep-alive 或HTTP connection reuse)的方法。持久連接的特點是,只要任意一端沒有明確提出斷開連接,則保持 TCP 連接狀態
管線化
持久連接使得多數請求以管線化(pipelining)方式發送成為可能。從前發送請求後需等待並收到響應,才能發送下一個請求。管線化技術出現後,不用等待響應亦可直接發送下一個請求
Cookie管理
HTTP報文
HTTP 報文大致可分為報文首部和報文主體兩塊。兩者由最初出現的空行(CR+LF)來劃分。通常,並不一定要有報文主體
編碼提升傳輸速率
-報文(message)是 HTTP 通信中的基本單位,由 8 位組位元組流(octet sequence,其中 octet 為 8 個比特)組成,通過 HTTP 通信傳輸。
-實體(entity)作為請求或響應的有效載荷數據(補充項)被傳輸,其內容由實體首部和實體主體組成。
HTTP 報文的主體用於傳輸請求或響應的實體主體。
壓縮傳輸的內容編碼
常用的內容編碼有以下幾種
gzip(GNU zip)
compress(UNIX 系統的標準壓縮)
deflate(zlib)
identity(不進行編碼)
分割發送的分塊傳輸編碼
4 種 HTTP 首部欄位類型
通用首部欄位(General Header Fields)
請求報文和響應報文兩方都會使用的首部。
請求首部欄位(Request Header Fields)
從客戶端向伺服器端發送請求報文時使用的首部。補充了請求的附加
內容、客戶端信息、響應內容相關優先順序等信息。
響應首部欄位(Response Header Fields)
從伺服器端向客戶端返迴響應報文時使用的首部。補充了響應的附加
內容,也會要求客戶端附加額外的內容信息。
實體首部欄位(Entity Header Fields)
針對請求報文和響應報文的實體部分使用的首部。補充了資源內容更
新時間等與實體有關的信息。
HTTPS
HTTP 主要有這些不足,例舉如下
- 通信使用明文(不加密),內容可能會被竊聽
- 不驗證通信方的身份,因此有可能遭遇偽裝
- 無法證明報文的完整性,所以有可能已遭篡改
HTTP+ 加密 + 認證 + 完整性保護
=HTTPS
通過和 SSL(Secure Socket Layer,安全套接層)或TLS(Transport Layer Security,安全層傳輸協議)的組合使用,加密 HTTP 的通信內容。用 SSL 建立安全通信線路之後,就可以在這條線路上進行 HTTP通信了。與 SSL 組合使用的 HTTP 被稱為 HTTPS(HTTPSecure,超文本傳輸安全協議)或 HTTP over SSL
報文完整性的方法,但事實上並不便捷、可靠。其中常用的是 MD5 和 SHA-1 等散列值校驗的方法