HTTP —— 超文本傳輸協議資源
Http協議是一個基于請求與響應模式的、無狀態(tài)的、應用層的協議。
? ? ? 請求與響應模式:只有在客戶端請求后,服務器才會返回相應的數據給客戶端。服務器處理完客戶的請求,并收到客戶的應答后,即斷開連接。
?????? 無狀態(tài)協議:同一個客戶端的這次請求和上次請求是沒有對應關系,對http服務器來說,它并不知道這兩個請求來自同一個客戶端。 為了解決這個問題, Web程序引入了Cookie機制來維護狀態(tài)。
??????? 在Http/1.1使用了持續(xù)連接:就是萬維網服務器在發(fā)送響應后仍會在一段時間內保持這條連接,使同一個客戶和該服務器可以繼續(xù)在這條連接上傳送后續(xù)的HTTP請求報文和響應報文。這種持續(xù)連接有兩種工作方式:非流水線方式和流水線方式。
??????? 非流水線方式:是客戶在收到前一個響應后才能發(fā)出下一個請求。
??????? 流水線方式:是客戶在收到Http的響應報文之前就能夠接著發(fā)送新的請求報文。
??????? HTTP協議以明文方式發(fā)送內容,不提供任何方式的數據加密,如果攻擊者截取了Web瀏覽器和網站服務器之間的傳輸報文,就可以直接讀懂其中的信息,因此,HTTP協議不適合傳輸一些敏感信息,比如:信用卡號、密碼等支付信息。
? ? ? ? 為了解決HTTP協議的這一缺陷,需要使用另一種協議:安全套接字層超文本傳輸協議HTTPS,為了數據傳輸的安全,HTTPS在HTTP的基礎上加入了SSL/TLS協議,SSL依靠證書來驗證服務器的身份,并為瀏覽器和服務器之間的通信加密。
HTTPS——用安全套接字層傳送的超文本傳輸協議,簡單講是HTTP的安全版
https是以安全為目標的HTTP通道,簡單講是HTTP的安全版,即HTTP下加入SSL/TLS層,然后才進入到運輸層傳輸,HTTPS的安全基礎是SSL/TLS,因此加密的詳細內容就需要SSL/TLS。
HTTPS和HTTP的區(qū)別主要如下:
1、https協議需要到ca申請證書,一般免費證書較少,因而需要一定費用。
2、http是超文本傳輸協議,信息是明文傳輸,https則是具有安全性的SSL/TLS加密傳輸協議。
3、http和https使用的是完全不同的連接方式,用的端口也不一樣,前者是80,后者是443。
4、http的連接很簡單,是無狀態(tài)的;https協議是由SSL/TLS + HTTP協議構建的可進行加密傳輸、身份認證的網絡協議,比http協議安全。
SSL/TLS
SSL:(Secure Socket Layer,安全套接字層),為Netscape所研發(fā),用以保障在Internet上數據傳輸之安全,利用數據加密(Encryption)技術,可確保數據在網絡上之傳輸過程中不會被截取。它已被廣泛地用于Web瀏覽器與服務器之間的身份認證和加密數據傳輸。SSL協議位于TCP/IP協議與各種應用層協議之間,為數據通訊提供安全支持。SSL協議可分為兩層: SSL記錄協議(SSL Record Protocol):它建立在可靠的傳輸協議(如TCP)之上,為高層協議提供數據封裝、壓縮、加密等基本功能的支持。 SSL握手協議(SSL Handshake Protocol):它建立在SSL記錄協議之上,用于在實際的數據傳輸開始前,通訊雙方進行身份認證、協商加密算法、交換加密密鑰等。
TLS:(Transport Layer Security,傳輸層安全協議),用于兩個應用程序之間提供保密性和數據完整性。TLS 1.0建立在SSL 3.0協議規(guī)范之上,是SSL 3.0的后續(xù)版本,可以理解為SSL 3.1,它是寫入了RFC的。該協議由兩層組成: TLS 記錄協議(TLS Record)和 TLS 握手協議(TLS Handshake)。較低的層為 TLS 記錄協議,位于某個可靠的傳輸協議(例如 TCP)上面。
http的請求與響應
狀態(tài)碼
Response 消息中的第一行叫做狀態(tài)行,由HTTP協議版本號, 狀態(tài)碼, 狀態(tài)消息
三部分組成。狀態(tài)碼用來告訴HTTP客戶端,HTTP服務器是否產生了預期的Response.HTTP/1.1中定義了5類狀態(tài)碼,
狀態(tài)碼由三位數字組成,第一個數字定義了響應的類別
1XX? 提示信息 - 表示請求已被成功接收,繼續(xù)處理
2XX? 成功 - 表示請求已被成功接收,理解,接受
3XX? 重定向 - 要完成請求必須進行更進一步的處理
4XX? 客戶端錯誤 -? 請求有語法錯誤或請求無法實現
5XX? 服務器端錯誤 -?? 服務器未能實現合法的請求
URL解析
URL(Uniform Resource Locator,統(tǒng)一資源定位符) 地址用于描述一個網絡上的資源,? 基本格式如下
schema://host[:port#]/path/.../[?query-string][#anchor]
scheme指定低層使用的協議(例如:http, https, ftp)
hostHTTP服務器的IP地址或者域名
port#HTTP服務器的默認端口是80,這種情況下端口號可以省略。
如果使用了別的端口,必須指明,例如 http://www.cnblogs.com:8080/
path訪問資源的路徑
query-string發(fā)送給http服務器的數據
anchor-錨
URL 的一個例子
http://www.mywebsite.com/sj/test/test.aspx?name=sviergn&x=true#stuff
Schema:? ? ? ? ? ? ? ?? http
host:? ? ? ? ? ? ? ? ?? www.mywebsite.com
path:? ? ? ? ? ? ? ? ?? /sj/test/test.aspx
Query String:? ? ?? name=sviergn&x=true
Anchor:? ? ? ? ? ? ? ?? stuff
iOS如何利用AFN進行HTTPS請求
1、需要的資源:服務器端.cer證書,客戶端.p12證書及密碼
2、新建一個類:繼承自AFHTTPSessionManager,需要設置一下AFSecurityPolicy,把模式設置為AFSSLPinningModeCertificate
//? 使用證書驗證模式
AFSecurityPolicy *securityPolicy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeCertificate];
// allowInvalidCertificates 是否允許無效證書(也就是自建的證書),默認為NO,如果是需要驗證自建證書,需要設置為YES
securityPolicy.allowInvalidCertificates = YES;
為了實現客戶端驗證,必須調用setSessionDidReceiveAuthenticationChallengeBlock并替換AFNetworking的默認實現,其中包括從client.p12里解析客戶端證書。
http和https參考自:http://www.cnblogs.com/li0803/archive/2008/11/03/1324746.html?