1.什麼是URLhtml
URL的全稱是Uniform Resource Locator(統一資源定位符)瀏覽器
經過1個URL,能找到互聯網上惟一的1個資源安全
URL就是資源的地址、位置,互聯網上的每一個資源都有一個惟一的URL服務器
URL的基本格式 = 協議://主機地址/路徑 http://202.108.22.5/img/bdlogo.gif網絡
協議:不一樣的協議,表明着不一樣的資源查找方式、資源傳輸方式.1>HTTP:// 表示採用HTTP協議,框架
主機地址:存放資源的主機的IP地址(域名)2>202.208.225/ 這是個人本地服務器地址,post
路徑:資源在主機中的具體位置3>img/bdlogo.gif 這是我要訪問的數據在我服務器上的路徑spa
2.URL中常見的協議:設計
- HTTP
- 超文本傳輸協議,訪問的是遠程的網絡資源,格式是http://
- http協議是在網絡開發中最經常使用的協議
- file
- 訪問的是本地計算機上的資源,格式是file://(不用加主機地址)
- mailto
- 訪問的是電子郵件地址,格式是mailto:
- FTP
- 訪問的是共享主機的文件資源,格式是ftp://
- HTTP協議簡介
- HTTP協議的做用
- HTTP的全稱是Hypertext Transfer Protocol,超文本傳輸協議
- 規定客戶端和服務器之間的數據傳輸格式
- 讓客戶端和服務器能有效地進行數據溝通
- HTTP協議的特色(目前Xcode默認支持HTTPS協議)
- 簡單快速
- 由於HTTP協議簡單,因此HTTP服務器的程序規模小,於是通訊速度很快
- 靈活
- HTTP容許傳輸任意類型的數據
- HTTP 0.9和1.0使用非持續鏈接
- 限制每次鏈接只處理一個請求,服務器對客戶端的請求作出響應後,立刻斷開鏈接,這種方式能夠節省傳輸時間
- HTTP的基本通訊過程:
- 要想使用HTTP協議向服務器索取數據,要了解HTTP的通訊過程
- 完整的http通訊能夠分爲2大步驟
- 請求:客戶端向服務器索要數據
- 響應:服務器返回客戶端相應的數據
- iOS中發送HTTP請求的方案
- 在iOS中,常見的發送HTTP請求的方案有
- 蘋果原生(自帶)
- NSURLConnection:用法簡單,最古老最經典最直接的一種方案
- NSURLSession:iOS 7新出的技術,功能比NSURLConnection更增強大
- CFNetwork:NSURL*的底層,純C語言
- 第三方框架
- ASIHttpRequest:外號「HTTP終結者」,功能極其強大,惋惜早已中止更新
- AFNetworking:簡單易用,提供了基本夠用的經常使用功能,維護和使用者多
- MKNetworkKit:簡單易用,產自三哥的故鄉印度,維護和使用者少
- 建議
- 爲了提升開發效率,企業開發用的基本是第三方框架
- 發送HTTP請求的方法:
- 在HTTP/1.1協議中,定義了8種發送http請求的方法
- GET、POST、OPTIONS、HEAD、PUT、DELETE、TRACE、CONNECT、PATCH
- 根據HTTP協議的設計初衷,不一樣的方法對資源有不一樣的操做方式
- PUT :增
- DELETE :刪
- POST:改
- GET:查
- 最經常使用的是GET和POST(實際上GET和POST都能辦到增刪改查)
- 要想使用GET和POST請求跟服務器進行交互,得先了解一個概念
- 參數
- 就是傳遞給服務器的具體數據,好比登陸時的賬號、密碼
- GET和POST的主要區別表如今數據傳遞上
- GET
- 在請求URL後面以?的形式跟上發給服務器的參數,多個參數之間用&隔開,好比
http://ww.test.com/login?username=123&pwd=234&type=JSON3d
- 因爲瀏覽器和服務器對URL長度有限制,所以在URL後面附帶的參數是有限制的,一般不能超過1KB
- POST
- 發給服務器的參數所有放在請求體中
- 理論上,POST傳遞的數據量沒有限制(具體還得看服務器的處理能力)
- GET和POST的選擇
- 選擇GET和POST的建議
- 若是要傳遞大量數據,好比文件上傳,只能用POST請求
- GET的安全性比POST要差些,若是包含機密\敏感信息,建議用POST
- 若是僅僅是索取數據(數據查詢),建議使用GET
- 若是是增長、修改、刪除數據,建議使用POST
- HTTP協議規定:1個完整的由客戶端發給服務器的HTTP請求中包含如下內容
- 請求行:包含了請求方法、請求資源路徑、HTTP協議版本
GET /LDServer/resources/images/1.jpg HTTP/1.1
從請求行中獲得的信息:1>發送的是GET請求,2>服務器名稱:LDServer,
3>資源路徑:resources/images/1.jpg 4>協議的版本:1.1
- 請求頭:包含了對客戶端的環境描述、客戶端請求的主機地址等信息
Host: 192.168.1.105:8080 // 客戶端想訪問的服務器主機地址
若是在百度上查找東西訪問的是百度的服務器,在谷歌上訪問的就是谷歌的服務器.
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.9) Firefox/30.0
// 客戶端的類型,客戶端的軟件環境
Macintosh; Intel Mac OS X 10.9:表示我是用的Mac電腦
Mozilla/5.0,Firefox/30.0:表示我是實用的是火狐瀏覽器
在QQ空間上看到說說的下面會有手機版本,就是經過這個實現的
Accept: text/html, */* // 客戶端所能接收的數據類型,txt和html格式的文件.*/*表示全部文件都能接收
Accept-Language: zh-cn // 客戶端的語言環境:中文
Accept-Encoding: gzip // 客戶端支持的數據壓縮格式
- 請求體:客戶端發給服務器的具體數據,好比文件數據
- HTTP通訊過程 - 響應
- 客戶端向服務器發送請求,服務器應當作出響應,即返回數據給客戶端
- HTTP協議規定:1個完整的HTTP響應中包含如下內容
- 狀態行:包含了HTTP協議版本、狀態碼、狀態英文名稱 HTTP/1.1 200 OK(常見狀態碼見下圖)
- 響應頭:包含了對服務器的描述、對返回數據的描述
Server: Apache-Coyote/1.1 // 服務器的類型
Content-Type: image/jpeg // 返回數據的類型
Content-Length: 56811 // 返回數據的長度
Date: Mon, 23 Jun 2015 12:54:52 GMT // 響應的時間
- 實體內容:服務器返回給客戶端的具體數據,好比文件數據
-
-
- (這個是咱們須要的主體內容,即方法返回的Data數據,須要解析的數據)
-
-
- GET方法POST方法總結:
- HTTP通訊過程"
- NSURLResponse
-
1.NSMutableURLRequest 是 NSURLRequest 的子類,只有NSMutableURLRequest 才能設置超時,超時是request的屬性,與GET,POST無關
Request.timeoutInterval = 5;
2.路徑中(生成URL以前的路徑)不能夠有中文,若是字符串路徑中有中文須要進行轉碼,咱們在地址欄中輸入有中文的路徑後是瀏覽器自動幫忙轉碼後再發送請求.
- 發送JSON數據給服務器:
- 多值參數: