數據請求

 
 
一 、HTTP 和 HTTPS 協議
 
1 網絡七層模型 ( 網絡體系結構參考模型OSI)
  物理層:用做機械、電子、定時接口通訊信道上的原始比特流(bites二進制流)傳輸
  數據鏈路層:物理尋址,同時將原始比特流轉變爲邏輯傳輸線路
  網絡層:控制子網的運行,如邏輯編址,分組傳輸,路由選擇
  傳輸層:接收上層數據,在必要的時候,把數據進行分割,並將這些數據交給網絡層,且保證這些數據可以有效到達對端
  會話層:不一樣機器之間創建以及管理會話
  表示層:信息的語法,語義,以及他們的關聯,如加密解密,翻譯裝換,壓縮解壓縮
  應用層:提供用戶程序接口,各類應用程序協議。HTTP、FTP、SMTP、POP3
 
1.1 共分爲7 層: 物理層、數據鏈路層、網絡層、傳輸層、會話層、表示層和應用層。會話層、表示層和應用層每每被合併稱爲高層網絡協議, 所以整個網絡體系結構也可分爲物理層協議、數據鏈路層協議、網絡層協議、傳輸層協議及高層協議。一般, 一個協議能夠實現OSI 的一層或多層功能。從應用上來說, 網絡協議可分爲局域網協議、廣域網協議和路由選擇協議。
 
2 URL 
2.1 URL全稱 Uniform Resource Locator (統一資源定位符),經過一個URL,能找到互聯網上惟一的1個資源
2.2 URL就是資源的地址、位置,互聯網上的每一個資源都有一個惟一的URL
2.3 URL基本格式 = 協議://主機地址/路徑
a  協議:不一樣的協議,表明着不一樣的資源查找方式,資源傳輸方式
b 主機地址:存放資源的主機的 IP 地址(域名)
c 路徑 : 資源在主機中的位置
 
3 協議的定義
定義:兩個計算機間通訊時對傳輸信息內容的理解、信息表示形式以及各類狀況下的應答信號都必需進行一個共同的約定,咱們稱爲協議(Protocol)。通常來講,協議要由以下三個要素組成:
(1)語義(Semantics)涉及用於協調和差錯處理的控制信息
(2)語法(Syntax)涉及數據及控制信息的格式、編碼及信號電平等。
(3)定時(Timing)涉及速度匹配和排序等
 
4 常見的協議
a ftp ://( 文件傳輸協議)
b http://(超文本傳輸協議)
c https://(安全超文本傳輸協議)
d files://( 本地文件協議)
 
 
5 HTTP協議(Hyper Text Transfer Protocol)
5.1 HTTP: 超文本傳輸協議,屬於應用層,由請求/響應構成(客戶端向服務器發送一個請求報文,服務器以一個狀態做爲響應),是一個標準的客戶端服務器模型。
5.2 做用:是用於從萬維網(www)服務器傳送超文本到本地瀏覽器的傳輸協議
5.3 工做原理:HTTP 協議採用請求/響應模型. 客戶端向服務器發送一個請求報文,服務器以一個狀態做爲響應
5.4 C/S 模式 Client(客戶端)  Server(服務器)
Client 和 Server 一般分別處在相距很遠的兩臺計算機上;
Client程序的任務是將用戶的要求交給Server程序,再將Server程序返回的結果以特定的形式顯示給用戶;
Server程序的任務是接收客戶程序提出的服務請求,進行相應的處理,再將結果返回給客戶程序
5.5 HTTP 一般承載與TCP協議之上,有時候也承載於TLS或者SSL協議之上,這個時候就構成了咱們所說HTTPS協議
a SSL (安全套接字層) :是 Netscape公司提出的安全保密協議,在瀏覽器(如Internet Explore等)和 Web 服務器之間構造安全通道來進行數據傳輸,SSL運行在 TCP/IP 層之上、應用層之下,爲應用程序提供加密數據通道
b TLS
 
