1. 程式人生 > >iOS開發之HTTP與HTTPS網路請求

iOS開發之HTTP與HTTPS網路請求

在這裡插入圖片描述

HTTP是網際網路中應用最為廣泛的一種網路協議,在進入正文之前,先解釋什麼是網路協議?網路協議為計算機網路中進行資料交換而建立的規則、標準或約定的集合。網路協議是由以下三個要素組成:語義語法時序

(1) 語義  語義是解釋控制資訊每個部分的意義。它規定了需要發出何種控制資訊,以及完成的動作與做出什麼樣的響應。
(2) 語法  語法是使用者資料與控制資訊的結構與格式,以及資料出現的順序。
(3) 時序  時序是對事件發生順序的詳細說明。

更加形象的描述三要素即:語義表示要做什麼,語法表示要怎麼做,時序表示做的順序。

國際標準化組織(ISO)在1978年提出了“開放系統互聯參考模型”,即著名的OSI/RM模型

(Open System Interconnection/Reference Model)。它將計算機網路體系結構的通訊協議劃分為七層,自下而上依次為:物理層(Physics Layer)、資料鏈路層(Data Link Layer)、網路層(Network Layer)、傳輸層(Transport Layer)、會話層(Session Layer)、表示層(Presentation Layer)、應用層(Application Layer)。其中每一層都規定有明確的服務及介面標準;把使用者的應用程式作為最高層;除了最高層外,中間的每一層都向上一層提供服務,同時又是下一層的使用者。

另外還有一種參考模型,TCP/IP參考模型

(TCP/IP Reference Model)。是首先由ARPANET所使用的網路體系結構。這個體系結構在它的兩個主要協議出現以後被稱為TCP/IP參考模型。這一網路協議共分為四層:網路訪問層網際網路層傳輸層應用層。需要注意的一點是,TCP/IP協議不是TCP和IP這兩個協議的合稱,而是指因特網整個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協議安全。

更過開發技巧請掃碼關注
在這裡插入圖片描述