———————————————————————————————————————ios
HTTP的工做過程json
一次HTTP操做稱爲一個事務,其工做過程分爲四步:瀏覽器
1.客戶機與服務器創建鏈接:客戶單擊某個超級連接,HTTP的工做開始,接下來進行TCP鏈接的三次握手過程。安全
2.創建鏈接後,客戶幾發送一個請求給服務器,請求方式的格式爲:統一資源標識符(URL)、協議版本號、MIME信息(包括請求修飾符、客戶機信息和可能的內容)。服務器
3.服務器接到請求後,給予相應的響應信息,其格式爲:一個狀態行(包括信息的協議版本號)、一個成功或錯誤的代碼、後面的是MIME信息(包括服務器信息、實體信息、可能的內容)。網絡
4.客戶端接收到服務器所返回的信息,經過瀏覽器顯示在用戶的顯示屏上,而後客戶機與服務器斷開鏈接。客戶端收到服務器信息後,向服務器發送一個確認包,此包發送完畢,表示完成三次握手。架構
———————————————————————————————————————框架
HTTP協議的主要特色:異步
1.支持客戶/服務器模式-》過程post
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的性能更好一些。
———————————————————————————————————————
一、同步請求能夠從因特網請求數據,一旦發送同步請求,程序將中止用戶交互,直至服務器返回數據完成,才能夠進行下一步操做,
二、異步請求不會阻塞主線程,而會創建一個新的線程來操做,用戶發出異步請求後,依然能夠對UI進行操做,程序能夠繼續運行
三、GET請求,將參數直接寫在訪問路徑上。操做簡單,不過容易被外界看到,安全性不高,地址最多255字節;
四、POST請求,將參數放到body裏面。POST請求操做相對複雜,須要將參數和地址分開,不過安全性高,參數放在body裏面,不易被捕獲。