iOS開發HTTP協議相關知識總結

来源:http://www.cnblogs.com/iOSClub/archive/2016/04/22/5421245.html
-Advertisement-
Play Games

HTTP原理 1. 什麼是URL 在介紹HTTP之前,我們對URL有一定的瞭解的,因為只有通過URL我們才能拿到網路上的資源。那麼究竟什麼是URL? URL(Uniform Resource Locator 統一資源定位符):URL其實就是資源在互聯網上的地址、位置,互聯網上的每一個資源都有一個唯一 ...


HTTP原理

  1. 什麼是URL
  2. URL中常見的幾種協議
  3. 什麼是HTTP協議
  4. HTTP是做什麼的
  5. 為什麼要使用HTTP協議
  6. HTPP協議的通信過程介紹
    1. HTTP請求
    2. HTTP響應
  7. HTTP請求的選擇
    1. 兩種發送請求方式的比較(應用場景)
    2. GET請求
    3. POST請求
  8. 怎麼發送HTTP請求
    1. 蘋果原生的發送方式
    2. 通過第三方框架

1. 什麼是URL

  在介紹HTTP之前,我們對URL有一定的瞭解的,因為只有通過URL我們才能拿到網路上的資源。那麼究竟什麼是URL?

  URL(Uniform Resource Locator 統一資源定位符):URL其實就是資源在互聯網上的地址、位置,互聯網上的每一個資源都有一個唯一的URL,只有通過URL我們才能找到互聯網上唯一的資源。

  URL的基本構成:協議://主機地址/路徑

  http://www.cnblogs.com/iOSClub/articles/5233432.html

  http://192.168.38.24/imgs/01.png

 

 

協議:不同的協議決定了不同的資源查找和傳輸方式

主機地址:存放資源主機(伺服器)的IP地址

路徑:資源在主機(伺服器)的具體位置

 

2.URL中常見的幾種協議

  瞭解了URL是什麼,那麼URL中常用的HTTP協議都有哪些?

  1. http:// 超文本傳輸協議,訪問遠程網路資源的方式,也是我們最常用的協議
  2. ftp:// 訪問共用主機的資源的方式
  3. file:// 訪問本地電腦資源的方式
  4. mailto:// 訪問電子郵件地址的方式

註意:URL中不能出現空格以及中文等特殊符號.

  • URL中,所有的字元都必須是 ASCII 碼;
  • URL中不能出現中文和特殊符號(如空格); 

所以,如果 URL 中出現了中文,需要添加百分號轉譯.

urlString=[urlStringstringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];

3. 什麼是HTTP協議

  HTTP協議(HyperText Tranfer Protocol 超文本傳輸協議):HTTP規定客戶端和伺服器之間數據的傳輸方式。

  HTTP底層的原理:HTTP的底層就是通過socket建立連接通信管道的,實現數據的傳輸。HTTP是一個TCP傳輸協議(方式),是一個可靠的安全的協議。

  HTTP協議是在網路開發中最常用的協議.不管是移動客戶端還是PC端,訪問網路資源經常使用HTTP協議.

 

4.HTTP是做什麼的

HTTP的作用可以用一句話概述:使客戶端和服務端的數據有效的傳輸。

 

5.為什麼要使用HTTP協議(HTTP協議的優點)

  1. 靈活:HTTP協議允許傳輸各種類型的數據。
  2. 簡單快速:HTTP協議簡單,傳輸速度快。因為其協議簡單,HTTP伺服器規模比較小,所以通信速度快。
  3. HTTP協議是短連接(非持續性連接):HTTP限制每次每次連接只處理一個請求,伺服器對請求作出響應後就馬上斷開,這樣就可以節省傳輸時間。(這是HTTP 0.9/1.0之後使用的)

 

6. HTPP協議的通信過程介紹

瞭解HTTP協議的簡介後,繼續瞭解HTTP協議的通信過程,HTTP的通信過程包含兩個方面:

 

 

HTTP請求:客戶端想伺服器端索要數據

HTTP協議規定:一個完成的HTTP協議要包含三個部分: 請求行、請求頭、請求體

  • 請求行:主要包含請求方法、請求路徑、HTTP協議版本

  "GET /resources/images/ HTTP/1.1"

  • 請求頭:主要包含了對客戶端環境的描述,客戶端請求的主機地址信息。

  Host: 192.168.38.24:8080 class="Apple-tab-span">// 客戶端想訪問的伺服器主機地址

  Accept: text/html // 客戶端所能接收的數據類型

  Accept-Language: zh-cn // 客戶端的語言環境

  Accept-Encoding: gzip // 客戶端支持的數據壓縮格式

  Host: m.baidu.com // 客戶端想訪問的伺服器主機地址

  User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.10; rv:37.0) Gecko/20100101 Firefox/37.0 // 客戶端的類型,客戶端的軟體環境

  • 請求體:客戶端發給伺服器的具體數據,比如文件/數據

 

HTTP響應:伺服器返回客戶端想要的數據

客戶端向伺服器發送請求,伺服器應當做出響應,即返回數據給客戶端

HTTP協議規定:1個完整的HTTP響應中包含以下內容:

  • 狀態行:包含了HTTP協議版本、狀態嗎、狀態碼對應的英文名稱HTTP/1.1 200 OK
  • 響應頭:包含了對伺服器的描述,對返回數據的描述。

        Content-Encoding: gzip // 伺服器支持的數據壓縮格式

        Content-Length:  1528 // 返回數據的長度

        Content-Type:  application/xhtml+xml;charset=utf-8 // 返回數據的類型

        Date: Mon, 15 Jun 2015 09:06:46 GMT // 響應的時間

 Server: apache  // 伺服器類型

  • 實體內容:伺服器返回給客戶端的具體數據(圖片/html/文件...)

