1. 程式人生 > >前端 學習筆記(二) http詳解

前端 學習筆記(二) http詳解

以前看到有關http的東西,我都會繞過去,決定這東西沒太大用處。現在既然決定成為一名優秀的web前端工程師,那麼這個時候就應該知難而不退。

一、什麼是HTTP協議?

HTTP是Hyper Text Transport Protocol的縮寫,望文知意便是 超 文字 傳輸 協議。

二、HTTP協議能做什麼?

首先我們要知道,我們在使用網頁瀏覽器(web browser)時候的流程,我們首先在瀏覽器中的位址列中輸入URL(Uniform Resource Locator 統一資源定位符 簡單來說是網址),瀏覽器根據URL從web伺服器端獲取檔案資源,從而顯示出web頁面。

在上面過程中web使用的協議規範就是HTTP,協議就是規則的約定。

我們把通過傳送請求達到獲取伺服器資源的web瀏覽器稱為客戶端(client)。將web類比於現實生活,傳送請求以獲取資源的就是顧客(客戶端),提供資源的就是服務員(伺服器端)。

圖一

總而言之,HTTP就是負責在客戶端請求資源,在伺服器端響應的協議。

三 、與HTTP密切相關的其他協議。

在實際應用中,我們要使用HTTP協議就少不了其他的協議的輔助。

1、負責傳輸的IP協議

IP(Internet Protocal)即網際協議。可能有人會把IP和IP地址搞混,IP的作用是把資料準確傳遞給對方,而要達到準確傳遞給對方的目的則需要用到IP地址。IP地址是指明瞭節點在網路中

被分配到的地址,因此IP地址可以看做是IP協議完成的一個條件。

2、負責傳輸可靠地TCP協議

TCP(transport control protocal)即傳輸控制協議。它提供可靠的位元組流服務。位元組流服務是指為了傳輸方便,將大塊的資料分割為文段為單位的資料包進行傳輸。可靠的傳輸服務是指能

夠確定資料包是否傳送到對方。

如何確定資料包傳送到對方?

TCP協議採用了三次握手策略(three-way handshaking)如圖二

圖二

3、負責域名解析的DNS

DNS即(Domain name system)

上文說到確定主機在網際網路中的位置可以由IP地址確定,而IP地址是一串無規律的數字這並不適合讓人類來記憶,相比於無規律的數字人類更傾向於用字母和數字的組合(主機名或者域名)來記憶,DNS的作用就是將域名轉換成對應的IP地址,或者將IP地址轉換為對應的域名。如圖三。

圖三

4、如圖四所示給出 在HTTP協議工作時,其他協議的職責。

圖四

之前有寫過http的操作流程(談談HTTP協議的流程),有小夥伴說寫得很清楚,一路看下來沒有晦澀的地方,但是也希望我能把http協議的細節講解清楚。於是在深夜默默地敲鍵盤給那位小夥伴一個交代。

一、HTTP協議通過請求(request)和響應(response)完成通訊

在之前的文章裡(談談HTTP協議的流程)有介紹到http協議是瀏覽器和web瀏覽器之間的通訊規範,那麼瀏覽器和web瀏覽器之間究竟是如何完成通訊的呢?

實際上,瀏覽器和伺服器之間是通過請求和響應的交替來完成通訊的如圖一

圖一

這麼一個請求和響應的的互動就構成了客戶端(瀏覽器)和伺服器之間的通訊。

下面如圖二,給出一個例項

圖二

圖二中客戶端發給伺服器的請求報文內容為

GET /index.htm HTTP/1.1 Host: hacker.jp 1、GET是一個請求方法,表示請求伺服器的型別(後面我會介紹其他的的方法)。

2、/index.htm是一個URI,表示要求訪問的資源物件。

3、HTTP/1.1表示客戶端使用的HTTP協議版本是1.1。

整個請求報文的含義是 請求訪問http://hacker.jp主機上的/index.htm的頁面資源

圖二中接收到請求報文伺服器端傳送給客戶端的響應報文為

HTTP/1.1 200 ok Date:Tue, 10 jul 2017 10:50:15 GMT Content-Length: 362 Content-Type: text/html

…… 1、HTTP/1.1代表伺服器對應的HTTP版本

2、200 ok 代表處理結果的狀態碼和原因短語 表示:

3、Date:Tue, 10 jul 2017 10:50:15 GMT表示建立響應的時間

