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