網絡編程一
數據的傳輸
1、服務器的數據是分成一個個單個的數據包傳入客戶端
2、客戶端與服務器做數據傳輸,數據必須約定使用同一種格式
HTTP協議的概念
1、全稱“超文本傳輸協議”,瀏覽器和服務器之間的通信規則
2、HTTP協議永遠都是客戶端發起請求,服務器回送響應
3、客戶端發送一個HTTP請求,是向服務器提交了一個HTTP請求包
4、服務器收到請求之后,向客戶端回應一個HTTP響應包
HTTP的請求方式:GET請求和POST請求
HTTP——請求包結構:請求頭、請求體
GET:url、請求頭
POST:url、請求頭、請求體
HTTP的響應包結構:響應頭、響應體
HTTP響應有個狀態碼,200為成功,404未找到頁面
數據格式:JSON(主要)、XML
響應頭中Content-Type表示響應體中數據的類型
主要類型:text/html、application/json、text/json、text/xml、image/jpeg
NSURLSession的相關使用
(可以參考代碼:UI學習—-UI高級—-07網絡編程—-代碼—-01)
session網絡會話
//1 URL (定位資源)
//2 URLRequest (配置請求:url請求頭[請求體])
//請求方式:默認是get請求
//3 session (會話)<默認發起的是異步的網絡請求>
//4 task (任務)
//(1)解析錯誤
//(2)查看狀態碼
//(3)解析data數據
//(4)轉換成model
//(5)顯示在UI界面上
//5 resume (執行任務)
[task resume];//resume:恢復
NSURLRequest
(可以參考代碼:UI學習—-UI高級—-07網絡編程—-代碼—-02)
1、NSURLRequest用于存儲客戶端發送給服務器的數據包信息和請求設置
2、NSURLRequest只有很少的基本設置選項,我大部分使用其子類:NSMutableURLRequest
3、NSURLRequest (url請求頭請求體[post]請求方式緩存策略...)
requestWithURL:url
cachePolicy:緩存策略
timeoutInterval:超時的時間
{NSURLRequestUseProtocolCachePolicy:默認的協議緩存策略(首先判斷是否有緩存,如果緩存沒有,直接從服務器獲取;如果有緩存,根據響應中的cache-control中的一個字段判斷,詢問服務器數據是否有更新,如果有更新,重新請求服務器)}
//NSURLRequest *request = [NSURLRequest requestWithURL:urlcachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:120];
NSURLSessionConfiguration
1、一個Session可以發起的多個網絡請求任務(Task)
2、三種類型的任務(Task):
2.1數據任務:數據任務擅長處理小且頻繁的應用程序與服務器之間的請求,例如:請求JSON數據,因為數據任務不會將數據存儲到磁盤文件中,所以不支持后臺Session
2.2下載任務:以文件的形式接收數據,可以在程序沒有運行時進行后臺下載
2.3上傳任務:以文件的形式發送數據,可以在程序沒有運行時進行后臺上傳
3、session(可以參考代碼:UI學習—-UI高級—-07網絡編程—-代碼—-03)
//(1)使用默認的session
//NSURLSession *session = [NSURLSessionsharedSession];
//(2)自定義的session
/*
+defaultSessionConfiguration用于創建默認類型的Session對象
+ephemeralSessionConfiguration用于創建臨時類型的Session對象
+backgroundSessionConfiguration:(NSString*)identifier用于創建后臺Session對象
identifier:作用標示后臺的session,最好和App的bundle id相同
*/
NSURLSessionConfiguration *config =[NSURLSessionConfiguration defaultSessionConfiguration];
//配置屬性
//配置緩存策略
config.requestCachePolicy =NSURLRequestUseProtocolCachePolicy;
//是否使用蜂窩數據
config.allowsCellularAccess = YES;
//...
[NSURLSession sessionWithConfiguration:config];
//task
//resume
NSURLResponse(可以參考代碼:UI學習—-UI高級—-07網絡編程—-代碼)
//下載任務
NSURLSessionDownloadTask(可以參考代碼:UI學習—-UI高級—-07網絡編程—-代碼—04)