網(wǎng)絡(luò)
網(wǎng)絡(luò)的基本概念
- 為什么學(xué)習(xí)網(wǎng)絡(luò)編程
- 所有的app都需要用到網(wǎng)絡(luò)
- 只有通過網(wǎng)絡(luò)跟外界進(jìn)行數(shù)據(jù)交互、數(shù)據(jù)更新,應(yīng)用才能保持新鮮、活力
- 移動網(wǎng)絡(luò)應(yīng)用 = 良好的UI +良好的用戶體驗 + 實時更新的數(shù)據(jù)
- 網(wǎng)絡(luò)編程是一種實時更新應(yīng)用數(shù)據(jù)的常用手段
- 網(wǎng)絡(luò)編程是開發(fā)優(yōu)秀網(wǎng)絡(luò)應(yīng)用的前提和基礎(chǔ)
- 基本概念:
客戶端:移動應(yīng)用(ios/android等應(yīng)用)
-
服務(wù)器:為客戶端提供服務(wù)、提供數(shù)據(jù)、提供資源的機器
- 分類:
- 遠(yuǎn)程服務(wù)器(外網(wǎng)服務(wù)器、正式服務(wù)器)比如百度的網(wǎng)頁,任何人只要聯(lián)網(wǎng)就能使用,一般應(yīng)用上線后使用的服務(wù)器
- 本地服務(wù)器(內(nèi)網(wǎng)服務(wù)器、測試服務(wù)器),開發(fā)、測試階段使用的服務(wù)器
- 分類:
請求:客戶端向服務(wù)器索取數(shù)據(jù)的一種行為(通過網(wǎng)絡(luò)向服務(wù)器發(fā)送一個請求,目的是向服務(wù)器索要資源數(shù)據(jù))
響應(yīng):服務(wù)器對客戶端的請求作出響應(yīng),返回客戶端想要的資源(數(shù)據(jù))
開發(fā)中:搭建UI界面,發(fā)送網(wǎng)絡(luò)請求,刷新界面
HTTP相關(guān)概念
-
如何找到服務(wù)器?
- URL
-
URL
Uniform Resource Locator(統(tǒng)一資源定位符)
通過一個URL,能找到互聯(lián)網(wǎng)上唯一的一個資源
URL就是資源的地址、位置,互聯(lián)網(wǎng)上的每一個資源都有一個唯一的URL
URL的基本格式 = 協(xié)議://主機地址/路徑
協(xié)議:不同的協(xié)議,代表著不同的資源查找方式,資源傳輸方式
主機地址:存放資源的主機(服務(wù)器)的ip地址(域名)
路徑:資源在主機(服務(wù)器)中的具體位置
-
常見協(xié)議:
- HTTP:超文本傳輸協(xié)議,訪問的是遠(yuǎn)程的網(wǎng)絡(luò)資源,格式為http://,http協(xié)議是在網(wǎng)絡(luò)開發(fā)中最常用的協(xié)議
- file:訪問的是本地計算機上的資源,格式:file://(不用加主機地址)
- mailto:訪問的是電子郵件地址,格式為mailto:
- FTP:訪問的是共享主機的文件資源,格式是ftp://
-
網(wǎng)絡(luò)編程中能夠用到的協(xié)議
- TCP/IP協(xié)議簇
- HTTP屬于它內(nèi)部的一個子集
- 規(guī)則(協(xié)議)
- 使用到的協(xié)議簇的統(tǒng)稱
- 分層設(shè)計思想:(查看參考模型)
- 應(yīng)用層:HTTP/FTP/SMTP/DNS/RPC/SNM
- 傳輸層:TCP/UDP
- Internet層:RARP/IP/IGMP/ICMP
- 網(wǎng)絡(luò)接口層:以太網(wǎng)...
- TCP/IP協(xié)議簇
-
HTTP協(xié)議
- 訪問遠(yuǎn)程網(wǎng)絡(luò)資源
-
思考:
- 客戶端應(yīng)該傳什么格式的數(shù)據(jù)給服務(wù)器,服務(wù)器才能看懂?
- 服務(wù)器應(yīng)該返回什么格式的數(shù)據(jù)給客戶端,客戶端才能看懂?
- 兩邊怎樣傳輸數(shù)據(jù)才能有效溝通
- HTTP協(xié)議(超文本傳輸協(xié)議)Hypertext Transfer Protocol
- 規(guī)定客戶端和服務(wù)器之間的數(shù)據(jù)傳輸格式,讓客戶端和服務(wù)器有效的溝通
-
HTTP協(xié)議的特點
- 簡單快速
- 靈活:允許傳輸各種各樣數(shù)據(jù)
- HTTP0.9和1.0使用非持續(xù)連接,限制每次連接只處理一個請求,服務(wù)器對客戶端的請求作出響應(yīng)后,馬上斷開連接,這種方式可以節(jié)省傳輸時間。HTTP1.0之后變?yōu)槌掷m(xù)連接
-
HTTP基本通信過程
- 請求:客戶端向服務(wù)器索要數(shù)據(jù)
- 響應(yīng):服務(wù)器返回客戶端相應(yīng)的數(shù)據(jù)
1.確定請求路徑url
http://www.baidu.com:80/tools.html
2.獲取主機名
www.baidu.com
3.DNS域名解析
192.168.31.1
4.獲得端口號80
5.連接到192.168.31.1的端口80
6.發(fā)送HTTP GET請求
7.接收到服務(wù)器的響應(yīng)
8.關(guān)閉連接
GET請求|POST請求
-
發(fā)送請求的方法
- GET:查
- POST:改
- OPTIONS
- HEAD
- PUT:增
- DELETE:刪
- TRACE
- CONNECT
- PATCH
參數(shù):傳遞給服務(wù)器的具體數(shù)據(jù),比如登錄時的賬號、密碼
-
GET和POST對比
- 區(qū)別表現(xiàn)在數(shù)據(jù)傳遞上
- GET:在請求URL后面以?的形式跟上發(fā)給服務(wù)器的參數(shù),多個參數(shù)之間用&隔開,瀏覽器和服務(wù)器對URL的長度有限制,因此URL后面附帶的參數(shù)是有限制的,通常不能超過1KB
- POST:發(fā)給服務(wù)取得參數(shù)全部放在請求體中,理論上,POST傳遞的數(shù)據(jù)量沒有限制
- 如何選擇?(公司后臺規(guī)定的,接口文檔)
- 如果要傳遞大量數(shù)據(jù),比如文件上傳、只能用POST
- GET的安全性比POST要差一些,如果包含機密、敏感信息,建議用POST
- 如果僅僅是索取數(shù)據(jù)(數(shù)據(jù)查詢),建議使用GET
- 如果是增刪改查數(shù)據(jù),建議使用POST
-
HTTP版本說明
- HTTP0.9|HTTP1.0
- 公司用的還是HTTP1.1(1997年),使用了持久連接
- HTTP2.0,提高了性能(面試會問你有沒有關(guān)注2.0,你們公司用的是1.1還是2.0)
- rfc文檔
-
常見的響應(yīng)狀態(tài)碼
- 調(diào)試接口
- 200 OK 請求成功
- 400 客戶端請求語法錯誤,服務(wù)器無法解析BadRequest
- 404 服務(wù)器無法根據(jù)客戶端的請求找到資源 NotFound
- 500 服務(wù)器內(nèi)部錯誤,無法完成請求 Internal Server Error
HTTP通信的過程(請求和響應(yīng))
-
請求
- 請求頭:對客戶端的環(huán)境描述、客戶端請求信息
- 請求方法、請求資源路徑、HTTP協(xié)議版本
- 客戶端想訪問的服務(wù)器主機地址
- 客戶端的類型、客戶端的軟件環(huán)境
- 客戶端所能接收的數(shù)據(jù)類型
- 客戶端的語言環(huán)境
- 客戶端支持的數(shù)據(jù)壓縮格式
- 請求體:客戶端發(fā)給服務(wù)器的具體數(shù)據(jù),比如文件數(shù)據(jù)(post請求才會有)
- 請求頭:對客戶端的環(huán)境描述、客戶端請求信息
-
響應(yīng)
- 響應(yīng)頭:對服務(wù)器的描述、對返回數(shù)據(jù)的描述
- HTTP協(xié)議版本、狀態(tài)碼、狀態(tài)英文名稱
- 服務(wù)器類型
- 返回數(shù)據(jù)的類型
- 返回數(shù)據(jù)的長度
- 響應(yīng)的時間
- 響應(yīng)體:服務(wù)器返回給客戶端的具體數(shù)據(jù),比如文件數(shù)據(jù)
- 響應(yīng)頭:對服務(wù)器的描述、對返回數(shù)據(jù)的描述
-
HTTP通信過程
- 客戶端 <--> 服務(wù)器
ios中發(fā)送HTTP請求的方案
- 蘋果原生
- NSURLConnection
- NSURLSession:功能比NSURLConnection更加強大,2013推出,ios7開始出的技術(shù)
- CFNetwork:NSURL*的底層,純C語言
- 第三方框架
- ASIHttpRequest:HTTP終結(jié)者,但是不更新了,沒有人使用了
- AFNetworking
- MKNetworkKit