HTTP原理 1. 什麼是URL 在介紹HTTP之前,我們對URL有一定的瞭解的,因為只有通過URL我們才能拿到網路上的資源。那麼究竟什麼是URL? URL(Uniform Resource Locator 統一資源定位符):URL其實就是資源在互聯網上的地址、位置,互聯網上的每一個資源都有一個唯一 ...
HTTP原理
- 什麼是URL
- URL中常見的幾種協議
- 什麼是HTTP協議
- HTTP是做什麼的
- 為什麼要使用HTTP協議
- HTPP協議的通信過程介紹
- HTTP請求
- HTTP響應
- HTTP請求的選擇
- 兩種發送請求方式的比較(應用場景)
- GET請求
- POST請求
- 怎麼發送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協議都有哪些?
- http:// 超文本傳輸協議,訪問遠程網路資源的方式,也是我們最常用的協議
- ftp:// 訪問共用主機的資源的方式
- file:// 訪問本地電腦資源的方式
- mailto:// 訪問電子郵件地址的方式
註意:URL中不能出現空格以及中文等特殊符號.
- URL中,所有的字元都必須是 ASCII 碼;
- URL中不能出現中文和特殊符號(如空格);
所以,如果 URL 中出現了中文,需要添加百分號轉譯.
urlString=[urlStringstringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
3. 什麼是HTTP協議
HTTP協議(HyperText Tranfer Protocol 超文本傳輸協議):HTTP規定客戶端和伺服器之間數據的傳輸方式。
HTTP底層的原理:HTTP的底層就是通過socket建立連接通信管道的,實現數據的傳輸。HTTP是一個TCP傳輸協議(方式),是一個可靠的安全的協議。
HTTP協議是在網路開發中最常用的協議.不管是移動客戶端還是PC端,訪問網路資源經常使用HTTP協議.
4.HTTP是做什麼的
HTTP的作用可以用一句話概述:使客戶端和服務端的數據有效的傳輸。
5.為什麼要使用HTTP協議(HTTP協議的優點)
- 靈活:HTTP協議允許傳輸各種類型的數據。
- 簡單快速:HTTP協議簡單,傳輸速度快。因為其協議簡單,HTTP伺服器規模比較小,所以通信速度快。
- HTTP協議是短連接(非持續性連接):HTTP限制每次每次連接只處理一個請求,伺服器對請求作出響應後就馬上斷開,這樣就可以節省傳輸時間。(這是HTTP 0.9/1.0之後使用的)
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:簡單易用,提供了基本夠用的常用功能
具體如何發送請求,前面的博客已經有做說明不在此贅述了。