圖解http,http基礎知識

weixin_34128501發表於2017-04-11

一、瞭解web及網路基礎

1-1、URI(統一資源識別符號)

URL(統一資源定位符),我們比較熟悉,URI是3個單詞的縮寫,Uniform Resource Identifier

URI用字串表示某一網際網路資源,而URL表示資源的地點,可見URL是URI的子集;採用HTTP協議時,協議方案就是http,除此之外,還有ftp、file等,標準的URI協議有30種方案左右。

2146831-499cae9ab386abe0.png
URI的基本格式

登入資訊:指定使用者名稱和密碼作為從伺服器端獲取資源時必要的登入資訊(身份認證),可選項。

查詢字串:針對已指定的檔案路徑內的資源,可以使用查詢字串傳入任意引數,可選項。

片段識別符號:使用片段識別符號通常可標識出已獲取資源中的子資源,可選項。

1-2、HTTP協議基本規定

一、HTTP傳送規則:HTTP協議規定,請求從客戶端發出,最後伺服器端響應該請求並返回,換句話說,伺服器端在沒有收到請求的時候,不會傳送響應,所以肯定是從客戶端開始建立通訊的。

二、HTTP無狀態:HTTP是一種不儲存狀態,即無狀態協議,不會對之前傳送過的請求進行資訊的儲存。這樣做的好處是可以快速處理大量事務。但是隨著網路的不斷髮展,這種無狀態的模式,出現了瓶頸,比如購物網站需要保持使用者的登入狀態,這樣伺服器才能知道是誰傳送的請求。雖然HTTP1.1是無狀態的協議,但是使用了cookie技術,可以儲存使用者的登入狀態

1-3、使用方法下達命令

2146831-1a7eb2d132e3459f.png
get、post和head方法介紹

1-4、HTTP持久化連結

在HTTP協議的初期版本中,每進行一次HTTP通訊都要斷開一次tcp連結,在早些時候,傳輸的都是文字類資訊,但是目前請求都是含有大量圖片的資訊,這樣tcp的不斷斷開重連會造成很大的開銷。

為了解決上述tcp連結的問題,HTTP1.1和部分HTTP1.0相出了持久連線(HTTP keep-alive)的方法,持久化連結的特點是:只要任意一端沒有明確提出斷開連結,則保持TCP連結狀態。http1.1預設都支援keep-alive

1-5、cookie的狀態管理

cookie會根據服務端傳送的一個叫做Set-Cookie的首部欄位資訊,通知客服端儲存Cookie,當下次客服端在往服務端傳送請求的時候,客服端會自動在請求報文中加入Cookie然後傳送過去,服務端接收到Cookie之後,對Cookie進行解析,然後找出是哪個使用者。

eg:

一、請求報文(沒有Cookie資訊的狀態)

GET /reader/HTTP/1.1
Host:hackr.jp
*首部欄位沒有cookie的相關資訊

二、響應報文(伺服器端生成Cookie資訊)

HTTP/1.1 200 OK
Date:Thu ,12 JUl 2012 07:12:20 GMT
Server: Apache
<Set-Cookie:sid=1342077140;path=/;expires=wed>
Content-Type:text/plain;charset=UTF-8

三、請求報文(自動傳送儲存的Cookie資訊)

GET /image/ HTTP/1.1
Host hackr.jp
Cookie:sid=1342077140

二、HTTP報文內的資訊

2-1、HTTP報文

用於HTTP協議互動的資訊

2146831-771e9394dc2f1f6c.png
請求報文和響應報文結構
2146831-58dfc74936cdbe16.png
請求報文和響應報文例項

請求行:包含用於請求的方法,請求的URI和HTTP版本

狀態行:包含表明響應結果的狀態碼,原因短語和HTTP版本

首部欄位:包含表示請求和響應的各種條件和屬性的各類首部,一般有4中首部,通用首部,請求首部,響應首部,實體首部。

2-2、編碼提升傳輸效率

常用的內容編碼有這幾種:

  • gzip (GNU zip)
  • compress (UNIX 系統的標準壓縮)
  • deflate (zlib)
  • identity (不進行編碼)

2-3、分割傳送的分塊傳輸編碼

在傳輸大容量資料的時候,經常採用分塊傳輸的方式

2-4、傳送多種資料的多部分物件集合

例如在寫郵件的時候,可以在郵件中插入音訊和視訊,還有文字多種不同型別的資料,這個時候就需要用到多種資料的多部分物件集合傳送

2-5、獲取指定範圍的請求資料

例如在下載電影的時候,突然斷網了,之前是需要重新下載的,但是可以使用Range: bytes=5001-,從5001位元組之後開始下載

2-6、內容協商,返回最合適的內容

同一個網站,有多份內容相同的頁面,比如中文和英文,雖然內容是一樣的,但是使用的語言不同,這個時候需用內容協商。Accept,Accept-Charset等等

三、HTTP首部欄位

2146831-1c9c685b0ab65105.jpg
通用首部欄位
2146831-87b5eecdf2694741.jpg
請求首部欄位
2146831-6c54291bca49c8e5.jpg
響應首部欄位
2146831-ea1adc1f19b83004.jpg
實體首部欄位

四、HTTPS協議

4-1、HTTPS協議介紹

http協議未對資訊進行加密,所以需要採用加密的形式進行傳輸,常用的加密方法有:ssl,tls,(secure socket layer)(transport layer security),在http協議上使用ssl就是https協議。

4-2、不驗證通訊方的身份可能遇到身份偽裝

http通訊不會進行身份的確認,所以可能出現雙方身份的偽裝,比如客戶端使用URI訪問伺服器的時候,響應的資料一定是指定的伺服器發出的資料嘛?伺服器傳送給客服端,一定是指定的客戶端嘛?

比如常見的DoS攻擊,就算是無意義的請求,也會響應。

ssl不僅可以加密資訊,還有身份驗證的作用(證書驗證)

4-3、資訊完整性

收到的資訊,可能被人為篡改,http無法證明通訊的完整性。像這種,在響應傳輸的過程中發起的攻擊,稱為中間人攻擊(man in the middle attack,MITM)

常用的http協議為了保證資訊完整性,一般採用MD5或者證書籤名,但是當簽名證書和md5資訊被人篡改,則無法保證資訊完整性。

4-4、HTTP+加密+認證+資訊完整性=HTTPS

2146831-9ac2a572c52509fd.png
https和http的關係

五、確認訪客的身份確認

http使用的身份認證:

  • BASIC認證(基本認證)--服務端放回401說明需要認證,然後輸入使用者名稱和密碼,使用base64加密,傳送給服務端,然後進行身份認證。
  • DIGEST認證(摘要認證)--服務端傳送隨機數,客戶端傳送摘要和計算結果。
  • SSL客服端認證
  • FormBase認證(基於表單認證)

由於使用上的便利性和安全性的問題,http協議標準提供的basic認證和digest認證幾乎不怎麼使用,另外ssl使用成本高,一般使用基於表單認證。

5-1、基於表單認證

基於表單的認證標準規範尚未有定論,一般會使用cookie管理session(會話)

2146831-6e909d391b7a068b.png
cookie管理session

閱讀原文

相關文章