1. 程式人生 > 實用技巧 >http 基礎的簡單理解

http 基礎的簡單理解

http 協議用於客戶端和服務端間的通訊

客戶端: 發起訪問資源請求的一端,資源內容可為文字,圖片等等
服務端: 響應資源請求的一端
必定是客戶端先發起請求,伺服器端才會響應
下面看一個具體請求

其中客戶端第一列第一項表示發起請求的方法,第二項表示URI(訪問的資源物件),第三項表示使用的協議
合起來看,表示的是以http協議的get方法訪問某個資源的 index.html 物件
從第二列開始,則為可選的請求首部欄位

接下來看看客戶端返回的內容
第一行分別為:協議及版本,請求處理結果的狀態碼和原因短語
第二行則為:返回日期
第三行和第四行為可選首部項,其中內容分別為主體長度和型別
再下面沒有顯示的則為傳送內容

http 是無狀態協議

也就是說,http 協議本身不對雙端的內容進行儲存,極大的加快了處理業務的速度。
但也有一定的弊端,例如當我們登陸一個網站主頁,想帶著登陸的狀態跳到另外一個頁面。就很難處理了
為了讓服務端知道是誰發起的請求,因此引進了 cookie 技術

cookie 通過在請求和響應中寫入內容來控制客戶端的狀態
當客戶端發起請求後,服務端在返回內容中會加入一個 set-Cooie 的傳遞給客戶端,當客戶端再次發起請求時,則會在請求報文中加入相應的值傳給服務端,此時,服務端就可以知道是誰發起了請求

// 請求報文
GET /index.html http/1.1
host:test.com
*無cookie相關資訊

// 響應報文
http/1.1 200 ok
date:日期
...
<set-cookie: sid = 1234; path:/....>
...

// 再次發起的請求報文
GET /index.html http/1.1
host:test.com
cookie: sid = 1234

http 常用的方法

get 和 post最為常見,其次還有put、head、delete等等, 不多贅述

持久連線和管線化

在 http/1.1 及之後,實現了http的持久化連線。
也就是說,只要其中一方不斷開連線,則會一直保持TCP連線
這也就為管線化的實現提供了可能
及傳送了一個請求之後,不需要等待響應,可以再接著傳送請求