網(wǎng)絡(luò)(Network)

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)化

  1. 網(wǎng)絡(luò)請(qǐng)求性能優(yōu)化的出發(fā)點(diǎn):
    1. 努力消除或減少不必要的網(wǎng)絡(luò)延遲;
    2. 將需要傳輸?shù)臄?shù)據(jù)壓縮至最少。
  2. 性能優(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等。
  3. 其它說明
    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.
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容