4、下面空一行之後的內容為資源實體的主體,也就是伺服器返回給客戶端(瀏覽器)要現實的東西。

二、HTTP報文

之前一直在講請求報文、響應報文,那麼到底什麼是報文呢?

1、HTTP報文:用於http協議互動的資訊叫做http報文。報文字身是由多行資料構成的字串文字。http報文通常由報文首部和報文主體兩部分組成,兩者之間由最初出現的空行劃分。結構如圖三所示:

圖三

(1)報文首部:客戶端或伺服器端傳送的請求或響應報文的內容及屬性。

(2)空行(回車+換行):用來區分報文首部和報文主體。

(3)報文主體:應該要送的資料

2、請求報文:客戶端發出的報文叫做請求報文。結構如圖四所示:

圖四

(1)請求行:包括了客戶端的請求方法,URI、HTTP版本。

(2)請求首部欄位:包括了請求的附加資訊如客戶端的資訊,響應的優先順序。

(3)通用首部欄位:請求報文和響應報文都會使用的報文。

(4)實體首部欄位:補充了與實體有關的資源資訊,如實體更新的時間。

(5)報文主體:一般來說請求報文在使用GET方法的時候沒有報文主體,在使用post方法的時候才有。(方法我會在下面詳細介紹)

3、響應報文:伺服器端發出的報文叫做響應報文。結構如圖五所示:

圖五

(1)響應報文狀態行:包括HTTP版本、狀態碼。

(2)響應報文首部欄位:伺服器端向客戶端傳送響應報文使用的首部包括相應的附加內容,要求客戶端補充的訊息等。

(3)通用首部欄位:請求報文和響應報文都會使用的報文。

(4)實體首部欄位:補充了與實體有關的資源資訊,如實體更新的時間。

(5)報文主體:對於響應報文來說報文體一般是傳給客戶端的資料。

接下來給一張幫大家更好地理解

三、客戶端向伺服器請求的HTTP方法

1、 GET:獲取資源 如圖七

圖七

2、POST:傳輸實體主體 如圖八

圖八

3、PUT:傳輸檔案 如圖九

圖九

4、HEAD:獲得報文首部 如圖十

HEAD方法和GET方法一樣都是從伺服器端獲取資源,只是HEAD方法獲取的是報文首部,用來確定客戶端輸入的URI的有效性和資源更新的日期時間。

圖十

5、DELETE:刪除檔案 如圖十一

圖十一

6:、OPTIONS:詢問支援的方法 如圖十二

客戶端用來詢問伺服器端支援哪一些方法

五、HTTP是無狀態(stateless)協議

http協議是無狀態協議即不儲存狀態。大家看下圖片感受下

無狀態協議的優點:

由於不需要儲存記錄,所以減少伺服器的CPU和記憶體的資源的消耗。畢竟客戶端一多起來儲存記錄的話對於伺服器端來說是一個巨大的消耗。

無狀態協議的缺點:比如當用戶登入到淘寶,他轉跳到淘寶的其他頁面後,也需要保持登入狀態。針對這種情況,web為了能夠掌握是誰傳送出的請求,需要儲存使用者的狀態。如何儲存呢?那就是cookie技術

六、Cookie技術

針對http協議的無狀態特性帶來的弊端:無法儲存使用者的狀態。cookie技術應運而生。

cookie技術通過在請求和響應報文中寫入Cookie資訊來控制(或者說記錄)客戶端的狀態。

1、Cookie技術會根據從伺服器端傳送的響應報文內的一個叫做Set-Cookie的首部欄位資訊,通知客戶端儲存Cookie。

2、客戶端再向伺服器端傳送請求的時候,客戶端會在請求報文中加入Cookie值後傳送出去。

伺服器端會檢查客戶端傳送的請求中有沒有Cookie值,然後對比伺服器上的記錄,最後確定是哪一個客戶端,之前的資訊狀態是什麼.

這樣一來,伺服器就能夠分辨出傳送請求的客戶端究竟是哪一個了。

感想:雖然說詳解HTTP協議,但是寫到最後發現一篇文章根本不夠寫的……從晚上11點寫到了凌晨一點,爬到床上睡了一覺,然後在第二天才把整篇文章完成,只希望這篇文章能夠讓大家對Http協議有一個更清晰的認識。最後感覺學習某樣技術,最好還能夠多看基本不一樣的書從裡面提取殊途同歸的思想,這樣的話往往能對這樣技術有一個更輸入的理解。