HTTP–Hyper Text Transfer Protocol,超文本傳輸協定,是一種建立在TCP上的無狀态連接配接。
基本工作流程:
1.用戶端發送一個HTTP請求,說明用戶端想要通路的資源和請求的動作
2.服務端收到請求之後,服務端開始處理請求,并根據請求做出相應的動作通路伺服器資源
3.最後通過發送HTTP響應把結果傳回給用戶端。
其中一個請求的開始到一個響應的結束稱為事務,當一個事物結束後還會在服務端添加一條日志條目。
1.TCP/IP 通信傳輸流
發送端在層與層之間傳輸資料時,每經過一層時必定會被打上一個該層所屬的首部資訊。反之,接收端在層與層傳輸資料時,每經過一層時會把對應的首部消去。
這種把資料資訊包裝起來的做法稱為封裝(encapsulate)。
2.HTTP 協定用于用戶端和伺服器端之間的通信
3.通過請求和響應的交換達成通信
3.1http請求
HTTP請求是用戶端往服務端發送請求動作,告知伺服器自己的要求。
HTTP請求由狀态行、請求頭、請求正文三部分組成:
狀态行:包括請求方式Method、資源路徑URL、協定版本Version;
請求頭:包括一些通路的域名、使用者代理、Cookie等資訊;
請求正文:就是HTTP請求的資料。
備注:請求方式Method一般有GET、POST、PUT、DELETE,含義分别是擷取、修改、上傳、删除,其中GET方式僅僅為擷取伺服器資源,方式較為簡單,是以在請求方式為GET的HTTP請求資料中,請求正文部分可以省略,直接将想要擷取的資源添加到URL中。
下圖所示就是GET的請求,沒有請求正文。
下圖所示為POST請求的格式,有狀态行、請求頭、請求正文三部分。
3.2http響應
響應資料格式
伺服器收到了用戶端發來的HTTP請求後,根據HTTP請求中的動作要求,服務端做出具體的動作,将結果回應給用戶端,稱為HTTP響應。
HTTP響應由三部分組成:狀态行、響應頭、響應正文;
狀态行:包括協定版本Version、狀态碼Status Code、回應短語;
響應頭:包括搭建伺服器的軟體,發送響應的時間,回應資料的格式等資訊;
響應正文:就是響應的具體資料。
備注:我們主要關心并且能夠在用戶端浏覽器看得到的是三位數的狀态碼,不同的狀态碼代表不同的含義,其中
常見狀态碼的含義
200---OK/請求已經正常處理完畢
301---/請求永久重定向
302---/請求臨時重定向
304---/請求被重定向到用戶端本地緩存
400---/用戶端請求存在文法錯誤
401---/用戶端請求沒有經過授權
403---/用戶端的請求被伺服器拒絕,一般為用戶端沒有通路權限
404---/用戶端請求的URL在服務端不存在
500---/服務端永久錯誤
503---/服務端發生臨時錯誤
HTTP響應模型
伺服器收到HTTP請求之後,會有多種方法響應這個請求,下面是HTTP響應的四種模型:
單程序I/O模型
服務端開啟一個程序,一個程序僅能處理一個請求,并且對請求順序處理;
多程序I/O模型
服務端并行開啟多個程序,同樣的一個程序隻能處理一個請求,這樣服務端就可以同時處理多個請求;
複用I/O模型
服務端開啟一個程序,但是呢,同時開啟多個線程,一個線程響應一個請求,同樣可以達到同時處理多個請求,線程間并發執行;
複用多線程I/O模型
服務端并行開啟多個程序,同時每個程序開啟多個線程,這樣服務端可以同時處理程序數M*每個程序的線程數N個請求。
4.HTTP封包格式
HTTP封包是HTTP應用程式之間傳輸的資料塊,HTTP封包分為HTTP請求封包和HTTP響應封包,但是無論哪種封包,他的整體格式是類似的,大緻都是由起始、首部、主體三部分組成,起始說明封包的動作,首部說明封包的屬性,主體則是封包的資料。接下來具體說明。
4.1請求封包
請求封包的起始由請求行構成(有些資料稱為狀态行,名字不一樣而已,都是指的一個東西),用來說明該請求想要做什麼,由Method、URL、Version 三個字段組成,注意每個字段之間都有一個空格。
其中<Method>字段有不同的值:
GET --- 通路伺服器的資源
POST --- 向伺服器發送要修改的資料
HEAD --- 擷取伺服器文檔的首部
PUT --- 向伺服器上傳資源
DELETE--- 删除伺服器的資源
<URL>字段表示伺服器的資源目錄定位
<Version>字段表示使用的http協定版本
首部部分由多個請求頭(也叫首部行)構成,那些首部字段名有如下,不全:
Accept 指定用戶端能夠接收的内容格式類型
Accept-Language 指定用戶端能夠接受的語言類型
Accept-Ecoding 指定用戶端能夠接受的編碼類型
User-Agent 使用者代理,向伺服器說明自己的作業系統、浏覽器等資訊
Connection 是否開啟持久連接配接(keepalive)
Host 伺服器域名
...
主體部分就是封包的具體資料。
4.2相應封包
響應封包的起始由狀态行構成,用來說明伺服器做了什麼,由Method、URL、Version 三個字段組成,同樣的每個字段之間留有空格;
<Status-Code> 上邊已經說明;
首部由多個響應頭(也叫首部行)組成, 首部字段名如下,不全:
Server 伺服器軟體名,Apache/Nginx
Date 伺服器發出響應封包的時間
Last-Modified 請求資源的最後的修改時間
...
主體部分是響應封包的具體資料。
5.HTTP 是不儲存狀态的協定
使用 HTTP 協定,每當有新的請求發送時,就會有對應的新響應産生。協定本身并不保留之前一切的請求或響應封包的資訊。這是為了更快地處理大量事務,確定協定的可伸縮性,而特意把 HTTP 協定設計成如此簡單的
6.使用方法下達指令
7.網站通路量
IP IP通路量
相同的公網IP計算一次,就是同一個區域網路内的所有使用者通路一個網站,但是他們都是借助一個公網IP去通路那個網站的(NAT),是以這也隻能算作一個IP通路量。換一次公網IP則會加1。
PV 網頁通路量
使用者通路的頁面數就是PV通路量,同一個區域網路的不同使用者,而且就算是同一個使用者,隻要重新整理一次網站頁面,PV通路量就加1,三個通路量的值往往數PV的值最大。
UV 訪客通路量
這裡的訪客不是使用者,而是電腦,一台電腦算一個訪客,即使是同一台電腦的不同使用者,通路同一個網站UV也隻能加1,隻有更換電腦才會使UV加1,因為服務端會記錄用戶端電腦的資訊。