1. 程式人生 > >從零開始學HTTP (二) HTTP結構與基礎

從零開始學HTTP (二) HTTP結構與基礎

現象 encode 伸縮 協議 for 服務端 例如 lis 格式

HTTP結構與基礎

這篇文章中,我們主要針對HTTP\1.1版本進行介紹

請求報文和響應報文

請求報文

請求報文由客戶端發出,其格式為:

請求方法 請求URI 協議版本 可選的請求首部字段和內容實體,例如:

Post  /index.html HTTP/1.1
* Host是請求首部字段,代表服務器主機
Host: www.hukaihe.cn
Connection: keep-alive
Content-Type: application/x-www-form-urlencoded
Content-Length:16

nickName=AgentKyle&age=21

也可以寫成下面這種形式:

GET http://www.hukaihe.cn/index.html HTTP/1.1
*不使用Host首部字段
... ...

如果不是訪問特定資源而是對服務器本身發起訪問,可以用“*”來代替URI

響應報文

響應報文由:HTTP版本號 狀態碼 原因語句 可選的響應首部字段 實體主體

例如:

HTTP/1.1 200 ok
Date: Tue, 10 Jul 2017 03 18 14:45:15 GMT
Content-Length: 686
Content-Type:text/html

* 資源主體的實體(entity body)
<html>
... ...

HTTP的特點

客戶端和服務器端

HTTP協議規定,請求由客戶端發出,最後服務器端響應該請求並返回。即肯定是先從服務器端開始建立通信的。

有時候,按實際情況,兩臺計算機作為客戶端和服務器端的角色有可能會互換,但就進一條通信路線而言,服務器端和客戶端的角色是確定的。而用HTTP協議能夠明確地區分哪端是客戶端,哪端是服務器端。

狀態

HTTP是無狀態(stateless)的協議。這樣設計可以更快地處理大量事務,確保協議的可伸縮性,減少服務器的CPU以及內存資源的消耗。

可以使用cookie技術管理HTTP的狀態。cookie通過在請求和相應報文中寫入cookie信息來控制客戶端的狀態。cookie會根據從服務器端發送的響應報文內的一個叫做Set-Cookie的首部字段信息,通知客戶端保存Cookie信息。當下次客戶端再往該服務器發送請求時,客戶端會自動在請求報文中加入Cookie值後發送出去。服務器端發現客戶端發送過來的cookie後,會檢查究竟是哪一個客戶端發送過來的連接請求,然後對比服務器上的記錄,最後得到用戶的狀態信息。

持久連接與管線化

當我們訪問一個帶有很多插圖的HTML頁面時,會發生很多訪問這些圖片的HTTP請求。如果每次請求都需要重復建立和斷開TCP連接會造成很多額外的性能開銷。

於是,在HTTP1.1中,所有連接默認采取持久連接(keep-alive)的策略,即在任意一端沒有明確提出斷開連接,則保持TCP連接狀態。這樣減少了因為TCP連接帶來的額外開銷和服務端的負載,使得HTTP請求和響應能夠盡早結束,加快web頁面的顯示速度。

而管線化技術在持久連接的基礎上,使得多個請求能夠並行發送,不發生阻塞現象。(不必等到一個請求返回響應後才發送另一個請求),這明顯的提高了請求的速度。


作者: 聖經的旋律
鏈接:https://www.imooc.com/article/17058
來源:慕課網
本文原創發布於慕課網 ,轉載請註明出處,謝謝合作!

從零開始學HTTP (二) HTTP結構與基礎