01 網(wǎng)絡(luò)基本概念
1-1 客戶端(就是手機(jī)或者ipad等手持設(shè)備上面的APP)
1-2 服務(wù)器(遠(yuǎn)程服務(wù)器-本地服務(wù)器)
1-3 請(qǐng)求(客戶端索要數(shù)據(jù)的方式)
1-4 響應(yīng)(需要客戶端解析數(shù)據(jù))
1-5 數(shù)據(jù)庫(服務(wù)器的數(shù)據(jù)從哪里來)

網(wǎng)絡(luò)編程基本概念.png
02服務(wù)器
2-1 遠(yuǎn)程服務(wù)器
1 別名:外網(wǎng)服務(wù)器、正式服務(wù)器
2 使用階段:應(yīng)用上線后使用的服務(wù)器
3 使用人群:供全體用戶使用
4 速度:取決于服務(wù)器的性能、用戶的網(wǎng)速
2-2 本地服務(wù)器
1 別名:內(nèi)網(wǎng)服務(wù)器、測(cè)試服務(wù)器
2 使用階段:應(yīng)用處于開發(fā)、測(cè)試階段使用的服務(wù)器
3 使用人群:僅供公司內(nèi)部的開發(fā)人員、測(cè)試人員使用
4 速度:由于是局域網(wǎng),所以速度飛快,有助于提高開發(fā)測(cè)試效率
-
03 Http
01 URL 1-1 如何找到服務(wù)器(通過一個(gè)唯一的URL) 1-2 URL介紹 a. 統(tǒng)一資源定位符 b. url格式(協(xié)議\主機(jī)地址\路徑) c. 協(xié)議:不同的協(xié)議,代表著不同的資源查找方式、資源傳輸方式 d. 主機(jī)地址:存放資源的主機(jī)(服務(wù)器)的IP地址(域名) e. 路徑:資源在主機(jī)(服務(wù)器)中的具體位置 1-3 請(qǐng)求協(xié)議 【file】訪問的是本地計(jì)算機(jī)上的資源,格式是file://(不用加主機(jī)地址) 【ftp】訪問的是共享主機(jī)的文件資源,格式是ftp:// 【mailto】訪問的是電子郵件地址,格式是mailto: 【http】超文本傳輸協(xié)議,訪問的是遠(yuǎn)程的網(wǎng)絡(luò)資源,格式是http://(網(wǎng)絡(luò)請(qǐng)求中最常用的協(xié)議) 02 http協(xié)議 2-1 http協(xié)議簡單介紹 a.HTTP的全稱是Hypertext Transfer Protocol,超文本傳輸協(xié)議 b.規(guī)定客戶端和服務(wù)器之間的數(shù)據(jù)傳輸格式 c.讓客戶端和服務(wù)器能有效地進(jìn)行數(shù)據(jù)溝通 2-2 http協(xié)議優(yōu)缺點(diǎn) a.簡單快速(協(xié)議簡單,服務(wù)器端程序規(guī)模小,通信速度快) b.靈活(允許傳輸各種數(shù)據(jù)) c.非持續(xù)性連接(1.1之前版本是非持續(xù)的,即限制每次連接只處理一個(gè)請(qǐng)求,服務(wù)器對(duì)客戶端的請(qǐng)求做出響應(yīng)后,馬上斷開連接,這種方式可以節(jié)省傳輸時(shí)間) 2-3 基本通信過程 a.請(qǐng)求:客戶端向服務(wù)器索要數(shù)據(jù) b.響應(yīng):服務(wù)器返回客戶端相應(yīng)的數(shù)據(jù) 03 GET和POST請(qǐng)求 3-1 http里面發(fā)送請(qǐng)求的方法 GET(常用)、POST(常用)、OPTIONS、HEAD、PUT(增)、DELETE(刪)、TRACE、CONNECT、PATCH 3-2 GET和POST請(qǐng)求的對(duì)比【區(qū)別在于參數(shù)如何傳遞】 GET a. 在請(qǐng)求URL后面以?的形式跟上發(fā)給服務(wù)器的參數(shù),多個(gè)參數(shù)之間用&隔開,比如 http://ww.test.com/login?username=123&pwd=234&type=JSON b. 由于瀏覽器和服務(wù)器對(duì)URL長度有限制,因此在URL后面附帶的參數(shù)是有限制的,通常不能超過1KB POST a. 發(fā)給服務(wù)器的參數(shù)全部放在請(qǐng)求體中 b.POST請(qǐng)求需要把參數(shù)轉(zhuǎn)換為二進(jìn)制數(shù)據(jù)設(shè)置請(qǐng)求體 c. 理論上,POST傳遞的數(shù)據(jù)量沒有限制(具體還得看服務(wù)器的處理能力) d.POST請(qǐng)求創(chuàng)建的請(qǐng)求對(duì)象要求是可變的,且需要修改請(qǐng)求方法為POST。 3-3 如何選擇:除數(shù)據(jù)查詢外,其它的一律使用POST請(qǐng)求 04 iOS中發(fā)送http請(qǐng)求的方案 4-1 蘋果原生 NSURLConnection 03年推出的古老技術(shù)【坑比較多】 NSURLSession 13年推出iOS7(13年)之后,以取代NSURLConnection【重點(diǎn)】 CFNetwork NSURL*的底層技術(shù)、C語言的 4-2 第三方框架 ASIHttpRequest:外號(hào)“HTTP終結(jié)者”,功能極其強(qiáng)大,可惜早已停止更新 AFNetworking【重點(diǎn)】:簡單易用,提供了基本夠用的常用功能,維護(hù)和使用者多 MKNetworkKit:上手有一定難度,產(chǎn)自三哥的故鄉(xiāng)印度,維護(hù)和使用者少05 http請(qǐng)求通信過程 請(qǐng)簡單說明HTTP通信的過程?答:完整的HTTP通信包括兩個(gè)部分,即請(qǐng)求和響應(yīng)。 1)請(qǐng)求是客戶端向服務(wù)器索要數(shù)據(jù)的行為,請(qǐng)求包括兩個(gè)部分,一個(gè)是請(qǐng)求頭,一個(gè)是請(qǐng)求體。 (1)請(qǐng)求頭中存放著對(duì)客戶端以及本次請(qǐng)求的一些描述信息(如客戶端環(huán)境,能夠接收的數(shù)據(jù)類型等) (2)請(qǐng)求體中存放參數(shù)(GET請(qǐng)求沒有請(qǐng)求體) 2)當(dāng)接收到客戶端的請(qǐng)求后,服務(wù)器會(huì)對(duì)該請(qǐng)求進(jìn)行響應(yīng)。響應(yīng)包括兩部分,一個(gè)是響應(yīng)頭,一個(gè)是響應(yīng)體。 (1)響應(yīng)頭中存放著對(duì)服務(wù)器端的一些描述信息(如服務(wù)器的類型,響應(yīng)的時(shí)間等) (2)響應(yīng)體中存放中服務(wù)端返回給客戶端的數(shù)據(jù),通常我們?cè)陂_發(fā)中要解析的是響應(yīng)體信息。 3)其它。在開發(fā)中我們可能需要對(duì)請(qǐng)求頭進(jìn)行必要的設(shè)置,如告知服務(wù)端請(qǐng)求客戶端的類型等,而響應(yīng)頭內(nèi)部(狀態(tài)行)的信息可以幫助我們進(jìn)行接口調(diào)試,如響應(yīng)狀態(tài)碼等等。 5-1 請(qǐng)求 【包括請(qǐng)求頭+請(qǐng)求體·非必選】 請(qǐng)求頭:包含了對(duì)客戶端的環(huán)境描述、客戶端請(qǐng)求信息等 GET /minion.png HTTP/1.1 //包含了請(qǐng)求方法、請(qǐng)求資源路徑、HTTP協(xié)議版本 Host: 120.25.226.186:32812 //客戶端想訪問的服務(wù)器主機(jī)地址 User-Agent: Mozilla/5.0 //客戶端的類型,客戶端的軟件環(huán)境 Accept: text/html, // 客戶端所能接收的數(shù)據(jù)類型 Accept-Language: zh-cn // 客戶端的語言環(huán)境 Accept-Encoding: gzip // 客戶端支持的數(shù)據(jù)壓縮格式 請(qǐng)求體:客戶端發(fā)給服務(wù)器的具體數(shù)據(jù),比如文件數(shù)據(jù)(POST請(qǐng)求才會(huì)有) 5-2 響應(yīng) 【響應(yīng)頭+響應(yīng)體】 響應(yīng)頭:包含了對(duì)服務(wù)器的描述、對(duì)返回?cái)?shù)據(jù)的描述 HTTP/1.1 200 OK // 包含了HTTP協(xié)議版本、狀態(tài)碼、狀態(tài)英文名稱 Server: Apache-Coyote/1.1 // 服務(wù)器的類型 Content-Type: image/jpeg // 返回?cái)?shù)據(jù)的類型 Content-Length: 56811 // 返回?cái)?shù)據(jù)的長度 Date: Mon, 23 Jun 2014 12:54:52 GMT // 響應(yīng)的時(shí)間 響應(yīng)體:服務(wù)器返回給客戶端的具體數(shù)據(jù),比如文件數(shù)據(jù) 5-3 通信過程 a.發(fā)送請(qǐng)求的時(shí)候把請(qǐng)求頭和請(qǐng)求體(請(qǐng)求體是非必須的)包裝成一個(gè)請(qǐng)求對(duì)象 b.服務(wù)器端對(duì)請(qǐng)求進(jìn)行響應(yīng),在響應(yīng)信息中包含響應(yīng)頭和響應(yīng)體,響應(yīng)信息是對(duì)服務(wù)器端的描述,具體的信息放在響應(yīng)體中傳遞給客戶端
4.NSURLConnection(過期)
5.NSURLSession
6.AFN框架
7.網(wǎng)絡(luò)請(qǐng)求優(yōu)化
- 網(wǎng)絡(luò)請(qǐng)求性能優(yōu)化的出發(fā)點(diǎn):
1. 努力消除或減少不必要的網(wǎng)絡(luò)延遲;
2. 將需要傳輸?shù)臄?shù)據(jù)壓縮至最少。 - 性能優(yōu)化具體實(shí)現(xiàn):
1. 減少DNS查找。每次主機(jī)名的解析都需要 次 絡(luò)往返,從 增加請(qǐng)求的延遲時(shí)間,同時(shí) 還會(huì)阻塞后續(xù)的請(qǐng)求。
2. 重用TCP連接。盡可能的使用持久連接,以消除因TCP握 和慢啟動(dòng)導(dǎo)致的延遲。
3. 減少HTTP重定向。HTTP重定向需要額外的DNS查詢、TCP握 等非常耗時(shí),最佳的重定向次數(shù)為0。
4. 使用CDN(內(nèi)容分發(fā)網(wǎng)絡(luò))。把數(shù)據(jù)放在離用戶地理位置更近的地 ,可以明顯減少每 次TCP連接的 絡(luò)延遲,增 吞吐量。
5. 刪除不必要請(qǐng)求的資源。
6. 在客戶端緩存資源。緩存必要的應(yīng)用資源,避免每次請(qǐng)求都請(qǐng)求相同的內(nèi)容,如多圖片下載可以考慮使用緩存。
7. 內(nèi)容在傳輸前先壓縮。傳輸數(shù)據(jù)之前應(yīng)該壓縮應(yīng)用資源,把要傳輸?shù)淖止?jié)減少到最小,在壓縮的時(shí)候確保對(duì)每種不同的資源采用最好的壓縮字段。
8. 消除不必要的請(qǐng)求開銷。減少請(qǐng)求的HTTP首部數(shù)據(jù)(比如HTTP cookie)。
9. 并行處理請(qǐng)求和響應(yīng)。請(qǐng)求和響應(yīng)的排隊(duì)都會(huì)導(dǎo)致延遲,可以嘗試并 的處理請(qǐng)求和響應(yīng)。(利用多個(gè)HTTP/1.1連接實(shí)現(xiàn)并 下載|在可能的情況下利用HTTP管道技術(shù)|考慮升級(jí)到HTTP/2.0以提升性能)
10. 針對(duì)協(xié)議版本采取優(yōu)化措施。如升級(jí)HTTP/1.1協(xié)議版本到2.0等。 - 其它說明
1. TCP連接數(shù)量 == 6
由于HTTP/1.1不支持多路復(fù)用,因此如果要處理多個(gè)網(wǎng)絡(luò)請(qǐng)求,在處理HTTP請(qǐng)求的時(shí)候,多數(shù)瀏覽器廠商都是不假思索的就在客戶端排隊(duì)所有的HTTP請(qǐng)求,然后通過一個(gè)持久連接,一個(gè)接著一個(gè)的發(fā)送這些請(qǐng)求。然而這種方式性能實(shí)在太差。實(shí)際上,瀏覽器開發(fā)商對(duì)于對(duì)于此性能問題,尚沒有任何更好的辦法,因此只能允許客戶端并行打開多個(gè)TCP連接會(huì)話。但是具體最多可以打開多少個(gè)TCP連接是有數(shù)量限制的,多數(shù)現(xiàn)代的瀏覽器,包括桌面和移動(dòng)瀏覽器,都支持打開6個(gè)連接。即客戶端可以并行分派最多6個(gè)請(qǐng)求,服務(wù)器可以并行處理最多6個(gè)請(qǐng)求。
2. 為什么是6個(gè)連接?有什么特殊的意義嗎?
這個(gè)數(shù)字是多方平衡后的結(jié)果:這個(gè)數(shù)字越大,能夠帶來更多的請(qǐng)求并行能力,但是同樣的客戶端課服務(wù)器端所占用的資源也會(huì)越多。因此,每個(gè)主機(jī)6個(gè)連接只不過是大家都覺得比較安全,能夠接受的一個(gè)數(shù)字。
在iOS中NSURLSessionConguration內(nèi)部有HTTPMaximumConnectionsPerHost屬性,可以設(shè)置連接的數(shù)量:The default value is 6 in OS X, or 4 in iOS.