7. HTTP請求的選擇

1.HTTP請求的簡單說明

1.HTTP的方法

  HTTP協議定義了很多方法對應不同的資源操作,其中最常用的是GET 和 POST 方法.

  GET、POST、OPTIONS、HEAD、PUT、DELETE、TRACE、CONNECT、PATCH

  增:PUT

  刪:DELETE

  改:POST

  查:GET

  因為 GET 和 POST 可以實現上述所有操作,所以,在現實開發中,我們只要會用GET 和 POST 方法就可以了.

2.參數

  在與伺服器交互時,有時候需要給伺服器發送一些數據,比如登錄時需要發送用戶名和密碼.

  參數:就是指傳遞給伺服器的具體數據.

 

2. GET請求

  GET:本質是從伺服器得到數據,效率更高.並且GET請求可以被緩存.

 註意: 網路緩存數據,保存在SQLite的資料庫中(路徑:NSHomeDirectory())。

  在請求 URL 後面以 ? 的形式跟上發給伺服器的參數,參數以 "參數名"="參數值"的形式拼接,多個參數之間用 & 分隔.

 註意:GET的長度是有限制的,不同的瀏覽器有不同的長度限制,一般在2~8K之間.

 

3. POST請求

  POST:本質是向伺服器發送數據,也可以獲得伺服器處理之後的結果,效率不如GET.POST請求不可以被緩存,每次刷新之後都需要重新提交表單.

發送給伺服器的參數全部放在'請求體'中;理論上,POST傳遞的數據量沒有限制.

註意:所有涉及到用戶隱私的數據(密碼/銀行卡號等...)都要用POST的方式傳遞.

4.GET和POST請求的選擇

GET和POST請求的選擇可以參考下麵四個原則:

  1.如果要傳遞大量數據,比如文件上傳,只能用POST請求

  2.GET的安全性比POST要差些,如果包含機密\敏感信息,建議用POST

  3.如果僅僅是索取數據(數據查詢),建議使用GET

  4.如果是增加、修改、刪除數據,建議使用POST

 

8. 怎麼發送HTTP請求

建議:為了提高開發效率,企業開發用的基本是第三方框架

1. 蘋果原生的發送請求

  • NSURLConnection:用法簡單,最古老最經典最直接的一種方案
  • NSURLSession:iOS 7新出的技術,功能比NSURLConnection更加強大
  • CFNetwork:NSURL*的底層,純C語言

2. 第三方框架

  • ASIHttpRequest:外號“HTTP終結者”,功能極其強大,可惜早已停止更新
  • AFNetworking:簡單易用,提供了基本夠用的常用功能

具體如何發送請求,前面的博客已經有做說明不在此贅述了。

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 一 KVC的基本概念 KVC是Key Value Coding的縮寫,意思是鍵值編碼。 在iOS中,提供了一種方法通過使用屬性的名稱(也就是Key)來間接訪問對象屬性的方法,這個方法可以不通過getter/setter方法來訪問對象的屬性。用KVC可以間接訪問對象屬性的機制。通常我們使用valueF ...
  • // 註意,在有導航欄的情況下,需要在viewDidLoad 中加上 self.automaticallyAdjustsScrollViewInsets = NO;不然會出現圖片下移64的情況 ,scrollView.frame的高度要比圖片的高度大64,不然,圖片顯示不全 源文件在這裡:http: ...
  • Socket小白篇-附加TCP/UDP簡介 1.Socket 什麼是Socket Socket:又稱作是套接字,網路上的兩個程式通過一個雙向的通信連接實現數據的交換,這個連接的一端稱為Socket。 Socket是對TCP/IP的協議的封裝,Socket本身並不是協議,而是一個調用的介面,只有通過S ...
  • 以下內容為原創,歡迎轉載,轉載請註明 來自天天博客: Android MVP&依賴註入&單元測試 註意 :為了區分 中的 與`Android View MVP View Viewer`來表示。 這裡暫時先只討論 和 ,`Model`暫時不去涉及。 1.1 MVP 基礎框架 1.1.1 前提 首先需要 ...
  • 程式的實現需要藉助幾個對象: NSURLRequest:建立了一個請求,可以指定緩存策略、超時時間。和NSURLRequest對應的還有一個NSMutableURLRequest,如果請求定義為NSMutableURLRequest則可以指定請求方法(GET或POST)等信息。 NSURLConne ...
  • 1、場景 1.1 最新三次的提交 分別是:定義了一個變數k = 10 、 定義了一個變數 j = 6 、 定義了一個變數 i = 5 ; 本地倉庫 和 遠程倉庫保持一致 1.2 我添加了一行代碼 如何回退版本到最近的一次,也就是 定義一個變數 k = 10 這個版本 ? 回退的結果 已經回到我們想要 ...
  • 我們在Service(Ⅰ)中瞭解了Service最基本的知識點,今天我們繼續學習Service這個組件(神器)。 先來說一下Service的生命周期:跟Activity相比,Service的生命周期就太簡單了:onCreate()->onStart()->onDestroy() 【主題】:Activ ...
  • 在程式開始以#開頭的命令,他們是預編譯命令。有三類預編譯命令:巨集定義命令、文件包含命令、條件編譯命令;今天聊聊巨集定義: 巨集定義命令將一個標識符定義為一個字元串,源程式中的該標識符均以指定的字元串來代替。因此預處理命令後通常不加分號。這並不是說所有的預處理命令後都不能有分號出現。由於巨集定義只是用巨集名對 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...