6 HTTPS 協議(Secure Hypertext Transfer Protocol)
6.1 HTTPS (S-HTTP): 加強版的HTTP,比HTTP更加安全,在HTTP基礎上與安全套接子層(SSL)結合,把原始數據進行加密,而後接受對方解密,加密和解密須要發送和接收方交換公知的密匙來實現,因此,更加安全。
6.2 默認端口號:HTTP(80)、HTTPS(443)
6.3 注意:
a HTTP 協議,永遠的都是由客戶端發起請求,服務器返回數據
b HTTP協議是無狀態,同一個客戶端的此次請求,和上一次沒有對應關係
c HTTPS 協議須要到CA(由受信任數字證書頒發機構(沃通CA)在驗證服務器身份後,具備服務器身份驗證的和數據傳輸加密功能,因其須要配置在服務器上,因此也成SSL服務器,或者SSL證書)申請證書,通常免費證書不多,須要交費
 
7 HTTP和HTTPS 的異同
7.1   HTTP     HTTP(應用層)->TCP(傳輸層)->IP(網絡層)->網絡接口(數據鏈路層)
         HTTPS    HTTP(應用層)->TSL or SSL (安全層)->TCP(傳輸層)->IP(網絡層)->網絡接口(數據鏈路層)
7.2  HTTPS 協議須要到 ca 申請證書,通常免費證書不多,須要交費
7.3 HTTP 是超文本傳輸協議,信息是明文傳輸
       HTTPS 則是具備安全性的 SSL 加密傳輸協議
7.4 HTTP 和 HTTPS 使用的徹底不一樣的連接方式,用的端口也不同,前者是80,後者是443
7.5 HTTP 的連接很簡單,是無狀態的
       HTTP協議是由 SSL+HTTP 協議構建的可進行加密傳輸,身份認證的網絡協議,要比 http 安全
 
二 、HTTP 協議的常見請求方式
1  1 最基本的請求方式:GET,POST,PUT,DELETE,這四種請求方式對應着對資源的查、改、增、刪 4 種操做
0,GET:GET能夠說是最多見的了,它本質就是發送一個請求來取得服務器上的某一資源。資源經過一組HTTP頭和呈現數據(如HTML文本,或者圖片或者視頻等)返回給客戶端。GET請求中,永遠不會包含呈現數據。   
1,HEAD:HEAD和GET本質是同樣的,區別在於HEAD不含有呈現數據,而僅僅是HTTP頭信息。有的人可能以爲這個方法沒什麼用,其實不是這樣的。想象一個業務情景:欲判斷某個資源是否存在,咱們一般使用GET,但這裏用HEAD則意義更加明確。   
2,PUT:這個方法比較少見。HTML表單也不支持這個。本質上來說, PUT和POST極爲類似,都是向服務器發送數據,但它們之間有一個重要區別,PUT一般指定了資源的存放位置,而POST則沒有,POST的數據存放位置由服務器本身決定。舉個例子:如一個用於提交博文的URL,/addBlog。若是用PUT,則提交的URL會是像這樣的」/addBlog/abc123」,其中abc123就是這個博文的地址。而若是用POST,則這個地址會在提交後由服務器告知客戶端。目前大部分博客都是這樣的。顯然,PUT和POST用途是不同的。具體用哪一個還取決於當前的業務場景。   
3,DELETE:刪除某一個資源。基本上這個也不多見,不過仍是有一些地方好比amazon的S3雲服務裏面就用的這個方法來刪除資源。   
4,POST:向服務器提交數據。這個方法用途普遍,幾乎目前全部的提交操做都是靠這個完成。   
5,OPTIONS:這個方法頗有趣,但極少使用。它用於獲取當前URL所支持的方法。若請求成功,則它會在HTTP頭中包含一個名爲「Allow」的頭,值是所支持的方法,如「GET, POST」。   
6, 其實還有一個TRACE方法,不過這個基本上不會用到,這裏就不介紹了。
以上的六種方法,咱們能夠跟數據庫的CRUD增刪改查操做對應起來:   CREATE :PUT   READ:GET   UPDATE:POST   DELETE:DELETE   這樣一來就實現了HTTP和數據庫操做( 其實不光是數據庫,任何數據如文件圖表都是這樣)的完美統一,這也是REST的精髓之一
7 最經常使用方法
 GET: 通常用於獲取或查詢資源,也就是說若是請求 URL 是一個產生數據的過程,使用GET的話,須要的是產生的數據結果,而不是對產生過程的描述(如何產生數據的)
 POST: 通常用於更新數據,向服務器發送請求,告知服務器接收請求後面的實體(BODY),也就是說,POST向服務器發送請求信息,而須要提交的數據在信息後面的實體中。
