———————————————————————————————————————
HTTP的工作過程
一次HTTP操作稱為一個事務,其工作過程分為四步:
1.客戶機與服務器建立連接:客戶單擊某個超級鏈接,HTTP的工作開始,接下來進行TCP連接的三次握手過程。
2.建立連接后,客戶幾發送一個請求給服務器,請求方式的格式為:統一資源標識符(URL)、協議版本號、MIME信息(包括請求修飾符、客戶機信息和可能的內容)。
3.服務器接到請求后,給予相應的響應信息,其格式為:一個狀態行(包括信息的協議版本號)、一個成功或錯誤的代碼、后面的是MIME信息(包括服務器信息、實體信息、可能的內容)。
4.客戶端接收到服務器所返回的信息,通過瀏覽器顯示在用戶的顯示屏上,然后客戶機與服務器斷開連接。客戶端收到服務器信息后,向服務器發送一個確認包,此包發送完畢,表示完成三次握手。
———————————————————————————————————————
HTTP協議的主要特點:
1.支持客戶/服務器模式-》過程
2.簡單快速:客戶向服務器請求服務時,只需發送請求方法(常用的有GET/POST/HEAD)和路徑。每種請求方法規定了客戶與服務器聯系的類型不同,由於HTTP協議簡單,使得HTTP服務器的程序規模小,因而通信速度快。
3.靈活:HTTP允許傳輸任意類型的數據對象,正在傳輸的類型用Content-Type加以標記。
4.無連接:限制每次連接只處理一個請求,服務器處理完客戶端的請求,並收到客戶的應答后,斷開連接。
5.無狀態:協議對於事務處理沒有記憶能力。缺少狀態意味着后續處理需要前面的信息,則它必須重傳,這樣導致1.每次連接傳送的數據量增大 2.服務器不需要先前的信息,它的應答速度較快。
———————————————————————————————————————
HTTP請求過程
HTTP請求: 短連接:一次連接,服務器只處理一個請求!請求處理完畢之后,會自動斷開連接!
HTTP請求是一個特殊處理的Socket(TCP/IP)
{
一個完整的HTTP請求分為兩個過程:
1. 請求
{
請求行: 包含了請求方法、請求資源路徑、HTTP協議版本
GET(請求方法) /resources/vedios.json(資源路徑) HTTP/1.1(http協議版本)
請求頭:包含了對客戶端的環境描述、客戶端請求的主機地址等信息
User-Agent (在請求頭中設置一些信息,這些信息是告訴服務器的一些數據!),請求方法一般都是在請求頭中設置!
請求體: 客戶端發給服務器的具體數據,比如文件數據
只有 POST 請求才有請求體 ,GET 請求是沒有請求體的. 如果這個請求需要附帶一些參數(通過參數告訴服務器返回什么數據),POST請求將參數封裝在請求體中,GET請求直接將參數拼接在url中.
}
2. 響應
{
響應行: HTTP/1.1(http協議版本) 304(網絡連接狀態碼) Not Modified(網絡連接狀態碼簡要說明)
響應頭: 會返回服務器信息,還會返回本次請求數據(實體內容)的信息.
實體內容: 就是客戶端想要的數據!
}
}
———————————————————————————————————————
常見的響應狀態碼:
200 請求成功
400客戶端請求的語法錯誤,服務器無法解析
404服務器無法根據客戶端的請求找到資源
500服務器內部錯誤,無法完成請求
———————————————————————————————————————
發送HTTP請求的方法
1.簡單說明
在HTTP/1.1協議中,定義了8種發送http請求的方法
GET、POST、OPTIONS、HEAD(只獲得響應頭信息,不獲取實體內容)、PUT、DELETE、TRACE、CONNECT、PATCH
根據HTTP協議的設計初衷,不同的方法對資源有不同的操作方式
PUT :增
DELETE :刪
POST:改
GET:查
提示:最常用的是GET和POST(實際上GET和POST都能辦到增刪改查)
2.get和post請求
要想使用GET和POST請求跟服務器進行交互,得先了解一個概念:參數就是傳遞給服務器的具體數據,比如登錄時的帳號、密碼
GET和POST對比:GET和POST的主要區別表現在數據傳遞上
GET
在請求URL后面以?的形式跟上發給服務器的參數,多個參數之間用&隔開,比如http://ww.test.com/login?username=123&pwd=234&type=JSON
注意:由於瀏覽器和服務器對URL長度有限制,因此在URL后面附帶的參數是有限制的,通常不能超過1KB
POST
發給服務器的參數全部放在請求體中
理論上,POST傳遞的數據量沒有限制(具體還得看服務器的處理能力)
3.GET和POST的選擇
選擇GET和POST的建議
(1)如果要傳遞大量數據,比如文件上傳,只能用POST請求
(2)GET的安全性比POST要差些,如果包含機密\敏感信息,建議用POST
(3)如果僅僅是索取數據(數據查詢),建議使用GET
(4)如果是增加、修改、刪除數據,建議使用POST
4.iOS中發送HTTP請求的方案
在iOS中,常見的發送HTTP請求(GET和POST)的解決方案有
(1)蘋果原生(自帶)
NSURLConnection:用法簡單,最古老最經典最直接的一種方案,可發送同步請求,也可發送異步請求。
NSURLSession:iOS 7新出的技術,功能比NSURLConnection更加強大,NSUrlSession 沒有提供同步請求的方法. 所有關於 NSUrlSession 發送的網絡請求都是異步的.
CFNetwork:NSURL*的底層,純C語言
(2)第三方框架
ASIHttpRequest:外號“HTTP終結者”,功能極其強大,可惜早已停止更新
AFNetworking:簡單易用,提供了基本夠用的常用功能
建議:
為了提高開發效率,企業開發用的基本是第三方框架
5.ASI和AFN架構對比
說明:AFN基於NSURL,ASI基於CFHTTP,ASI的性能更好一些。
———————————————————————————————————————
1、同步請求可以從因特網請求數據,一旦發送同步請求,程序將停止用戶交互,直至服務器返回數據完成,才可以進行下一步操作,
2、異步請求不會阻塞主線程,而會建立一個新的線程來操作,用戶發出異步請求后,依然可以對UI進行操作,程序可以繼續運行
3、GET請求,將參數直接寫在訪問路徑上。操作簡單,不過容易被外界看到,安全性不高,地址最多255字節;
4、POST請求,將參數放到body里面。POST請求操作相對復雜,需要將參數和地址分開,不過安全性高,參數放在body里面,不易被捕獲。