iOS開發之HTTP與HTTPS網路請求
HTTP是網際網路中應用最為廣泛的一種網路協議,在進入正文之前,先解釋什麼是網路協議?網路協議為計算機網路中進行資料交換而建立的規則、標準或約定的集合。網路協議是由以下三個要素組成:語義、語法、時序。
(1) 語義 語義是解釋控制資訊每個部分的意義。它規定了需要發出何種控制資訊,以及完成的動作與做出什麼樣的響應。
(2) 語法 語法是使用者資料與控制資訊的結構與格式,以及資料出現的順序。
(3) 時序 時序是對事件發生順序的詳細說明。
更加形象的描述三要素即:語義表示要做什麼,語法表示要怎麼做,時序表示做的順序。
國際標準化組織(ISO)在1978年提出了“開放系統互聯參考模型”,即著名的OSI/RM模型
另外還有一種參考模型,TCP/IP參考模型
下面一幅圖解釋兩種分層之間對應關係:
從上圖中可以看出,HTTP是應用層中的一種協議。那麼HTTP到底是什麼呢?
##HTTP,超文字傳輸協議(HyperText Transfer Protocol)
HTTP是一個客戶端和伺服器端請求和應答的標準。HTTP是客戶端瀏覽器或其他程式與Web伺服器之間的應用層通訊協議。在Internet上的Web伺服器上存放的都是超文字資訊,客戶機需要通過HTTP協議傳輸所要訪問的超文字資訊。HTTP包含命令和傳輸資訊,不僅可用於Web訪問,也可以用於其他因特網/內聯網應用系統之間的通訊,從而實現各類應用資源超媒體訪問的整合。
通常HTTP訊息包括客戶機向伺服器的請求訊息和伺服器向客戶機的響應訊息。這兩種型別的訊息由一個起始行,一個或者多個頭域,一個指示頭域結束的空行和可選的訊息體組成。HTTP的頭域包括通用頭,請求頭,響應頭和實體頭四個部分。每個頭域由一個域名,冒號(:)和域值三部分組成。域名是大小寫無關的,域值前可以新增任何數量的空格符,頭域可以被擴充套件為多行,在每行開始處,使用至少一個空格或製表符。
HTTP通訊的基本單位是報文,HTTP報文由從客戶機到伺服器的請求和從伺服器到客戶機的響應構成。包括請求報文和響應報文。請求報文格式如下:
請求行 - 通用資訊頭 - 請求頭 - 實體頭 - 報文主體
請求行以方法欄位開始,後面分別是 URL 欄位和 HTTP 協議版本欄位,並以 CRLF 結尾。
響應報文格式如下:
狀態行 - 通用資訊頭 - 響應頭 - 實體頭 - 報文主體
其中狀態碼元由3位數字組成,表示請求是否被理解或被滿足。
##狀態碼
常見的狀態碼對應的含義
HTTP請求方法包括GET、POST、PUT、DELETE、PATCH、HEAD、
OPTIONS、TRACE。其中GET和POST最為常用。
GET和POST的區別
從語義角度來說,GET是從指定的資源請求資料,POST是向指定的資源提交要被處理的資料。通俗點將,GET是獲取資料,POST是更新資料。
具體區別可以大致總結為一下幾點:
(1) GET的URL可見,POST的URL不可見;
(2) GET請求可以被快取,POST不會被快取;
(3) GET請求可以保留在瀏覽器歷史記錄中,POST不會;
(4) GET請求有長度限制,2048個位元組,POST長度沒有限制;
(5) GET請求是冪等性的,POST是非冪等性的;
(6) GET請求的安全性沒有POST高。
##HTTP連線流程
在Http工作之前,Web瀏覽器通過網路和Web伺服器建立鏈連線,該連線是通過TCP來完成的,上文說過,TCP協議和IP共同組成了Internet,即著名的TCP/IP協議族,HTTP是比TCP更高的應用層協議,一般TCP介面的埠號是80。
TCP被稱為“面向連線”的傳輸層協議,需知道的是,傳輸層主要有兩個協議,分別是 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狀態,完成三次握手。 完成三次握手,客戶端與伺服器開始傳送資料。
四次揮手:第一次握手:TCP傳送一個FIN(結束),用來關閉客戶到服務端的連線。
第二次握手:服務端收到這個FIN,他發回一個ACK(確認),確認收到 序號為收到序號+1,和SYN一樣,一個FIN將佔用一個序號。
第三次握手:服務端傳送一個FIN(結束)到客戶端,服務端關閉客戶端的連線。
第四次握手:客戶端傳送ACK(確認)報文確認,並將確認的序號+1,這樣關閉完成。
###延伸思考:TCP和DUP的區別?
##HTTPS(:Hyper Text Transfer Protocol over Secure Socket Layer)
HTTPS是以安全為目標的HTTP通道,簡單講是HTTP的安全版,即HTTP+SSL/TSL
HTTPS使用埠443,而不是象HTTP那樣使用埠80來通訊。
SSL使用40位關鍵字作為RC4流加密演算法,這對於商業資訊的加密是合適的。
HTTPS的建立流程
(1)客戶使用https的URL訪問伺服器,要求與伺服器建立SSL連線。
(2)伺服器收到客戶端請求後,會將網站的證書資訊(證書中包含公鑰)傳送一份給客戶端。
(3)客戶端的瀏覽器與伺服器開始協商SSL連線的安全等級,也就是資訊加密的等級。
(4)客戶端的瀏覽器根據雙方同意的安全等級,建立會話金鑰,然後利用網站的公鑰將會話金鑰加密,並傳送給網站。
(5)伺服器利用自己的私鑰解密出會話金鑰。
(6)伺服器利用會話金鑰加密與客戶端之間的通訊。
如下圖所示:
HTTPS和HTTP的區別主要如下:
1、https協議需要到ca申請證書,一般免費證書較少,因而需要一定費用。
2、http是超文字傳輸協議,資訊是明文傳輸,https則是具有安全性的ssl加密傳輸協議。
3、http和https使用的是完全不同的連線方式,用的埠也不一樣,前者是80,後者是443。
4、http的連線很簡單,是無狀態的;HTTPS協議是由SSL+HTTP協議構建的可進行加密傳輸、身份認證的網路協議,比http協議安全。
更過開發技巧請掃碼關注