HTTP和HTTPS

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的請求與響應

請求分為3部分:請求行,請求頭,請求體

響應:響應行,響應頭,響應體

狀態(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?

http://www.cnblogs.com/wxgblogs/p/5641405.html?

http://www.mahaixiang.cn/internet/1233.html?

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容