全面理解HTTP協議

2021-07-13 08:47:07 字數 3111 閱讀 3616

引言:作為一名軟體工程web專業學生,對於http的熟悉掌握是必不可少的,特此做記錄,打造自己的http棧。
我們經常接觸到的就是url了,它就是我們訪問web的乙個字串位址,那麼uri是什麼呢?他們是什麼關係呢?url:uniform resource location 統一資源定位符uri:uniform resource identifier 統一資源識別符號這也就是說,uri是一種資源的標識;而url也是一種uri,也是一種資源的標識,但它也指明了如何定位locate到這個資源。uri是一種抽象的資源標識,既可以是絕對的,也可以是相對的。但是url是一種uri,它指明了定位的資訊,必須是絕對的。

客戶端和伺服器端通過相互傳送報文進行通訊,要深刻理解http協議,就需要理解報文的格式和內容。

無論是請求報文還是響應報文都需要有報文首部,當然報文主體並不是必需的。一般來說,請求報文的格式如下:

簡單的報文形式:

get / http/1.1    //請求行,包含用於請求的方法,請求的uri,http版本//以下為各種首部欄位host: www.baidu.com

connection: keep-alive

upgrade-insecure-requests: 1user-agent: mozilla/5.0...

accept-encoding: gzip, deflate, sdch

accept-language: zh-cn,zh;q=0.8

響應報文的格式如下:

http/1.1 200 ok   //狀態行,包含表明響應結果的狀態碼,原因短語和http版本//以下為各種首部欄位server: bfe/1.0.8.5date: tue, 06 oct 2015 14:48:28 gmt

content-type: text/html;charset=utf-8transfer-encoding: chunked

connection: keep-alive

cache-control: private

傳送http的方法有許多種,最常用的便是get和post,下面就這兩種進行詳細地說明。

getget方法用來請求訪問uri所指定的資源,(我想訪問你的某個資源)並不對伺服器上的內容產生任何作用結果;每次get的內容都是相同的。get方式把請求所需要的引數放到url中,直接就可以在url中看見,有大小限制。

postpost方法用來傳輸實體主體,目的並不是獲取響應的主體內容,(我要把這條資訊告訴你),post方式則是把內容放在報文內容中,因此只要報文的內容沒有限制,它的大小就沒有限制。

總結get用於獲取某個內容,post用於提交某種資料請求。按照使用場景來說,一般使用者註冊的內容屬於私密的,這應該使用post方式;而針對某一內容的查詢,為了快速的響應,可以使用get方式。

http是一種無狀態協議,也就是每一次傳送都是一次新的開始,伺服器並不知道也沒有必要知道當前連線的客戶端是否之前有過交集,那麼當需要進行儲存使用者登入狀態時,則出現了麻煩,這個時候使用cookie來儲存狀態。cookie會根據伺服器端傳送的響應報文內的乙個叫做set-cookie的首部字段,通知客戶端儲存cookie(儲存在自己的電腦裡),當下次客戶端傳送請求時,cookie值會被新增到請求報文中傳送出去。

顯而易見每次請求會造成無謂的tcp連線建立和斷開,增加通訊量的開銷。

引入持久連線

持久連線的特點是,只要任意一端沒有明確提出斷開連線,則保持tcp連線狀態。目前http/1.1中預設為持久連線。

管線化可以同時並行傳送多個請求,不需要乙個乙個等待響應了。

http+加密+認證+完整性保護 = https一些登陸介面和購物結算介面使用https通訊,也就是改用https://,https說簡單點就是它的通訊介面部分被ssl和tls協議代替而已。

在這裡主要說一下formbase認證,也就是表單認證。

使用cookie來管理session

客戶端把使用者ie和密碼等登入資訊放入報文的實體部分,以post方式傳送給伺服器。

伺服器進行身份認證,產生sessionid,加入到set-cookie內,返回給客戶端。

客戶端接收到sessionid後,將其加入cookie,下次請求時,瀏覽器會自動傳送cookie。

在傳輸過程中,一種安全地儲存密碼方式是,先利用給密碼加鹽的方式增加額外資訊,再使用雜湊hash函式計算出雜湊值後儲存。

https與ssl(上篇)

https與ssl(下篇)

全面理解http協議

全面理解HTTP

引言 作為一名軟體工程web專業學生,對於http的熟悉掌握是必不可少的,特此做記錄,打造自己的http棧。我們經常接觸到的就是url了,它就是我們訪問web的乙個字串位址,那麼uri是什麼呢?他們是什麼關係呢?url uniform resource location 統一資源定位符 uri un...

Http協議理解

http是hypertext transfer protocal 超文字傳輸協議 的簡寫,它是tcp ip協議集中的乙個應用層協議,用於定義web瀏覽器與web伺服器之間交換資料的過程以及資料本身的格式。http 1.0是早期版本,當前版本是http 1.1,http ng處於試驗階段,是下一代的h...

理解HTTP協議

http協議,超文字傳輸協議hyper text transfer protocol的縮寫,用於從全球資訊網伺服器傳輸超文字到本地瀏覽器的協議。它基於tcp ip通訊協議來傳輸資料 html檔案,查詢結果等 http協議屬於應用層。它允許傳輸任意型別的資料物件,正在傳輸的型別由content typ...