重點:1.超文本傳輸協(xié)議. 2.http請求過程.
1> http協(xié)議: 超文本傳輸協(xié)議(Hypertext Transfer Protocol)
{
http協(xié)議規(guī)定了客戶端和服務器之間的數(shù)據(jù)傳輸格式.
http協(xié)議是在網(wǎng)絡開發(fā)中最常用的協(xié)議.不管是移動客戶端還是PC端,訪問網(wǎng)絡資源經(jīng)常使用http協(xié)議.
http優(yōu)點:
<1> 簡單快速:
http協(xié)議簡單,通信速度很快.
<2> 靈活:
http協(xié)議允許傳輸任意類型的數(shù)據(jù).
<3> http協(xié)議限制每次連接只處理一個請求,服務器對客戶端的請求作出響應后,馬上斷開連接.這種方式可以節(jié)省傳輸時間.
}
2> http協(xié)議的使用:
完整的http通信分為兩步:
<1> 請求:客戶端向服務器索要數(shù)據(jù).
{
http協(xié)議規(guī)定:一個完整的http請求包含'請求行','請求頭','請求體'三個部分;
'請求行':包含了請求方法,請求資源路徑,http協(xié)議版本.
"GET /resources/images/ HTTP/1.1"
'請求頭':包含了對客戶端的環(huán)境描述,客戶端請求的主機地址等信息.
Accept: text/html // 客戶端所能接收的數(shù)據(jù)類型
Accept-Language: zh-cn // 客戶端的語言環(huán)境
Accept-Encoding: gzip // 客戶端支持的數(shù)據(jù)壓縮格式
Host: m.baidu.com // 客戶端想訪問的服務器主機地址
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.10; rv:37.0) Gecko/20100101 Firefox/37.0 // 客戶端的類型,客戶端的軟件環(huán)境
'請求體':客戶端發(fā)給服務器的具體數(shù)據(jù),比如文件/圖片等.
}
<2> 響應:服務器返回客戶端想要的數(shù)據(jù).
{
http協(xié)議規(guī)定:一個完整的http響應包含'狀態(tài)行','響應頭','實體內(nèi)容'三個部分;
'狀態(tài)行':包含了http協(xié)議版本,狀態(tài)碼,狀態(tài)英文名稱.
"HTTP/1.1 200 OK"
'響應頭':包含了對服務器的描述,對返回數(shù)據(jù)的描述.
Content-Encoding: gzip // 服務器支持的數(shù)據(jù)壓縮格式
Content-Length: 1528 // 返回數(shù)據(jù)的長度
Content-Type: application/xhtml+xml;charset=utf-8 // 返回數(shù)據(jù)的類型
Date: Mon, 15 Jun 2015 09:06:46 GMT // 響應的時間
Server: apache // 服務器類型
'實體內(nèi)容':服務器返回給客戶端的具體數(shù)據(jù)(圖片/html/文件...).
}
3> 發(fā)送http請求:
{
在iOS開發(fā)中,發(fā)送http請求的方案有很多,常見的有如下幾種:
<1> 蘋果原生:
{
* NSURLConnection:用法簡單,古老經(jīng)典的一種方案.
* NSURLSession:iOS7以后推出的技術,功能比NSURLConnection更加強大.
* CFNetWork:NSURL 的底層,純C語言,一般不用.
}
<2> 第三方框架:
{
* ASIHttpRequest:http終結者,功能很強大,可惜作者已停止更新.
* AFNetWorking:簡單易用,提供了基本夠用的常用功能,維護和使用者多.
* MKNetWorkKit:簡單易用,產(chǎn)自印度,維護和使用者少.
}
在開發(fā)中,一般使用第三方框架.
}