一. 網(wǎng)絡(luò)編程基礎(chǔ)
在移動互聯(lián)網(wǎng)時代橱夭,幾乎所有應(yīng)用都需要用到網(wǎng)絡(luò)躲撰,只有通過網(wǎng)絡(luò)跟外界進(jìn)行數(shù)據(jù)交互、數(shù)據(jù)更新弧圆,應(yīng)用才能保持新鮮赋兵、活力。一個好的移動網(wǎng)絡(luò)應(yīng)用不僅要有良好的UI和良好的用戶體驗也要具備實時更新數(shù)據(jù)的能力墓阀。網(wǎng)絡(luò)編程便是一種實時更新應(yīng)用數(shù)據(jù)的常用手段也是開發(fā)優(yōu)秀網(wǎng)絡(luò)應(yīng)用的前提和基礎(chǔ)。
1. 在網(wǎng)絡(luò)編程中拓轻,有幾個必須掌握的基本概念
客戶端(Client):移動應(yīng)用(iOS斯撮、android等應(yīng)用)
服務(wù)器(Server):為客戶端提供服務(wù)、提供數(shù)據(jù)扶叉、提供資源的機(jī)器
請求(Request):客戶端向服務(wù)器索取數(shù)據(jù)的一種行為
響應(yīng)(Response):服務(wù)器對客戶端的請求做出的反應(yīng)勿锅,一般指返回數(shù)據(jù)給客戶端
我們通過下面圖片來理解這四者之間的關(guān)系
二. HTTP協(xié)議
HTTP協(xié)議是在網(wǎng)絡(luò)開發(fā)中最常用的協(xié)議
1. 概念
協(xié)議:協(xié)議是指計算機(jī)通信網(wǎng)絡(luò)中兩臺計算機(jī)之間進(jìn)行通信所必須共同遵守的規(guī)定或規(guī)則,超文本傳輸協(xié)議(HTTP)是一種通信協(xié)議枣氧。
HTTP協(xié)議:即超文本傳輸協(xié)議(Hypertext transfer protocol)溢十。是一種詳細(xì)規(guī)定了瀏覽器和萬維網(wǎng)(WWW = World Wide Web)服務(wù)器之間互相通信的規(guī)則,通過因特網(wǎng)傳送萬維網(wǎng)文檔的數(shù)據(jù)傳送協(xié)議达吞。
HTTP協(xié)議作用:HTTP協(xié)議是用于從WWW服務(wù)器傳輸超文本到本地瀏覽器的傳送協(xié)議张弛。它可以使瀏覽器更加高效,使網(wǎng)絡(luò)傳輸減少酪劫。它不僅保證計算機(jī)正確快速地傳輸超文本文檔吞鸭,還確定傳輸文檔中的哪一部分,以及哪部分內(nèi)容首先顯示(如文本先于圖形)等覆糟。
URL:我們在瀏覽器的地址欄里輸入的網(wǎng)站地址叫做URL (Uniform Resource Locator刻剥,統(tǒng)一資源定位符)。就像每家每戶都有一個門牌地址一樣滩字,每個網(wǎng)頁也都有一個Internet地址造虏。當(dāng)你在瀏覽器的地址框中輸入一個URL或是單擊一個超級鏈接時御吞,URL就確定了要瀏覽的地址。瀏覽器通過超文本傳輸協(xié)議(HTTP)漓藕,將Web服務(wù)器上站點的網(wǎng)頁代碼提取出來陶珠,并翻譯成漂亮的網(wǎng)頁。
2.HTTP版本區(qū)別
HTTP/0.9和1.0 使用非持續(xù)連接撵术,限制每次連接只處理一個請求背率,服務(wù)器對客戶端的請求做出響應(yīng)后,馬上斷開連接嫩与,這種方式可以節(jié)省傳輸時間
HTTP/1.1 當(dāng)前版本寝姿。持久連接被默認(rèn)采用,并能很好地配合代理服務(wù)器工作划滋。還支持以管道方式同時發(fā)送多個請求饵筑,以便降低線路負(fù)載,提高傳輸速度处坪。
HTTP/1.1相較于 HTTP/1.0 協(xié)議的區(qū)別主要體現(xiàn)在:
1 緩存處理
2 帶寬優(yōu)化及網(wǎng)絡(luò)連接的使用
3 錯誤通知的管理
4 消息在網(wǎng)絡(luò)中的發(fā)送
5 互聯(lián)網(wǎng)地址的維護(hù)
6 安全性及完整
3.HTTP工作流程
一次HTTP操作稱為一個事務(wù)根资,其工作過程可分為四步:
- 首先客戶機(jī)與服務(wù)器需要建立連接。只要單擊某個超級鏈接同窘,HTTP的工作就開始了玄帕。
- 建立連接后,客戶機(jī)發(fā)送一個請求給服務(wù)器想邦,請求方式的格式為:統(tǒng)一資源標(biāo)識符(URL)裤纹、協(xié)議版本號,后邊是MIME信息包括請求修飾符丧没、客戶機(jī)信息和可能的內(nèi)容鹰椒。
- 服務(wù)器接到請求后,給予相應(yīng)的響應(yīng)信息呕童,其格式為一個狀態(tài)行漆际,包括信息的協(xié)議版本號、一個成功或錯誤的代碼夺饲,后邊是MIME信息包括服務(wù)器信息奸汇、實體信息和可能的內(nèi)容。
- 客戶端接收服務(wù)器所返回的信息通過瀏覽器顯示在用戶的顯示屏上往声,然后客戶機(jī)與服務(wù)器斷開連接茫蛹。
如果在以上過程中的某一步出現(xiàn)錯誤,那么產(chǎn)生錯誤的信息將返回到客戶端烁挟,由顯示屏輸出膘侮。對于用戶來說携栋,這些過程是由HTTP自己完成的,用戶只要用鼠標(biāo)點擊施绎,等待信息顯示就可以了。
HTTP通信過程 - 請求詳細(xì)內(nèi)容
HTTP協(xié)議規(guī)定:1個完整的由客戶端發(fā)給服務(wù)器的HTTP請求中包含以下內(nèi)容
請求頭:包含了對客戶端的環(huán)境描述、客戶端請求信息等
GET /minion.png HTTP/1.1 // 包含了請求方法、請求資源路徑、HTTP協(xié)議版本
Host: 120.25.226.186:32812 // 客戶端想訪問的服務(wù)器主機(jī)地址
User-Agent: Mozilla/5.0 // 客戶端的類型礁遣,客戶端的軟件環(huán)境
Accept: text/html // 客戶端所能接收的數(shù)據(jù)類型
Accept-Language: zh-cn // 客戶端的語言環(huán)境
Accept-Encoding: gzip // 客戶端支持的數(shù)據(jù)壓縮格式
請求體:客戶端發(fā)給服務(wù)器的具體數(shù)據(jù),比如文件數(shù)據(jù)(POST請求才會有)
HTTP通信過程 - 響應(yīng)詳細(xì)內(nèi)容
客戶端向服務(wù)器發(fā)送請求肩刃,服務(wù)器應(yīng)當(dāng)做出響應(yīng)祟霍,即返回數(shù)據(jù)給客戶端
HTTP協(xié)議規(guī)定:1個完整的HTTP響應(yīng)中包含以下內(nèi)容
響應(yīng)頭:包含了對服務(wù)器的描述、對返回數(shù)據(jù)的描述
HTTP/1.1 200 OK // 包含了HTTP協(xié)議版本盈包、狀態(tài)碼沸呐、狀態(tài)英文名稱
Server: Apache-Coyote/1.1 // 服務(wù)器的類型
Content-Type: image/jpeg // 返回數(shù)據(jù)的類型
Content-Length: 56811 // 返回數(shù)據(jù)的長度
Date: Mon, 23 Jun 2014 12:54:52 GMT // 響應(yīng)的時間
響應(yīng)體:服務(wù)器返回給客戶端的具體數(shù)據(jù),比如文件數(shù)據(jù)
常見響應(yīng)狀態(tài)碼
注意:HTTP是基于傳輸層的TCP協(xié)議呢燥,而TCP是一個端到端的面向連接的協(xié)議崭添。所謂的端到端可以理解為進(jìn)程到進(jìn)程之間的通信。所以HTTP在開始傳輸之前叛氨,首先需要建立TCP連接呼渣,而TCP連接的過程需要所謂的“三次握手”。
下圖所示TCP連接的三次握手寞埠。
簡單來說就是
- 客戶端向服務(wù)器發(fā)送消息屁置,告訴服務(wù)器我將要發(fā)送數(shù)據(jù)。
- 服務(wù)器端接收到客戶端請求后仁连,確認(rèn)自己準(zhǔn)備好接收數(shù)據(jù)蓝角,并告知客戶端,我已經(jīng)準(zhǔn)備好怖糊,可以發(fā)送請求
- 客戶端接受到服務(wù)器端已準(zhǔn)備好接收的消息后帅容,發(fā)送數(shù)據(jù)給服務(wù)器端颇象。
在TCP三次握手之后伍伤,建立了TCP連接,此時HTTP就可以進(jìn)行傳輸了遣钳。一個重要的概念是面向連接扰魂,既HTTP在傳輸完成之間并不斷開TCP連接。在HTTP1.1中這是默認(rèn)行為蕴茴。
4. HTTP協(xié)議的特點
HTTP協(xié)議永遠(yuǎn)都是客戶端發(fā)起請求劝评,服務(wù)器回送響應(yīng)。這樣就限制了使用HTTP協(xié)議倦淀,無法實現(xiàn)在客戶端沒有發(fā)起請求的時候蒋畜,服務(wù)器將消息推送給客戶端。
HTTP協(xié)議的主要特點可概括如下:
- 簡單快速:因為HTTP協(xié)議簡單撞叽,使得HTTP服務(wù)器的程序規(guī)模小姻成,因而通信速度很快插龄。
- 靈活:HTTP允許傳輸任意類型的數(shù)據(jù)對象。正在傳輸?shù)念愋陀蒀ontent-Type加以標(biāo)記科展。
- HTTP 0.9和1.0使用非持續(xù)連接:限制每次連接只處理一個請求均牢,服務(wù)器處理完客戶的請求,并收到客戶的應(yīng)答后才睹,即斷開連接徘跪。采用這種方式可以節(jié)省傳輸時間。
HTTP 1.1使用持續(xù)連接:不必為每個web對象創(chuàng)建一個新的連接琅攘,一個連接可以傳送多個對象垮庐。
5. URL
URL的全稱是Uniform Resource Locator(統(tǒng)一資源定位符)
URL就是資源的地址、位置乎澄⊥幌酰互聯(lián)網(wǎng)上的每個資源都有一個唯一的URL,通過這個個URL置济,能找到互聯(lián)網(wǎng)上唯一的一個資源解恰。
URL的基本格式 = 協(xié)議://主機(jī)地址/路徑
協(xié)議:不同的協(xié)議,代表著不同的資源查找方式浙于、資源傳輸方式
主機(jī)地址:存放資源的主機(jī)(服務(wù)器)的IP地址(域名)
路徑:資源在主機(jī)(服務(wù)器)中的具體位置
三. 發(fā)送HTTP請求
1.發(fā)送HTTP請求的方法
在HTTP/1.1協(xié)議中护盈,定義了8種發(fā)送HTTP請求的方法
GET、POST羞酗、OPTIONS腐宋、HEAD、PUT檀轨、DELETE胸竞、TRACE、CONNECT参萄、PATCH
各個方法的解釋如下(所有方法全為大寫):
GET: 請求獲取Request-URI所標(biāo)識的資源
POST: 在Request-URI所標(biāo)識的資源后附加新的數(shù)據(jù)
HEAD: 請求獲取由Request-URI所標(biāo)識的資源的響應(yīng)消息報頭
PUT: 請求服務(wù)器存儲一個資源卫枝,并用Request-URI作為其標(biāo)識
DELETE: 請求服務(wù)器刪除Request-URI所標(biāo)識的資源
TRACE: 請求服務(wù)器回送收到的請求信息,主要用于測試或診斷
CONNECT: 保留將來使用
OPTIONS: 請求查詢服務(wù)器的性能讹挎,或者查詢與資源相關(guān)的選項和需求
根據(jù)HTTP協(xié)議的設(shè)計初衷校赤,不同的方法對資源有不同的操作方式
PUT :增
DELETE :刪
POST:改
GET:查
最常用的是GET和POST(實際上GET和POST都能辦到增刪改查)
2. GET和POST對比和區(qū)別
GET和POST的主要區(qū)別表現(xiàn)在數(shù)據(jù)傳遞上
GET:在請求URL后面以?
的形式拼接發(fā)給服務(wù)器的參數(shù),多個參數(shù)之間用&隔開筒溃。
比如http://www.test.com/login?username=123&pwd=234&type=JSON
由于瀏覽器和服務(wù)器對URL長度有限制马篮,因此在URL后面附帶的參數(shù)是有限制的,通常不能超過1KB
POST:發(fā)給服務(wù)器的參數(shù)全部放在請求體中怜奖,理論上浑测,POST傳遞的數(shù)據(jù)量沒有限制(具體還得看服務(wù)器的處理能力)
注意:GET和POST都可以向服務(wù)器傳送數(shù)據(jù),也都可以從服務(wù)器獲取數(shù)據(jù)
關(guān)于URL長度的限制
首先歪玲,HTTP協(xié)議及URL官方說明均對URL長度限制沒有說明迁央,也就是說GET怎顾,POST都對URL長度沒有限制,但是HTTP客戶端和服務(wù)器的實現(xiàn)對URL長度進(jìn)行了限制漱贱,因此我們使用GET請求拼接參數(shù)槐雾,有時會導(dǎo)致URL過長而無法進(jìn)行請求。
關(guān)于安全問題
并不是POST比GET特別安全幅狮,只不過GET傳遞的參數(shù)顯示在URL中募强,我們一眼就可以看到,POST方式看不到是因為瀏覽器做了限制崇摄,我們同樣可以用第三方工具看到POST方式傳遞的數(shù)據(jù)擎值。
GET 和POST 的選擇
選擇GET和POST的建議
如果僅僅是索取數(shù)據(jù)(數(shù)據(jù)查詢),建議使用GET
如果是增加逐抑、修改鸠儿、刪除數(shù)據(jù)或者傳遞大量數(shù)據(jù),比如文件上傳厕氨,建議用POST
URL中多值參數(shù)和中文輸出
多值參數(shù)
有時候一個參數(shù)名进每,可能會對應(yīng)多個值。例如
http://120.25.226.186:32812/weather?place=Beijing&place=Henan&place=Hunan
當(dāng)一個參數(shù)有多個值的時候命斧,需要使用下面這樣方式來賦值
place=beijing&place=shanghai
服務(wù)器的place屬性是一個數(shù)組中文參數(shù)
當(dāng)url中有漢字的時候田晚,我們需要先進(jìn)行中文轉(zhuǎn)碼
GET需要轉(zhuǎn)碼,POST當(dāng)參數(shù)有漢字的時候就不用轉(zhuǎn)碼了国葬,因為POST參數(shù)在請求體中贤徒,但是當(dāng)url有漢字的時候同樣需要轉(zhuǎn)碼。
NSString *urlStr = @"http://120.25.226.186:32812/login2?username=漢字&pwd=520it";
urlStr = [urlStr stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
3. iOS中發(fā)送HTTP請求的方案
在iOS中汇四,常見的發(fā)送HTTP請求的方案有
蘋果原生(自帶)
NSURLConnection:用法簡單接奈,最古老最經(jīng)典最直接的一種方案
NSURLSession:功能比NSURLConnection更加強(qiáng)大,蘋果目前比較推薦使用這種技術(shù)(2013推出通孽,iOS7開始使用的技術(shù))
CFNetwork:NSURL*的底層序宦,純C語言
第三方框架
AFNetworking:簡單易用,提供了基本夠用的常用功能利虫,維護(hù)和使用者多
ASIHttpRequest:外號“HTTP終結(jié)者”挨厚,功能極其強(qiáng)大堡僻,可惜早已停止更新
MKNetworkKit:簡單易用糠惫,產(chǎn)自印度,維護(hù)和使用者少
為了提高開發(fā)效率钉疫,我們開發(fā)用的基本是第三方框架硼讽,但是我們同樣也需要掌握蘋果原生的請求方案
四. 服務(wù)器返回的數(shù)據(jù)格式
服務(wù)器返回給客戶端的數(shù)據(jù),一般都是JSON格式或者XML格式(文件下載除外)
1. JSON
什么是JSON
JSON(JavaScript Object Notation):一種輕量級的數(shù)據(jù)交換格式牲阁,具有良好的可讀和便于快速編寫的特性固阁∪蓝悖可在不同平臺之間進(jìn)行數(shù)據(jù)交互。
JSON的格式
JSON的格式很像OC中的字典和數(shù)組
{"name" : "jack", "age" : 10}
{"names" : ["jack", "rose", "jim"]}
標(biāo)準(zhǔn)JSON格式的注意點:key必須用雙引號
JSON解析方案
要想從JSON中挖掘出具體數(shù)據(jù)备燃,需要對JSON進(jìn)行解析碉克,將JSON數(shù)據(jù)轉(zhuǎn)換為OC數(shù)據(jù)類型
在iOS中,蘋果為我們提供了JSON的解析方案 NSJSONSerialization并齐。
NSJSONSerialization的常見方法
JSON數(shù)據(jù) 轉(zhuǎn) OC對象
/*
參數(shù)一:JSON數(shù)據(jù)
參數(shù)二:options 一般填kNilOptions
參數(shù)三:錯誤信息 nil
*/
+ (id)JSONObjectWithData:(NSData *)data options:(NSJSONReadingOptions)opt error:(NSError **)error;
OC對象 轉(zhuǎn) JSON數(shù)據(jù)
+ (NSData *)dataWithJSONObject:(id)obj options:(NSJSONWritingOptions)opt error:(NSError **)error;
2. XML
什么是XML
擴(kuò)展標(biāo)記語言 (Extensible Markup Language, XML) 漏麦,用于標(biāo)記電子文件使其具有結(jié)構(gòu)性的標(biāo)記語言,可以用來標(biāo)記數(shù)據(jù)况褪、定義數(shù)據(jù)類型撕贞,是一種允許用戶對自己的標(biāo)記語言進(jìn)行定義的源語言。 XML使用DTD(document type definition)文檔類型定義來組織數(shù)據(jù);格式統(tǒng)一测垛,跨平臺和語言捏膨,早已成為業(yè)界公認(rèn)的標(biāo)準(zhǔn)。
XML格式
一個常見的XML文檔一般由以下部分組成
文檔聲明
在XML文檔的最前面食侮,必須編寫一個文檔聲明号涯,用來聲明XML文檔的類型
最簡單的聲明
<?xml version="1.0" ?>
用encoding屬性說明文檔的字符編碼
<?xml version="1.0" encoding="UTF-8" ?>元素(Element)
一個元素包括了開始標(biāo)簽和結(jié)束標(biāo)簽
擁有內(nèi)容的元素:<video>小黃人</video>
沒有內(nèi)容的元素:<video></video>
一個元素可以嵌套若干個子元素(不能出現(xiàn)交叉嵌套)
規(guī)范的XML文檔最多只有1個根元素,其他元素都是根元素的子孫元素屬性(Attribute)
XML解析
要想從XML中提取有用的信息锯七,必須得學(xué)會解析XML
XML的解析方式有2種
DOM:一次性將整個XML文檔加載進(jìn)內(nèi)存诚隙,比較適合解析小文件
SAX:從根元素開始,按順序一個元素一個元素往下解析起胰,比較適合解析大文件
解析XML的工具
蘋果原生NSXMLParser: 使用SAX方式解析久又,使用簡單
GDataXML: 采用DOM方式解析,該框架由Goole開發(fā)效五,是基于xml2的
1. 使用NSXMLParser解析XML方法和步驟
//解析步驟:
//1 創(chuàng)建一個解析器
NSXMLParser *parser = [[NSXMLParser alloc]initWithData:data];
//2 設(shè)置代理
parser.delegate = self;
//3 開始解析
[parser parse];
NSXMLParser代理方法
//1.開始解析XML文檔
-(void)parserDidStartDocument:(nonnull NSXMLParser *)parser
{
}
//2.開始解析XML中某個元素的時候調(diào)用地消,比如<video>
-(void)parser:(nonnull NSXMLParser *)parser didStartElement:(nonnull NSString *)elementName namespaceURI:(nullable NSString *)namespaceURI qualifiedName:(nullable NSString *)qName attributes:(nonnull NSDictionary<NSString *,NSString *> *)attributeDict
{
//可在此方法中做字典轉(zhuǎn)模型操作,參數(shù)attributeDict存放著元素的屬性
}
//3.當(dāng)某個元素解析完成之后調(diào)用畏妖,比如</video>
-(void)parser:(nonnull NSXMLParser *)parser didEndElement:(nonnull NSString *)elementName namespaceURI:(nullable NSString *)namespaceURI qualifiedName:(nullable NSString *)qName
{
}
//4.XML文檔解析結(jié)束
-(void)parserDidEndDocument:(nonnull NSXMLParser *)parser
{
}
NSXMLParser采取的是SAX方式解析脉执,特點是事件驅(qū)動,下面情況都會通知代理
當(dāng)掃描到文檔(Document)的開始與結(jié)束
當(dāng)掃描到元素(Element)的開始與結(jié)束
2. GDataXML解析XML方法和步驟
GDataXML需要配置環(huán)境
設(shè)置libxml2的頭文件搜索路徑(為了能找到libxml2庫的所有頭文件)
在Head Search Path中加入/usr/include/libxml2設(shè)置鏈接參數(shù)(自動鏈接libxml2庫)
在Other Linker Flags中加入-lxml2
使用方法
//1 加載XML文檔(使用的是DOM的方式次性把整個XML加載完畢)
GDataXMLDocument *doc = [[GDataXMLDocument alloc]initWithData:data options:kNilOptions error:nil];
//2 獲取XML文檔的根元素戒劫,根據(jù)根元素取出XML中的每個子元素
NSArray * elements = [doc.rootElement elementsForName:@"video"];
//3 取出每個子元素的屬性并轉(zhuǎn)換為模型
for (GDataXMLElement *ele in elements) {
//4 把轉(zhuǎn)換好的模型添加到tableView的數(shù)據(jù)源self.videos數(shù)組中
[self.videos addObject:video];
}
3. JSON和XML比較
同一份數(shù)據(jù)半夷,既可以用JSON來表示,也可以用XML來表示
相比之下迅细,JSON的體積小于XML巫橄,并且易于解析,傳輸速度也快茵典,所以服務(wù)器返回給移動端的數(shù)據(jù)格式以JSON居多湘换。
五. HTTP應(yīng)用
1. 斷點續(xù)傳的實現(xiàn)原理
HTTP協(xié)議設(shè)置請求頭內(nèi)容,支持只請求某個資源的某一部分。
Range 請求的資源范圍彩倚;
Content-Range 響應(yīng)的資源范圍筹我;
在連接斷開重連時,客戶端只請求該資源未下載的部分帆离,而不是重新請求整個資源蔬蕊,來實現(xiàn)斷點續(xù)傳。
分塊請求資源實例:
Eg1:Range: bytes=306302- :請求這個資源從306302個字節(jié)到末尾的部分哥谷;
Eg2:Content-Range: bytes 306302-604047/604048:響應(yīng)中指示攜帶的是該資源的第306302-604047的字節(jié)袁串,該資源共604048個字節(jié);
客戶端通過并發(fā)的請求相同資源的不同片段呼巷,來實現(xiàn)對某個資源的并發(fā)分塊下載囱修。從而達(dá)到快速下載的目的。目前流行的FlashGet和迅雷基本都是這個原理王悍。
2. 多線程下載的原理
下載工具開啟多個發(fā)出HTTP請求的線程破镰,每個http請求只請求資源文件的一部分,例如:Content-Range: bytes 20000-40000/47000压储;
最后合并每個線程下載的文件鲜漩。
六. HTTPS
1. HTTPS簡介
HTTPS(全稱:Hyper Text Transfer Protocol over Secure Socket Layer),是以安全為目標(biāo)的HTTP通道集惋,簡單講是HTTP的安全版孕似。即HTTP下加入SSL層,HTTPS的安全基礎(chǔ)是SSL刮刑,因此加密的詳細(xì)內(nèi)容就需要SSL喉祭。
2. HTTPS通信過程
3. HTTPS與HTTP的區(qū)別
超文本傳輸協(xié)議HTTP協(xié)議被用于在Web瀏覽器和網(wǎng)站服務(wù)器之間傳遞信息。HTTP協(xié)議以明文方式發(fā)送內(nèi)容雷绢,不提供任何方式的數(shù)據(jù)加密泛烙,如果攻擊者截取了Web瀏覽器和網(wǎng)站服務(wù)器之間的傳輸報文,就可以直接讀懂其中的信息翘紊,因此HTTP協(xié)議不適合傳輸一些敏感信息蔽氨,比如信用卡號、密碼等帆疟。
為了解決HTTP協(xié)議的這一缺陷鹉究,需要使用另一種協(xié)議:安全套接字層超文本傳輸協(xié)議HTTPS。為了數(shù)據(jù)傳輸?shù)陌踩俪瑁琀TTPS在HTTP的基礎(chǔ)上加入了SSL協(xié)議自赔,SSL依靠證書來驗證服務(wù)器的身份,并為瀏覽器和服務(wù)器之間的通信加密殴蓬。
HTTPS和HTTP的區(qū)別主要為以下四點:
一匿级、https協(xié)議需要到ca申請證書,一般免費(fèi)證書很少染厅,需要交費(fèi)痘绎。
二、http是超文本傳輸協(xié)議肖粮,信息是明文傳輸孤页,https 則是具有安全性的ssl加密傳輸協(xié)議。
三涩馆、http和https使用的是完全不同的連接方式行施,用的端口也不一樣,前者是80魂那,后者是443蛾号。
四、http的連接很簡單涯雅,是無狀態(tài)的鲜结;HTTPS協(xié)議是由SSL+HTTP協(xié)議構(gòu)建的可進(jìn)行加密傳輸、身份認(rèn)證的網(wǎng)絡(luò)協(xié)議活逆,比http協(xié)議安全精刷。