《圖解HTTP》
TCP/IP協議族各層:
應用層:FTP(文件傳輸協議);DNS(域名系統)…
傳輸層:TCP(傳輸控制協議);UDP(用戶數據報協議)
端到端,數據單位:數據段
網絡層:IP(網際協議)
主機到主機(可以跨不同鏈路),數據單位:數據包
尋址:IP地址—>MAC地址(用ARP協議)
路由:維護一張路由表,決定數據的傳輸路線
鏈路層:以太網,MAC地址,廣播(需要在同一個子網絡)
數據單位:幀
物理層:
數據單位:比特流
從頁面輸入url到頁面呈現的過程:
1.瀏覽器通過DNS解析得到url的ip地址
2.瀏覽器得到服務器的ip地址後,與服務端建立TCP(三次握手)連接
3.建立TCP連接後,瀏覽器向服務端發送HTTP請求
4.服務器響應http請求,將請求的資源發送給瀏覽器
5.瀏覽器釋放TCP連接
DNS解析:客戶端提出域名解析請求,並將該請求發送給本地域名服務器;
瀏覽器首先查詢本地緩存,若有該記錄,直接返回查詢結果;
查詢順序:1.瀏覽器緩存;2.系統緩存;3.路由器緩存
簡單的HTTP協議
1.HTTP規定,肯定是從客戶端開始建立通信的,服務器端在沒有接收到請求之前不會發送相應。
2.HTTP是無狀態協議
(使用session+cookie解決需要記錄狀態的情景:通過在請求和相應報文中寫入cookie信息)
3.HTTP的初始版本中,每進行一次通信就要斷開一次連接,而每一次的連接都對應了tcp的三次握手與四次斷開連接。
(1.0版本使用持久連接解決,好處:減少了tcp的重復建立和斷開造成的額外開銷。)
HTTP狀態碼
1XX:信息性狀態碼,接收的請求正在處理
2XX:成功狀態碼,請求正常處理完畢
3XX:重定向狀態碼,需要進行附加操作以完成請求
4XX:客戶端錯誤狀態碼,服務器無法處理請求
400:請求報文錯誤
401:用戶須認證
403:服務器拒絕資源的請求,如權限
404:服務器上沒有請求的資源
5XX:服務器錯誤狀態碼,服務器處理請求出錯
與HTTP協作的web服務器
web服務器,可以搭建獨立域名的web網站,也可以作為中轉服務器。
通信數據轉發應用程序:
1.代理:接收客戶端的請求,轉發給其他服務器,不改變請求url
客戶端 —GET /HTTP/1.1—> 代理服務器 —GET /HTTP/1.1—>源服務器(持有資源實體的服務器)
作用:
a. 緩存
b. 針對特定網站的訪問控制,如,客戶端 —GET /HTTP/1.1—>代理服務器,返回請求無法通過
分類:
a. 緩存代理/非緩存代理,代理轉發響應時,預先將資源保存在代理服務器上
b. 透明代理/非透明代理,對報文進行加工
2.網關:使通信線路上的服務器提供非HTTP協議服務
客戶端 —HTTP請求—> 網關 —非HTTP協議通信—> 非HTTP服務器
利用網關可以提高通信安全性,因為可在客戶端與網關的線路上加密。
如,網關可以連接數據庫;可以和信用卡結算系統聯動等…
3.隧道:建立一條與其他服務器的通信線路,使用SSL等加密手段通信,隧道本身不會去解析HTTP請求。
HTTP首部
通用首部(請求報文和響應報文都會使用):
connection:管理持久連接,close/keep-alive控制http的長連接
請求首部字段
accept:制定媒體類型
authorization:告知服務器用戶代理認證信息(收到401後,客戶端發給服務器)
host:相同ip下有多個域名的情況,host指定主機名和端口號
cookie:服務器接收到的cookie信息
響應首部字段
location:重定向(配合302)
proxy-authentication:代理服務器需要的認證信息(代理服務器發給客戶端需要認證的信息)
www-authentication:服務器需要的認證信息(服務器發給客戶端需要的認證信息)
set-cookie:開始狀態管理所使用的cookie信息(字段值:name;expire;path;domain;secure;httponly)
實體首部字段
allow:指定客戶端支持的方法,如get,post…
expires:緩存失效日期(源服務器發給緩存服務器,緩存服務器對資源做出相應時間的緩存)
確保web安全的HTTPS
HTTP的不足:
1.通信使用明文(不加密),內容可能被竊聽
解決:加密處理防止被監聽
可以通過SSL(安全套接層)或TLS(安全傳輸層協議)的組合使用,加密HTTP的整個通信線路。
2.不驗證對方的身份,有可能遭遇偽裝。
解決:SSL不僅提供加密,還使用了證書。
3.無法證明報文的完整性,有可能已遭篡改
解決:使用MD5或SHA-1等散列值校驗的方法
HTTPS=HTTP+加密+認證+完整性保護(與SSL組合使用的HTTP被稱為HTTPS)
通常HTTP直接和TCP通信,使用SSL時,先和SSL通信,再由SSL和TCP通信。
SSL:采用非對稱加密(公開密鑰加密)方式:
一把叫做私有密鑰(解密使用)
另一把叫公開密鑰(加密使用)(為了證明公開密鑰是可信的,服務器可以向數字證書認證機構CA提出申請)
發送密文的一方,使用對方的公開密鑰進行加密處理,對方收到被加密的信息,使用自己的私有密鑰進行解密
另外一種對稱加密(共享密鑰加密)方式:
加密解密使用同一個密鑰,所以需要把密鑰也發給對方,可是發送密鑰也是不安全的
確認訪問用戶身份的認證
BASIC基本認證
DIGEST摘要認證
SSL客戶端認證
FormBase基於表單認證
HTTP的瓶頸
一條連接上只能發送一個請求
請求只能從客戶端開始
解決:AJAX,websocket
《圖解HTTP》