一篇文章瞭解HTTP
1.HTTP簡介
2.HTTP的工作方式
3.HTTP報文詳解
4.額外知識
HTTP簡介
只要能上網就能接觸到Http,超文字傳輸協議(HTTP,HyperText Transfer Protocol)是網際網路上應用最為廣泛的一種網路協議。Http是一個客戶端和服務端請求和應答的標準(TCP),是一種客戶端、伺服器應答式的的應用層傳輸協議,注意:伺服器是不可能主動向客戶端傳送資料的。Http協議傳輸資訊的基礎:TCP/IP協議模型,TCP/IP體系結構從下往上共分為4層:依次是:網路介面層,網際層(IP),運輸層(TCP,UDP),應用層,HTTP協議屬於最高層的應用層。通俗來講,Http就是計算機通過網路進行通訊的規則,是基於請求和響應,無狀態,應用層的協議,常基於TCP/IP協議傳輸資料,任何客戶端之間進行通訊都必須按照Http協議進行,否則無法進行連線。這個協議的功能是什麼呢?我們得知Web伺服器存放的是超文字資訊,而客戶端需要通過本協議傳輸所要訪問的超文字資訊,也就是客戶端通過http協議來獲得所要訪問的資訊。
HTTP的工作方式
那知道什麼是http後,那它的工作方式是什麼呢?
Http協議採用請求/響應的工作方式
其實從上圖可以知道Http請求/響應的步驟一共分為4步:
1.客戶端連線到伺服器端
客戶端首先跟伺服器端建立一個TCP套接字連線
2.客戶端傳送HTTP請求
通過TCP連線,客戶端向伺服器端傳送請求報文,請求報文由請求行、請求頭部、空行和請求資料4部分組成
3.伺服器接受請求並返回HTTP響應
伺服器響應請求,定位請求的資源,然後將資源複本寫到TCP中,由客戶端去讀取,一個響應報文由狀態行、響應頭部、空行和響應資料4部分組成
4.釋放TCP連線
若連線模式是close,則伺服器會主動關閉TCP連線,客戶端就被被動關閉連線;若連線模式為keep-alive則該連線會保持一段時間。
根據上面的步驟就可以知道當我們從瀏覽器輸入一個人URL後面後,按回車所經歷的流程:
1.瀏覽器會向DNS伺服器解析出該域名所對應的IP地址。
2.地址解析後,瀏覽器根據該地址和伺服器端建立TCP連線。
3.瀏覽器發出讀取資原始檔的HTTP請求,將請求報文資料發給伺服器。
4.伺服器根據瀏覽器發出的請求做出迴應,並且把瀏覽器所要請求的資源文字傳送給瀏覽器。
5.釋放TCP連線,瀏覽器顯示所要請求的內容。
HTTP報文詳解
從上面我們知道了Http的基本工作方式,下面來分析Http的報文,Http報文分為請求報文和響應報文。
HTTP請求報文
Http請求報文由請求行、請求頭部、空行和請求資料4個部分組成,如下圖:
請求行的組成
請求行遊請求方法,請求地址(主機域名,資源路徑等)和協議版本組成。
請求方法最常用就是GET、POST這兩種方法另外據我所知還有:PUT,PATCH,DELETE,HEAD等。
這裡簡單說一下Get和Post方法:
Get的請求方式的請求引數直接拼接在URL後,格式是url?param1=XXX¶m2=XXX....引數是暴露在位址列中,並且URL的長度是受限制的。
Post的請求方式引數是封裝在請求體中,傳遞的引數是不受限制的。
另外Get方法一般是請求資源,而Post一般是向指定資源去提交資料。
請求地址:扣殺統一資源定位符,就是要訪問資源的路徑,組成是:<協議>://<主機>:<埠>/<路徑>,例子:http://www.absh.com/home,協議版本:HTTP1.1,主機地址是www.absh.com,請求路徑是/home,埠有時可以省略。
協議版本:就是HTTP的版本號,一般有HTTP/1.0和HTTP/1.1
那麼上面例子的請求行是:GET /home HTTP/1.1
請求頭部的組成
請求頭部就是為請求報文添加了一些資訊,以鍵值對(名/值)的方式,作用是宣告客戶端、伺服器報文的相關資訊。下面列出一些通用的Header:
下面通過訪問百度來看看請求頭是怎麼樣的(用谷歌瀏覽器為例):
隨便訪問一個頁面,開啟網頁除錯(F12) 點選NetWork 隨便點選一個資源就可看出,上圖Headers就是請求頭部。General是通用頭部,Request Headers是請求報文。
注意:頭部的最後會有空行,表示請求頭部結束。
請求資料
如果以Get形式是沒有請求資料的,其作用就是存放需要傳送給伺服器的資料資訊;如果以Post請求有三種方式:資料交換,以鍵值對的形式,分部分形式。詳細例子可以自行查詢。
HTTP響應報文
Http響應報文同樣由狀態行,響應頭部,空行和響應資料組成,如下圖:
狀態行的組成
由協議版本,狀態碼,狀態碼描述,協議版本和請求報文的協議版本是一致的,狀態碼是指伺服器返回的響應狀態碼,狀態碼描述是描述狀態的資訊。
下面簡單列舉一下狀態碼:
響應頭部
同理,響應頭部的作用也是聲明瞭客戶端,伺服器端報文的部分資訊,也是用名/值的方式。下面列一下常用的響應頭部:
具體可以從上面訪問百度的圖片Response Headers找到。
響應資料
響應資料就是返回給客戶端所需要的資料資訊,使用方式也跟請求報文中的請求資料方式一致,一樣分為:鍵值對形式,任意型別的資料交換,分部分形式。
總結
請求報文分為請求行,請求頭,請求資料。
響應報文分為狀態行,響應頭,響應體。
額外知識
Https協議:是以安全為目標的Http通道,就是在Http加入了SSL層,就是Http的安全版,作用是建立一條資訊保安的通道保證資料傳輸的安全,另外就是確定網站的真實性。
Http和Https區別如以下幾點:
1.http資訊是明文傳輸,https是具有安全性的ssl加密傳輸協議
2.https協議需要到ca申請證書,http則不用
3.http和https用的是完全不同的連線方式,埠不一樣,http是80,https是443
4.http訪問的URL開頭格式是http://而https訪問的URL開頭格式是https://
HTTPS的優點
1.https協議可認證客戶端和伺服器,確保將資料傳輸對應的伺服器端和伺服器端。
2.https協議是由ssl協議+http協議構建的可加密傳輸,身份認證的協議,比http協議安全。
HTTPS的缺點
1.https協議握手階段所花費的時間比較長。
2.https連線快取不如http高效,會對資料增加開銷。
3.SSL證書通常需要繫結IP,不能同在一IP繫結多個域名。
4.加密範圍有限,在黑客面攻擊、拒絕服務攻擊並不能特別有效的防禦。
掃一掃 關注我的公眾號
這裡不僅有code,還有你想要的一切