1. 程式人生 > >一篇文章瞭解HTTP

一篇文章瞭解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&param2=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,還有你想要的一切