一.http協議的定義
http(Hypertext transfer protocol)超文本傳輸協議,通過瀏覽器和服務器進行數據交互,進行超文本(文本、圖片、視頻等)傳輸的規定。也就是說,http協議規定了超文本傳輸所要遵守的規則。
二.http協議的特點
1.支持客戶/服務器模式。(C/S模式)
2.簡單快速:客戶向服務器請求服務時,只需傳送請求方法和路徑。請求方法常用的有GET、HEAD、POST。每種方法規定了客戶與服務器聯系的類型不同。由於HTTP協議簡單,使得HTTP服務器的程序規模小,因而通信速度很快。
3.靈活:HTTP允許傳輸任意類型的數據對象。正在傳輸的類型由Content-Type加以標記。
4.無連接:無連接的含義是限制每次連接只處理一個請求。服務器處理完客戶的請求,並收到客戶的應答后,即斷開連接。采用這種方式可以節省傳輸時間。
5.無狀態:HTTP協議是無狀態協議。無狀態是指協議對於事務處理沒有記憶能力。缺少狀態意味着如果后續處理需要前面的信息,則它必須重傳,這樣可能導致每次連接傳送的數據量增大。另一方面,在服務器不需要先前信息時它的應答就較快
三.http報文
1.請求報文

GET /wxisme HTTP/1.1
Host: www.cnblogs.com
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.0; zh-CN; rv:1.8.1) Gecko/20061010 Firefox/2.0
Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
Accept-Language: en-us,zh-cn;q=0.7,zh;q=0.3
Accept-Encoding: gzip,deflate
Accept-Charset: gb2312,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Proxy-Connection: keep-alive
Cookie: ASP.NET_SessionId=ey5drq45lsomio55hoydzc45
Cache-Control: max-age=0
簡單來說請求報文就是由請求行、請求頭、內容實體組成的,注意,每一行的末尾都有回車和換行,在內容實體和請求頭之間另有一個空行。其中請求行指定的是請求方法、請求URL、協議版本;請求頭是鍵值對的形式存在的,就是字段名:值;內容實體就是要傳輸的數據。稍后會對方法、請求頭字段做詳細的說明。
2.響應報文
HTTP/1.1 200 OK Date: Tue, 12 Jul 2016 21:36:12 GMT Content-Length: 563 Content-Type: text/html <html>
<body> Hello http!
</body>
</html>
簡單來說響應報文由狀態行、響應首部字段(響應頭)、響應實體組成,其中第一行是狀態行,依次包含HTTP版本,狀態碼和狀態短語組成;在一個回車換行之后是響應頭,也是鍵值對的形式,字段名:值;然后會有一個空行也包含回車換行,之后是響應實體,就是要傳輸的數據。在上面的例子當中就是一個非常簡單的HTML頁面。對於響應狀態碼,首部字段鍵值對稍后會有更加詳細的說明。
四.http請求方法
請求方法是客戶端用來告知服務器其動作意圖的方法。就像下達命令一樣。在HTTP1.1版本中支持GET、POST等近10種方法。需要注意的是方法名區分大小寫,需要用大寫字母。
五.http的響應狀態碼

六.http工作流程
第一步:建立TCP/IP連接,客戶端與服務器通過Socket三次握手進行連接
第二步:客戶端向服務端發起HTTP請求(例如:POST/login.html http/1.1)
第三步:客戶端發送請求頭信息,請求內容,最后會發送一空白行,標示客戶端請求完畢
第四步:服務器做出應答,表示對於客戶端請求的應答,例如:HTTP/1.1 200 OK
第五步:服務器向客戶端發送應答頭信息
第六步:服務器向客戶端發送請求頭信息后,也會發送一空白行,標示應答頭信息發送完畢,接着就以Content-type要求的數據格式發送數據給客戶端
第七步:服務端關閉TCP連接,如果服務器或者客戶端增Connection:keep-alive就表示客戶端與服務器端繼續保存連接,在下次請求時可以繼續使用這次的連接
七.https的基本概念
HTTPS:是以安全為目標的HTTP通道,簡單講是HTTP的安全版,即HTTP下加入SSL層,HTTPS的安全基礎是SSL,因此加密的詳細內容就需要SSL。
HTTPS協議的主要作用可以分為兩種:一種是建立一個信息安全通道,來保證數據傳輸的安全;另一種就是確認網站的真實性。
八.https的工作流程

