iOS開發HTTP協議相關知識總結,ios相關知識
HTTP原理
HTTP請求的選擇
怎麼發送HTTP請求1. 什麼是URL
在介紹HTTP之前,我們對URL有一定的瞭解的,因為只有通過URL我們才能拿到網路上的資源。那麼究竟什麼是URL?
URL(Uniform Resource Locator 統一資源定位器):URL其實就是資源在互連網上的地址、位置,互連網上的每一個資源都有一個唯一的URL,只有通過URL我們才能找到互連網上唯一的資源。
URL的基本構成:協議://主機地址/路徑
http://www.cnblogs.com/iOSClub/articles/5233432.html
http://192.168.38.24/imgs/01.png
協議:不同的協議決定了不同的資源尋找和傳輸方式
主機地址:存放資源主機(伺服器)的IP地址
路徑:資源在主機(伺服器)的具體位置
2.URL中常見的幾種協議
瞭解了URL是什麼,那麼URL中常用的HTTP協議都有哪些?
注意:URL中不能出現空格以及中文等特殊符號.
- URL中,所有的字元都必須是 ASCII 碼;
- URL中不能出現中文和特殊符號(如空格);
所以,如果 URL 中出現了中文,需要添加百分比符號轉譯.
urlString=[urlStringstringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
3. 什麼是HTTP協議
HTTP協議(HyperText Tranfer Protocol 超文字傳輸通訊協定 (HTTP)):HTTP規定用戶端和伺服器之間資料的傳輸方式。
HTTP底層的原理:HTTP的底層就是通過socket建立串連通訊管道的,實現資料的傳輸。HTTP是一個TCP傳輸協議(方式),是一個可靠的安全的協議。
HTTP協議是在網路開發中最常用的協議.不管是移動用戶端還是PC端,訪問網路資源經常使用HTTP協議.
4.HTTP是做什麼的
HTTP的作用可以用一句話概述:使用戶端和服務端的資料有效傳輸。
5.為什麼要使用HTTP協議(HTTP協議的優點)
6. HTPP協議的通訊過程介紹
瞭解HTTP協議的簡介後,繼續瞭解HTTP協議的通訊過程,HTTP的通訊過程包含兩個方面:
HTTP請求:用戶端想伺服器端索要資料
HTTP協議規定:一個完成的HTTP協議要包含三個部分: 請求行、要求標頭、請求體
- 請求行:主要包含要求方法、請求路徑、HTTP協議版本
"GET /resources/images/ HTTP/1.1"
- 要求標頭:主要包含了對用戶端環境的描述,用戶端請求的主機地址資訊。
Host: 192.168.38.24:8080 class="Apple-tab-span">// 用戶端想訪問的伺服器主機地址
Accept: text/html // 用戶端所能接收的資料類型
Accept-Language: zh-cn // 用戶端的語言環境
Accept-Encoding: gzip // 用戶端支援的資料壓縮格式
Host: m.baidu.com // 用戶端想訪問的伺服器主機地址
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.10; rv:37.0) Gecko/20100101 Firefox/37.0 // 用戶端的類型,用戶端的軟體環境
- 請求體:用戶端發給伺服器的具體資料,比如檔案/資料
HTTP響應:伺服器返回用戶端想要的資料
用戶端向伺服器發送請求,伺服器應當做出響應,即返回資料給用戶端
HTTP協議規定:1個完整的HTTP響應中包含以下內容:
- 狀態行:包含了HTTP協議版本、狀態嗎、狀態代碼對應的英文名稱HTTP/1.1 200 OK
- 回應標頭:包含了對伺服器的描述,對返回資料的描述。
Content-Encoding: gzip // 伺服器支援的資料壓縮格式
Content-Length: 1528 // 返回資料的長度
Content-Type: application/xhtml+xml;charset=utf-8 // 返回資料的類型
Date: Mon, 15 Jun 2015 09:06:46 GMT // 響應的時間
Server: apache // 伺服器類型
- 實體內容:伺服器返回給用戶端的具體資料(圖片/html/檔案...)
7. HTTP請求的選擇1.HTTP請求的簡單說明
1.HTTP的方法
HTTP協議定義了很多方法對應不同的資源操作,其中最常用的是GET 和 POST 方法.
GET、POST、OPTIONS、HEAD、PUT、DELETE、TRACE、CONNECT、PATCH
增:PUT
刪:DELETE
改:POST
查:GET
因為 GET 和 POST 可以實現上述所有操作,所以,在現實開發中,我們只要會用GET 和 POST 方法就可以了.
2.參數
在與伺服器互動時,有時候需要給伺服器發送一些資料,比如登入時需要發送使用者名稱和密碼.
參數:就是指傳遞給伺服器的具體資料.
2. GET請求
GET:本質是從伺服器得到資料,效率更高.並且GET請求可以被緩衝.
注意: 網路快取資料,儲存在SQLite的資料庫中(路徑:NSHomeDirectory())。
在請求 URL 後面以 ? 的形式跟上發給伺服器的參數,參數以 "參數名"="參數值"的形式拼接,多個參數之間用 & 分隔.
注意:GET的長度是有限制的,不同的瀏覽器有不同的長度限制,一般在2~8K之間.
3. POST請求
POST:本質是向伺服器發送資料,也可以獲得伺服器處理之後的結果,效率不如GET.POST請求不可以被緩衝,每次重新整理之後都需要重新提交表單.
發送給伺服器的參數全部放在'請求體'中;理論上,POST傳遞的資料量沒有限制.
注意:所有涉及到使用者隱私的資料(密碼/銀行卡號等...)都要用POST的方式傳遞.
4.GET和POST請求的選擇
GET和POST請求的選擇可以參考下面四個原則:
1.如果要傳遞大量資料,比如檔案上傳,只能用POST請求
2.GET的安全性比POST要差些,如果包含機密\敏感資訊,建議用POST
3.如果僅僅是索取資料(資料查詢),建議使用GET
4.如果是增加、修改、刪除資料,建議使用POST
8. 怎麼發送HTTP請求
建議:為了提高開發效率,企業開發用的基本是第三方架構
1. 蘋果原生的發送請求
- NSURLConnection:用法簡單,最古老最經典最直接的一種方案
- NSURLSession:iOS 7新出的技術,功能比NSURLConnection更加強大
- CFNetwork:NSURL*的底層,純C語言
2. 第三方架構
- ASIHttpRequest:外號“HTTP終結者”,功能極其強大,可惜早已停止更新
- AFNetworking:簡單易用,提供了基本夠用的常用功能
具體如何發送請求,前面的部落格已經有做說明不在此贅述了。