前面講到TCP和UDP是屬于網絡層的協(xié)議,Socket是網絡層和應用層之間的一個抽象層,本篇現在來了解一下常用的兩個應用層協(xié)議:HTTP和WebSocket。
1. HTTP
1.1 簡介
HTTP協(xié)議是Hyper Text Transfer Protocol(超文本傳輸協(xié)議)的縮寫,是用于從萬維網服務器傳輸超文本到本地瀏覽器的傳送協(xié)議。
HTTP是一個屬于應用層的面向對象的協(xié)議,由于其簡捷、快速的方式,適用于分布式超媒體信息系統(tǒng)。它于1990年提出,經過幾年的使用與發(fā)展,得到不斷地完善和擴展。
HTTP協(xié)議工作于客戶端-服務端架構為上。瀏覽器作為HTTP客戶端通過URL向HTTP服務端即WEB服務器發(fā)送所有請求。Web服務器根據接收到的請求后,向客戶端發(fā)送響應信息。
1.2 主要特點
1、簡單快速:客戶向服務器請求服務時,只需傳送請求方法和路徑。請求方法常用的有GET、HEAD、POST。每種方法規(guī)定了客戶與服務器聯系的類型不同。由于HTTP協(xié)議簡單,使得HTTP服務器的程序規(guī)模小,因而通信速度很快。
2、靈活:HTTP允許傳輸任意類型的數據對象。正在傳輸的類型由Content-Type加以標記。
3.無連接:無連接的含義是限制每次連接只處理一個請求。服務器處理完客戶的請求,并收到客戶的應答后,即斷開連接。采用這種方式可以節(jié)省傳輸時間。
4.無狀態(tài):HTTP協(xié)議是無狀態(tài)協(xié)議。無狀態(tài)是指協(xié)議對于事務處理沒有記憶能力。缺少狀態(tài)意味著如果后續(xù)處理需要前面的信息,則它必須重傳,這樣可能導致每次連接傳送的數據量增大。另一方面,在服務器不需要先前信息時它的應答就較快。
5、支持B/S及C/S模式。
1.3 消息請求Request
客戶端發(fā)送一個HTTP請求到服務器的請求消息包括以下格式:
請求行(request line)、請求頭部(header)、空行和請求數據四個部分組成。
POST / HTTP1.1
Host:www.wrox.com
User-Agent:Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022)
Content-Type:application/x-www-form-urlencoded
Content-Length:40
Connection: Keep-Alive
name=Professional%20Ajax&publisher=Wiley
請求行:用來說明請求方法,要訪問的資源以及所使用的HTTP版本.
請求頭:緊接著請求行(即第一行)之后的部分,用來說明服務器要使用的附加信息,詳情見下圖。
空行:請求頭部后面的空行是必須的,即使第四部分的請求數據為空,也必須有空行。
請求數據:請求數據也叫主體,可以添加任意的其他數據。
請求方法

請求頭

1.4 消息響應Response
一般情況下,服務器接收并處理客戶端發(fā)過來的請求后會返回一個HTTP的響應消息,消息也由四個部分組成,分別是:狀態(tài)行、消息報頭、空行和響應正文。
HTTP/1.1 200 OK
Date: Fri, 22 May 2009 06:07:21 GMT
Content-Type: text/html; charset=UTF-8
<html>
<head></head>
<body>
<!--body goes here-->
</body>
</html>
狀態(tài)行:由HTTP協(xié)議版本號, 狀態(tài)碼, 狀態(tài)消息 三部分組成。
消息報頭:用來說明客戶端要使用的一些附加信息
空行:消息報頭后面的空行是必須的
響應正文:服務器返回給客戶端的文本信息。
響應狀態(tài)碼
HTTP響應狀態(tài)碼由三位十進制數字組成,它們出現在由HTTP服務器發(fā)送的響應的第一行。響應碼分五種類型,由它們的第一位數字表示:
1xx:信息,請求收到,繼續(xù)處理
2xx:成功,行為被成功地接受、理解和采納
3xx:重定向,為了完成請求,必須進一步執(zhí)行的動作
4xx:客戶端錯誤,請求包含語法錯誤或者請求無法實現
5xx:服務器錯誤,服務器不能實現一種明顯無效的請求

2. WebSocket
對于WebSocket的講解,這位博主講得很詳細,值得推薦: