Http協議的簡介
一、首先來一段網上的經典問題,在網路中,傳輸資料需要面臨的三個問題:
1、客戶端是如何知道所請求的內容的位置?
2、當知道了所求的內容後,如何去獲取內容?
3、所求的內容將以何種形式來呈現在客戶端來便於客戶去識別?
大家可以先自己想想看。
-----------------------------------------------------------------------------------------------------------------
二、接下來我來公佈答案,上面的3個問題實際上使用到了3
1、統一資源定位符(URL)
2、超文字傳輸協議(Http)
3、超文字標記語言(HTML)
這篇文章將主要講解Http協議。首先就是這是一個應用層的傳輸協議。Http的網路層次如下圖:
可以看出Http協議是基於TCP/IP協議的。而TCP的連線可以理解為程序與程序之間的通訊。這時是需要Socket的。那什麼事Socket呢?我的理解很簡單就是IP+TCP/UDP+程序埠號。
TCP的連線需要3次握手,關閉需要4次握手。這些都是很重要的,我會另做總結的。
對了,這裡推薦給大家一個比較好的可以觀察Http連線的應用軟體叫Fiddle。大家可以用用試試。
三、Http的請求和響應
1、請求(Request)
有3部分組成:請求行、http協議頭、請求體(內容,是可有可無的)
說的這裡就不得不提一下http的請求方式有兩種:Get和Post。
他們兩個的最大的區別就是:就是上面說的可有可無的東西。即請求體。Get請求是不存在請求體的,他主要是用於從伺服器中獲取內容的。而Post是由客戶端向伺服器傳送內容的方式,這裡的內容就會在請求體中,從而獲取伺服器中的內容。所以Post請求必須具有請求體。
舉個例子:大家在看網頁時,隨便點開一個論壇網站,這實際上就是Get請求。但是這時想在論壇上下資源的時候會提示登陸,然後你就寫入你的使用者名稱和密碼,單擊登陸。好了,這個過程就是一個
2、響應(response)
這部分也是由三個部分組成的:狀態行、http協議頭和返回的內容。
其中狀態行會提示你的響應是否成功。其中狀態行中出現的狀態碼是200表示響應成功。如果是404或者是500等表示你響應失敗。
四、http如何進行狀態的保持
Http協議是無狀態的。對於接收Http協議請求的伺服器來說,並不會知道每一次的請求是來自同一個客戶端還是其他的客戶端。每一次的請求對於伺服器都是陌生的。所以我們需要額外的手段來進行處理。
這裡要提一下Cookie技術。Http是使用了Cookie來保持狀態的。具體的過程如下圖:
這個過程就和你去圖書館借書一樣,你第一次去圖書館。誰認識你啊,來了是吧。可以給你借書,不過還要辦張借書證。這個借書證就是Cookie。當你下次還書或者再次借書的時候記得帶上借書證。好的,現在圖書館管理員拿著你的借書證就認識你了。這樣你就和圖書館保持著一種借書還書的狀態啦。
同理,客戶端和伺服器端的借書證就是Cookie了。
說到Cookie就會有人想到Session。
Session它是JSP的九大內建物件之一。那什麼是Session呢?我的理解是每一個使用者和伺服器之間的一次會話就是一個Session。Web中是這樣解釋的:使用者通過瀏覽器進入某個頁面到關閉這個頁面所經歷的時間被稱為一個Session。Session是儲存在伺服器中的,比如當我們在訪問某一個伺服器時,我們在瀏覽器中不停的切換頁面。這個時候就需要伺服器的Session來判斷(這裡會需要SessionID的,一個32為的16進位制數)這個使用者是不是同一個使用者。
而我們的Cookie是儲存在每一個使用者的客戶端瀏覽器中的。