什么是Http協(xié)議
協(xié)議是指計算機通信網(wǎng)絡中兩臺計算機之間進行通信所必須共同遵守的規(guī)定或規(guī)則,超文本傳輸協(xié)議(HTTP)是一種通信協(xié)議币励,它允許將超文本標記語言(HTML)文檔從Web服務器傳送到客戶端的瀏覽器子姜。
HTTP協(xié)議是無狀態(tài)的
http協(xié)議是無狀態(tài)的,同一個客戶端的這次請求和上次請求是沒有對應關系,對http服務器來說习柠,它并不知道這兩個請求來自同一個客戶端蒜焊。 為了解決這個問題倒信, Web程序引入了Cookie機制來維護狀態(tài)。HTTP 的無狀態(tài)特性簡化了服務器的設計泳梆,使服務器更容易支持大量并發(fā)的HTTP 請求鳖悠。
HTTP消息的結構
Request結構圖

- 第一部分叫請求行,
請求行由方法字段榜掌、URL 字段 和HTTP 協(xié)議版本字段 3 個部分組成,他們之間使用空格隔開乘综。常用的 HTTP 請求方法有 GET憎账、POST、HEAD卡辰、PUT鼠哥、DELETE、OPTIONS看政、TRACE朴恳、CONNECT
- 第二部分叫請求頭
請求頭部由關鍵字/值對組成,每行一對允蚣,關鍵字和值用英文冒號“:”分隔
- 第三部分是body. header和body之間有個空行
請求體不在 GET 方法中使用于颖,而是在POST 方法中使用。POST 方法適用于需要客戶填寫表單的場合嚷兔。與請求包體相關的最常使用的是包體類型 Content-Type 和包體長度 Content-Length;
Response結構圖
HTTP/version-number表示HTTP協(xié)議的版本號森渐, status-code 和message
工作原理
HTTP 協(xié)議采用請求/響應模型∶拔客戶端向服務器發(fā)送一個請求報文同衣,服務器以一個狀態(tài)作為響應。
以下是 HTTP 請求/響應的步驟:
- 客戶端連接到web服務器:HTTP 客戶端與web服務器建立一個 TCP 連接;
- 客戶端向服務器發(fā)起 HTTP 請求:通過已建立的TCP 連接壶运,客戶端向服務器發(fā)送一個請求報文;
- 服務器接收 HTTP 請求并返回 HTTP 響應:服務器解析請求耐齐,定位請求資源,服務器將資源副本寫到 TCP 連接蒋情,由客戶端讀取;
- 釋放 TCP 連接:若connection 模式為close埠况,則服務器主動關閉TCP 連接,客戶端被動關閉連接棵癣,釋放TCP 連接;若connection 模式為keepalive辕翰,則該連接會保持一段時間,在該時間內可以繼續(xù)接收請求;
- 客戶端瀏覽器解析HTML內容:客戶端將服務器響應的 html 文本解析并顯示;
例如:在瀏覽器地址欄鍵入URL狈谊,按下回車之后會經歷以下流程:
1喜命、瀏覽器向 DNS 服務器請求解析該 URL 中的域名所對應的 IP 地址;
2、解析出 IP 地址后河劝,根據(jù)該 IP 地址和默認端口 80壁榕,和服務器建立 TCP 連接;
3、瀏覽器發(fā)出讀取文件(URL 中域名后面部分對應的文件)的HTTP 請求丧裁,該請求報文作為 TCP 三次握手的第三個報文的數(shù)據(jù)發(fā)送給服務器;
4护桦、服務器對瀏覽器請求作出響應,并把對應的 html 文本發(fā)送給瀏覽器;
5煎娇、釋放 TCP 連接;
6二庵、瀏覽器將該 html 文本并顯示內容;
HTTP 持久連接
HTTP1.0 使用的是非持久連接贪染,主要缺點是客戶端必須為每一個待請求的對象建立并維護一個新的連接,即每請求一個文檔就要有兩倍RTT(Round-Trip Time: 往返時延催享,在計算機網(wǎng)絡中它也是一個重要的性能指標杭隙,它表示從發(fā)送端發(fā)送數(shù)據(jù)開始,到發(fā)送端收到來自接收端的確認(接收端收到數(shù)據(jù)后便立即發(fā)送確認)因妙,總共經歷的時延;) 的開銷痰憎。因為同一個頁面可能存在多個對象,所以非持久連接可能使一個頁面的下載變得十分緩慢攀涵,而且這種短連接增加了網(wǎng)絡傳輸?shù)呢摀吃拧TTP1.1 使用持久連接keepalive,所謂持久連接以故,就是服務器在發(fā)送響應后仍然在一段時間內保持這條連接蜗细,允許在同一個連接中存在多次數(shù)據(jù)請求和響應,即在持久連接情況下怒详,服務器在發(fā)送完響應后并不關閉TCP 連接炉媒,而客戶端可以通過這個連接繼續(xù)請求其他對象。
Https是什么
HTTPS(Secure Hypertext Transfer Protocol)安全超文本傳輸協(xié)議 它是一個安全通信通道昆烁,它基于HTTP開發(fā)吊骤,用于在客戶計算機和服務器之間交換信息。它使用安全套接字層(SSL)進行信息交換静尼,簡單來說它是HTTP的安全版白粉。 它是由Netscape開發(fā)并內置于其瀏覽器中,用于對數(shù)據(jù)進行壓縮和解壓操作茅郎,并返回網(wǎng)絡上傳送回的結果蜗元。HTTPS實際上應用了Netscape的安 全全套接字層(SSL)作為HTTP應用層的子層或渤。(HTTPS使用端口443系冗,而不是象HTTP那樣使用端口80來和TCP/IP進行通信。)SSL使 用40 位關鍵字作為RC4流加密算法薪鹦,這對于商業(yè)信息的加密是合適的掌敬。HTTPS和SSL支持使用X.509數(shù)字認證,如果需要的話用戶可以確認發(fā)送者是誰池磁。
Https與Http主要區(qū)別
- 協(xié)議基礎不同:Https在Http下加入了SSL層奔害,
- 通訊方式不同:Https在數(shù)據(jù)通信之前需要客戶端、服務器進行握手(身份認證)地熄,建立連接后华临,傳輸數(shù)據(jù)經過加密,通信端口443端考。Http傳輸數(shù)據(jù)不加密雅潭,明文揭厚,通信端口80。
SSL協(xié)議基礎
SSL協(xié)議位于TCP/IP協(xié)議與各種應用層協(xié)議之間扶供,本身又分為兩層:
SSL記錄協(xié)議(SSL Record Protocol):建立在可靠傳輸層協(xié)議(TCP)之上筛圆,為上層協(xié)議提供數(shù)據(jù)封裝、壓縮椿浓、加密等基本功能太援。
SSL握手協(xié)議(SSL Handshake Procotol):在SSL記錄協(xié)議之上,用于實際數(shù)據(jù)傳輸前扳碍,通訊雙方進行身份認證提岔、協(xié)商加密算法、交換加密密鑰等笋敞。
SSL協(xié)議通信過程
(1) 瀏覽器發(fā)送一個連接請求給服務器;服務器將自己的證書(包含服務器公鑰S_PuKey)唧垦、對稱加密算法種類及其他相關信息返回客戶端;
(2) 客戶端瀏覽器檢查服務器傳送到CA證書是否由自己信賴的CA中心簽發(fā)。若是液样,執(zhí)行4步;否則振亮,給客戶一個警告信息:詢問是否繼續(xù)訪問。
(3) 客戶端瀏覽器比較證書里的信息鞭莽,如證書有效期坊秸、服務器域名和公鑰S_PK,與服務器傳回的信息是否一致澎怒,如果一致褒搔,則瀏覽器完成對服務器的身份認證。
(4) 服務器要求客戶端發(fā)送客戶端證書(包含客戶端公鑰C_PuKey)喷面、支持的對稱加密方案及其他相關信息星瘾。收到后,服務器進行相同的身份認證惧辈,若沒有通過驗證琳状,則拒絕連接;
(5) 服務器根據(jù)客戶端瀏覽器發(fā)送到密碼種類,選擇一種加密程度最高的方案盒齿,用客戶端公鑰C_PuKey加密后通知到瀏覽器;
(6) 客戶端通過私鑰C_PrKey解密后念逞,得知服務器選擇的加密方案,并選擇一個通話密鑰key边翁,接著用服務器公鑰S_PuKey加密后發(fā)送給服務器;
(7) 服務器接收到的瀏覽器傳送到消息翎承,用私鑰S_PrKey解密,獲得通話密鑰key符匾。
(8) 接下來的數(shù)據(jù)傳輸都使用該對稱密鑰key進行加密叨咖。
上面所述的是雙向認證 SSL 協(xié)議的具體通訊過程,服務器和用戶雙方必須都有證書。由此可見甸各,SSL協(xié)議是通過非對稱密鑰機制保證雙方身份認證仰剿,并完成建立連接,在實際數(shù)據(jù)通信時通過對稱密鑰機制保障數(shù)據(jù)安全性