學習HTTP之前,很必要了解一下關於Web網絡基礎。
TCP/IP協議族
1、應用層:應用層決定了向用戶提供應用 服務時的通信活動,比如FTP(文件傳輸協議)、DNS(域名系統)、HTTP(超文本傳輸協議)
應用層就像目的地
2、傳輸層:傳輸層對上層應用層提供處理網絡連接中的兩台計算機之間的數據傳輸,有兩個協議TCP(傳輸控制協議)、UDP(用戶數據協議)
傳輸層就像是馬路上的規則
在TCP協議中要通過三次握手才能建立可靠連接。
第一次握手:建立連接時,客戶端發送syn包(syn=j)到服務器,並進入SYN_SEND狀態,等待服務器確認;
第二次握手:服務器收到syn包,必須確認客戶的SYN(ack=j+1),同時自己也發送一個SYN包(syn=k),即SYN+ACK包,此時服務器 進入SYN_RECV狀態;
第三次握手:客戶端收到服務器的SYN+ACK包,向服務器發送確認包ACK(ack=k+1),此包發送完畢,客戶端和服務器進入 ESTABLISHED狀態,完成三次握手。
UDP和TCP的區別
最本質的區別就是TCP是面向連接的,而UDP是非面向連接的。
什么叫面向連接呢?事先為所發送的數據開辟出連接好的通道,然后再進行數據發送,像打電話,只能兩人打,第三人打就顯示占線
非面向連接:是指通信雙方不需要事先建立一條通信線路,而是把每個帶有目的地址的包(報文分組)送到線路上,由系統自主選定路線進行傳輸,就像寫信,不管對方有多忙,把信放到郵筒,就與自己無關系了。
TCP支持的服務有FTP、SMTP等,而UDP支持的服務有DNS、SNMP、QQ等
3、網絡層:網絡層用來處理在網絡上流動的數據包。包括IP協議。
網絡層就像馬路上的車,規定了數據傳輸的路線
IP地址指明了節點被分配的地址,MAC地址是指網卡所有的固有地址,通俗的理解IP地址就像快遞的終點地址,而MAC地址就像快遞到終點地址之間的間歇地址。
4、鏈路層:一些硬件部分,包括驅動、網卡和光纖等
鏈路層就像是馬路
各協議的職責
DNS是為了域名解析。
HTTP是為了生成針對目標Web服務器的HTTP請求報文(用HTTP交互的信息),並判斷是哪個報文
TCP是為了方便通信,將HTTP請求報文割成報文段,把每個報文段可靠傳給對方,又按照順序重組接收的報文段。
IP是為了搜索對方地址,一邊中轉一邊傳送。
告知服務器意圖的HTTP方法
GET:獲取資源
POST:傳輸實體主題
PUT:傳輸文件
HEAD:獲得報文首部
DELETE:刪除文件
OPTIONS:詢問支持的方法
TRACE:追蹤路徑
CONNECT:要求用隧道協議鏈接代理
詳細例子可參考http://www.cnblogs.com/six-moon/p/5151562.html
持久連接節省通訊量,持久連接就是只要任意一方沒有提出斷開連接,就一直連接。持久連接使得多數請求以管線化的方式發送可能,管線化就是從發送請求后需要等待並收到響應,才能發送下一個請求。
HTTP為無狀態協議,需要Cookie進行狀態管理,比如自己的登陸狀態,可以利用cookie控制自己的客戶端狀態
HTTP編碼
有時候我們用百度雲下載文件時,給的鏈接有時候是編碼的有時候是未經編碼的,編碼可提升傳輸速率。
HTTP常見狀態碼
HTTP通信數據轉發程序
代理:接收由客戶端發送的請求並轉發給服務器
網關:保證通信安全性
隧道:保證客戶端和服務器安全通信
安全的HTTPS
HTTP缺點:通信不加密內容會被竊聽
不驗證通信方的身份,遭遇偽裝
無法證明報名完整性,可能回被篡改
所以引入HTTPS
HTTP+加密+認證+完整性保護=HTTPS
加密:通過SSL(安全套接層)或TLS(安全傳輸協議)組合使用,加密HTTP的通信內容
HTTPS是采用混合加密機制,共享秘鑰+公開秘鑰的方式實現加密
認證:
基於HTTP功能的追加協議
什么是HTTP的瓶頸:更新的內容只能顯示在客戶端
解決方法:AJAX和SPYD
但是SPYD也無法真正消除瓶頸,因為計算機的一些硬件問題的存在,如網卡和CPU等
徹底解決問題的方法是:WebSocket,即web瀏覽器和web服務器之間全雙工通信標准。
優點是,直接發送數據,不用等待客戶端請求,一直保持連接狀態,且首部信息量少,通信量減少。
使用Cookie來管理Session
客戶端把用戶IE和密碼等登錄信息放入報文的實體部分,以POST方式發送給服務器。
服務器進行身份認證,產生SessionID,加入到Set-Cookie內,返回給客戶端。
客戶端接收到SessionID后,將其加入Cookie,下次請求時,瀏覽器會自動發送Cookie。
具體內容大家可以看下《圖解HTTP》這本書,講的真心不錯。