第一步:客戶使用https的URL訪問Web服務器,要求與Web服務器建立SSL連接。
第二步:Web服務器收到客戶端請求后,會將網站的證書信息(證書中包含公鑰)傳送一份給客戶端。
第三步:客戶端的瀏覽器與Web服務器開始協商SSL連接的安全等級,也就是信息加密的等級。
第四步:客戶端的瀏覽器根據雙方同意的安全等級,建立會話密鑰,然后利用網站的公鑰將會話密鑰加密,並傳送給網站。
第五步:Web服務器利用自己的私鑰解密出會話密鑰。
第六步:Web服務器利用會話密鑰加密與客戶端之間的通信。



產生背景
HTTP(超文本傳輸協議)被用於在Web瀏覽器和網站服務器之間,以明文方式傳遞信息,不提供任何方式的數據加密,因此使用HTTP協議傳輸隱私信息(如:銀行卡號、密碼等支付信息)非常不安全。
為了解決這一安全缺陷,網景公司設計了SSL(Secure Sockets Layer)協議,在HTTP的基礎上加入了SSL(Secure Sockets Layer)協議,SSL依靠SSL證書來驗證服務器的身份,並為瀏覽器和服務器之間的通信加密。從而誕生了HTTPS(安全套接字層超文本傳輸協議)。
簡單來說,HTTPS協議="SSL+HTTP協議"構建的可進行加密傳輸、身份認證的網絡協議,是HTTP的安全版。
相同之處
大多情況下,HTTP和HTTPS是相同的,因為都是采用同一個基礎的協議,作為HTTP或HTTPS客戶端(瀏覽器),設立一個連接到Web服務器指定的端口。當服務器接收到請求,它會返回一個狀態碼以及消息,這個回應可能是請求信息、或者指示某個錯誤發送的錯誤信息。系統使用統一資源定位器 URI 模式,因此資源可以被唯一指定。整個過程中,唯一不同的只是一個協議頭(HTTPS)的說明,其他都是一樣的。
不同之處
HTTPS和HTTP的區別主要如下:
• 工作層:在OSI網絡模型中,HTTP工作於應用層,而HTTPS工作在傳輸層。
• 連接端口:HTTP標准端口是80,而HTTPS的標准端口是443。
• 傳輸方式:HTTP是超文本傳輸協議,信息是明文傳輸,而HTTPS是SSL加密傳輸協議。
• 工作耗時:HTTP耗時=TCP握手,而HTTPS耗時=TCP握手+SSL握手。
• 顯示形式:HTTP的URL以http://開頭,而HTTPS的URL以https://開頭。
• 費用:HTTP無需費用,而HTTPS需要到CA申請證書,一般免費證書較少,需要一定費用。
• 安全性:HTTP的連接很簡單,是無狀態的;HTTPS協議是由SSL+HTTP協議構建的可進行加密傳輸、身份認證的網絡協議,比HTTP協議安全。
HTTPS的優點
盡管HTTPS並非絕對安全,掌握根證書的機構、掌握加密算法的組織同樣可以進行中間人形式的攻擊,但HTTPS仍是現行架構下最安全的解決方案,主要有以下幾個有點:
• 使用HTTPS協議可認證用戶和服務器,確保數據發送到正確的客戶機和服務器;
• HTTPS是現行架構下最安全的解決方案,雖然不是絕對安全,但它大幅增加了中間人攻擊的成本。
• 谷歌曾在2014年8月份調整搜索引擎算法,並稱“比起同等HTTP網站,采用HTTPS加密的網站在搜索結果中的排名將會更高”。
更多優點可參閱SSL證書有什么用。
什么時候該使用HTTPS
當你訪問銀行網站、支付網關、購物網站、登錄頁、電子郵件之類需要敏感信息的網站時,應該使用 HTTPS。
