HTTP是幹什麼的?編程
HTTP 是一個網絡傳輸協議,是專門用來幫你 傳輸 Web 內容 的。大部分網站都是經過 HTTP 協議來傳輸 Web 頁面、以及 Web 頁面上包含的各類東西(圖片、CSS 樣式、JS 腳本)。【HTTPS自己並不是協議,而是標準的HTTP協議架在SSL/TLS協議之上的一種結構。(一種不太合適的說法能夠認爲是兩種協議的疊加】。瀏覽器
SSL/TLS是幹什麼的?安全
全稱「Secure Sockets Layer」的縮寫,中文叫作「安全套接層」。由網景公司在上世紀90年代中期設計的。網絡
發明這個的緣由是:由於原先互聯網上使用的 HTTP 協議是明文的,存在不少缺點——好比傳輸內容會被偷窺(嗅探)和篡改。發明 SSL 協議,就是爲了解決這些問題。到了1999年,SSL 由於應用普遍,已經成爲互聯網上的事實標準。IETF 就在那年把 SSL 標準化。標準化以後的名稱改成 TLS(是「Transport Layer Security」的縮寫),中文叫作「傳輸層安全協議」。
能夠把這二者並列稱呼(SSL/TLS),由於這二者實際上是同一個東西的不一樣階段。學習
(簡單一句話:就是對信息加密傳輸防止被 竊取&篡改 。之前叫SSL 後來被標準化後更名爲TLS)網站
HTTPS是幹什麼的?網絡傳輸協議
HTTPS 協議,說白了就是「HTTP 協議」和「SSL/TLS 協議」的組合。能夠把 HTTPS 大體理解爲——「HTTP over SSL」或「HTTP over TLS」(反正 SSL 和 TLS 差很少,都是指的同一個東西)。加密
HTTP協議的特色spa
1.HTTP的版本和歷史.net
現在用的 HTTP 協議,版本號是 1.1(也就是 HTTP 1.1)。這個 1.1 版本是1995年末開始起草的(技術文檔是 RFC2068),並在1999年正式發佈(技術文檔是 RFC2616)。
在 1.1 以前,還有曾經出現過兩個版本「0.9 和 1.0」,其中的 HTTP 0.9 【沒有】被普遍使用,而 HTTP 1.0 被普遍使用過。
另外,如今(2015年) IETF 已經發布 HTTP 2.0 的標準了。【如今名字叫:HTTP/2】
2.HTTP 和 TCP之間的關係
簡單地說,TCP 協議是 HTTP 協議的基石——HTTP 協議須要依靠 TCP 協議來傳輸數據。
網絡分層模型中,TCP稱爲"傳輸層協議",HTTP稱爲"應用層協議",有不少常見的應用層協議是以 TCP 爲基礎的,好比「FTP、SMTP、POP、IMAP」等。
TCP 被稱爲「面向鏈接」的傳輸層協議。你只需知道:傳輸層主要有兩個協議,分別是 TCP 和 UDP。TCP 比 UDP 更可靠。你能夠把 TCP 協議想象成某個水管,發送端這頭進水,接收端那頭就出水。而且 TCP 協議可以確保,先發送的數據先到達(與之相反,UDP 不保證這點)。
3.HTTP協議如何使用TCP鏈接
HTTP 對 TCP 鏈接的使用,分爲兩種方式:俗稱「短鏈接」和「長鏈接」(「長鏈接」又稱「持久鏈接」,英文叫作「Keep-Alive」或「Persistent Connection」)
假設有一個網頁,裏面包含好多圖片,還包含好多【外部的】CSS 文件和 JS 文件。在「短鏈接」的模式下,瀏覽器會先發起一個 TCP 鏈接,拿到該網頁的 HTML 源代碼(拿到 HTML 以後,這個 TCP 鏈接就關閉了)。而後,瀏覽器開始分析這個網頁的源碼,知道這個頁面包含不少外部資源(圖片、CSS、JS)。而後針對【每個】外部資源,再分別發起一個個 TCP 鏈接,把這些文件獲取到本地(一樣的,每抓取一個外部資源後,相應的 TCP 就斷開)
相反,若是是「長鏈接」的方式,瀏覽器也會先發起一個 TCP 鏈接去抓取頁面。可是抓取頁面以後,該 TCP 鏈接並不會當即關閉,而是暫時先保持着(所謂的「Keep-Alive」)。而後瀏覽器分析 HTML 源碼以後,發現有不少外部資源,就用剛纔那個 TCP 鏈接去抓取此頁面的外部資源。
在 HTTP 1.0 版本,【默認】使用的是「短鏈接」(那時候是 Web 誕生初期,網頁相對簡單,「短鏈接」的問題不大);到了1995年末開始制定 HTTP 1.1 草案的時候,網頁已經開始變得複雜(網頁內的圖片、腳本愈來愈多了)。這時候再用短鏈接的方式,效率過低下了(由於創建 TCP 鏈接是有「時間成本」和「CPU 成本「)。因此,在 HTTP 1.1 中,【默認】採用的是「Keep-Alive」的方式。
對稱加密 和 非對稱加密是幹什麼的?
加密:就是把「明文」變成「密文」
解密:就是把「密文」變爲「明文」
在這兩個過程當中,都須要一個關鍵的東西——叫作「密鑰」
對稱加密: 「加密」和「解密」使用【相同的】密鑰。
非對稱加密技術:「加密」和「解密」使用【不一樣的】密鑰。
CA證書的原理及用途 (之後分篇細說)
爲何要用HTTPS呢?
兼容性:
1. HTTPS 仍是要基於 TCP 來傳輸(若是改成 UDP 做傳輸層,不管是 Web 服務端仍是瀏覽器客戶端,都要大改,動靜太大了)
2. 單獨使用一個新的協議,把 HTTP 協議包裹起來(所謂的「HTTP over SSL」,其實是在原有的 HTTP 數據外面加了一層 SSL 的封裝。HTTP 協議原有的 GET、POST 之類的機制,基本上原封不動)打個比方:若是原來的 HTTP 是塑料水管,容易被戳破;那麼現在新設計的 HTTPS 就像是在原有的塑料水管以外,再包一層金屬水管。一來,原有的塑料水管照樣運行;二來,用金屬加固了以後,不容易被戳破。
可擴展性:
HTTPS 至關因而「HTTP over SSL」。SSL/TLS除了能跟 HTTP 搭配,還可以跟其它的應用層協議搭配。 能夠跟不少經常使用的應用層協議(好比:FTP、SMTP、POP、Telnet)搭配,來強化這些應用層協議的安全性。接着剛纔打的比方:若是把 SSL/TLS 視做一根用來加固的金屬管,它不只能夠用來加固輸水的管道,還能夠用來加固輸煤氣的管道。
保密性:
HTTPS 須要作到足夠好的保密性。可以對抗嗅探(行話叫 Sniffer)。所謂的「嗅探」,通俗而言就是監視你的網絡傳輸流量。若是你使用明文的 HTTP 上網,就知道你在訪問哪些網站的哪些頁面。
HTTPS 還要能對抗其它一些稍微高級的攻擊手法——好比「重放攻擊」
完整性(防篡改)
在發明 HTTPS 以前,因爲 HTTP 是明文的,不但容易被嗅探,還容易被篡改。
舉個例子:
好比我們天朝的網絡運營商(ISP)都比較流氓,常常有網友抱怨說訪問某網站(原本是沒有廣告的),居然會跳出不少中國電信的廣告。爲啥會這樣捏?由於你的網絡流量須要通過 ISP 的線路才能到達公網。若是你使用的是明文的 HTTP,ISP 很容易就能夠在你訪問的頁面中植入廣告。
因此,當初設計 HTTPS 的時候,還有一個需求是「確保 HTTP 協議的內容不被篡改」
真實性(防假冒)
舉個例子:
你由於使用網銀,須要訪問該網銀的 Web 站點。那麼,你如何確保你訪問的網站確實是你想訪問的網站?(這話有點繞口令)
有些天真的同窗會說:經過看網址裏面的域名,來確保。爲啥說這樣的同窗是「天真的」?由於 DNS 系統自己是不可靠的(尤爲是在設計 SSL 的那個年代,連 DNSSEC 都還沒發明)。因爲 DNS 的不可靠(存在「域名欺騙」和「域名劫持」),你看到的網址裏面的域名【未必】是真實的!因此,HTTPS 協議必須有某種機制來確保「真實性」的需求(至於如何確保, 之後會細聊)。
以上內容整理自:大神 編程隨想 的博客 地址http://blog.csdn.net/program_think?viewmode=contents
主要是最近蘋果的HTTPS 強制政策,乾脆下點功夫研究一下HTTPS。整理出來供各位網友查看學習