7.1 比較
相同點:都能給服務器傳輸數據
不一樣點:
a 給服務器傳輸數據的方式不一樣
GET :經過網址字符串
POST:經過Data
b 傳輸數據的大小
GET:網址字符串最多255字節
POST:使用NSData,容量超過1G
c 安全性
GET:全部傳輸給服務的數據,顯示在網址裏,相似於密碼的明文輸入,直接可見
POST:數據被轉成NSData(二進制數據),相似於密碼的密文輸入,沒法直接讀取
3、iOS實現網絡編程
1 幾個對象
1.0 NSURL:請求地址
url:統一資源定位符,也被稱爲網址,英特網上標準的資源網址
url的符語法:協議://受權/路徑?查詢
url的做用:url做爲網址字符串包含不少請求參數,NSURL對網址字符串進行封裝,可使用NSURL對象獲取相應的參數
1.1 NSURLRequest(網絡請求地址對象)
封裝一個請求,保存發給服務器的所有數據,包括一個NSURL 對象,請求方法、請求頭、請求體
注意:任何 Request 默認都是get 方法
1.2 NSMutableURLRequest(網絡請求對象)
NSURLRequest的子類
1.3 NSURLConnection(網絡連接對象)
負責發送請求,創建客戶端和服務器的鏈接。發送NSURLRequest 的數據給服務器,並收集來服務器的響應數據
1.4 NSURLConnectionDelegate(網絡連接協議)
有兩個子類 NSURLConnectionDataDelegate、NSURLConnectionDownloadDelegate
 
 
 
 
2 鏈接方式
2.1 同步鏈接:程序容易出現卡死現象
GET同步;POST同步
2.2  異步鏈接:等待數據返回
a 異步鏈接有兩種實現方式:
b 實現 block
2.3 掌握代碼實現
 
四 、iOS7 以後請求變化
  • 在WWDC 2013中,Apple的團隊對NSURLConnection進行了重構,並推出了NSURLSession做爲替代。
  • 支持後臺運行的網絡任務
  • 暫停、中止、重啓網絡任務,再也不須要 NSOpation 封裝
  • 請求可使用一樣的配置容器
  • 不一樣的 session 可使用不一樣的私有存儲,block和代理能夠同時起做用
  • 直接從文件系統上傳、下載
  • 爲了方便程序員使用,蘋果提供了一個全局 session
  • 全部的 任務(Task) 都是由 Session 發起的
  • 全部的任務默認是掛起的,須要 Resume

注意:若網址字符串URLString中有類對象,可使用此方法處理:程序員

  [URLString stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
1  解析步驟
2 NSURLSession 的三種工做模式
2.1 默認會話模式:相似與原來的 NSURLConnection ,使用的是基於磁盤緩存的持久化策略,使用用戶 keychain 中保存的證書進行認證受權
2.2  瞬時會話模式:該模式不會使用磁盤保存任何數據,全部和會話相關的 caches證書,cookies 都被保存在 ROM(內存中),所以當程序是會話無效的時候,這些緩存,就會被自動清空。
2.3 後臺會話模式:該模式在後臺完成上傳和下載,在建立配置對象時,須要一個NSString 類型的ID,用於標識完成工做的後臺會話。
3 支持三種類型的任務:加載數據,下載數據,上傳
4  NSURLSessionTask類:是一個抽象子類,有三個子類:NSURLSessionDataTask、NSURLSessionUploadTask、NSURLSessionDownloadTask。這三個類封裝了現代應用程序的三個基本網絡任務:獲取數據,好比 JSON或XML,以及上傳和下載
5 NSURLSessionTask 代理   
NSURLSessionTaskDelegate 繼承與NSURLSessionTaskDelegate;NSURLSessionTaskDelegate繼承於 NSURLSessionDelegate 
NSURLSessionConfiguration:用於配置會話的屬性能夠經過該類配置會話的工做模式
7 適合小的數據訪問:JSON、XML、Plist、HTML、圖像 
 
五:臨時數據加載設置
NSAppTransportSecurity
 
NSAllowsArbitraryLoads
相關文章
相關標籤/搜索