1. HTTP簡介

HTTP

一. 網絡知識基礎

  1. 網絡編程中的幾個基本概念

    • 客戶端Client: 移動應用App, 如iOS和安卓的應用
    • 服務器Server: 為客戶端提供服務, 提供數據, 提供資源的機器
    • 請求Request: 客戶端向服務器端索取數據的一種行為
    • 響應Response: 服務器對客戶端的請求作出的反應, 一般指返回數據給客戶端
  2. 移動應用的開發, 主要是對客戶端進行的開發, 一般的網絡交互如下圖所示

  3. 兩種服務器的基本概念:

    • 遠程服務器
      • 又稱外網服務器, 正式服務器
      • 使用階段: 應用上線后使用的服務器, 面向用戶, 供全體用戶使用
      • 速度: 取決于服務器的性能, 用戶的網速
    • 本地服務器
      • 又稱內網服務器, 測試服務器
      • 使用階段: 應用處于開發/測試階段時使用的服務器, 面向公司內部開發人員和測試人員
      • 速度: 由于是局域網, 所以會保證網速, 有助于提高開發測試的效率, 但是無法反應出真實的情況
  4. 網絡交互參考示意圖:


    網絡交互.png

二. HTTP

  1. URL

    • URL全程: Uniform Resource Locator(統一資源定位符)
    • URL就是資源的地址/位置, 互聯網上的每一個資源都有一個唯一的URL, 通過一個URL, 能找到互聯網中唯一的一個資源
    • URL的基本格式: 協議://主機地址/路徑
    • 協議: 不同的協議代表著不同的資源查找方式, 資源傳輸方式
      • HTTP: 超文本傳輸協議, 訪問的是遠程網絡資源(網絡開發中最長用的協議)
      • file: 訪問的是本地計算機上面的資源(file://不用加主機地址, 直接寫路徑)
      • mailto: 訪問的是電子郵件地址
      • ftp: 訪問的是共享主機的文件資源
    • 主機地址: 存放著資源的主機(服務器)的IP地址(域名)
    • 路徑: 資源在主機(服務器)中的具體位置
  2. TCP/IP協議簇

    • 通常意義上, 我們使用的網絡是在TCP/IP協議簇的基礎上運作的, 而HTTP屬于它內部的一個子集
    • 計算機與網絡設備需要通信的話, 雙方就要基于相同的方法, 比如具體應該如何探測通信目標, 由哪一方發起通信, 使用什么語言去通信等, 所有的這些議定的規則, 稱之為協議
    • 在協議中規定了很多的各式各樣的內容, 如選址方法, 雙方建立通信的順序等等, 這些協議如(ICMP/DNS/TCP/FTP/HTTP/SNMP/PPPoE/IP/FDDI等等), 通常我們把TCP/IP認為是在IP協議的通信過程中, 使用到的協議簇的總稱
    • TCP協議簇里面最重要一點, 就是分層設計
      • 按照層次分別分為: 應用層, 傳輸層, 網絡層, 數據鏈路層
      • 其中, 與HTTP關系密切的協議有TCP, IP, DNS等
    • 參考模型:


      ![Uploading HTTP協議_465404.png . . .]
  3. HTTP協議簡介

    • 移動端和PC端, 大多數遠程的網絡資源, 都使用的是HTTP協議
    • HTTP協議的作用:
      • 協議, 主要是為了客戶端和服務器達成的協議共識, 雙方遵守一份協議, 使用相同的語言才能互相進行交互
      • HTTP的全稱: Hypertext Transfer Protocol, 即超文本傳輸協議
      • 它規定了客戶端服務器之間的數據傳輸格式, 讓雙方進行有效的數據溝通
      • 如下圖所示:


        HTTP協議.png
    • HTTP協議的特點:
      • 簡單高效: 因為HTTP協議簡單, 所以HTTP服務器的程序規模都很輕靈, 通信速度相對很快
      • 靈活: HTTP可以傳輸各種各樣的數據
      • HTTP0.9和1.0使用非持續鏈接
        • 限制每次連接只處理一個請求, 服務器對客戶端的請求作出響應之后, 馬上斷開連接, 這種方式可以節省傳輸的時間
  4. HTTP的基本通信過程

    • 完整的HTTP通信可以分為2個步驟
      • 請求: 客戶端向服務器索取數據
      • 響應: 服務器返回客戶端需要的數據
    • 完整步驟
      1. 確定請求路徑URL
      2. 獲取主機名或者域名
      3. DNS域名解析
      4. 獲取端口號
      5. 連接到指定服務器的端口(如: 120.20.225.18的80端口)
      6. 客戶端向服務器發送一個GET請求
      7. 服務器返回客戶端請求的數據
      8. 關閉連接
  5. 發送HTTP請求的方法

    • 在HTTP1.1版本的協議中, 定義了8中發送HTTP請求的方法
      • GET, POST, OPTIONS, HEAD, PUT, DELETE, TRACE, CONNECT, PATCH
      • 根據HTTP協議的設計初衷, 不同的方法對資源有著不同的操作方式:
        • PUT: 增
        • DELETE: 刪
        • POST: 改
        • GET: 查
      • 其中最常用的就是GET和POST, 實際上GET和POST都能辦到增刪改查
    • 參數: 就是傳遞給服務器的具體數據, 比如登錄時的賬號密碼
  6. GET和POST的對比: GET和POST的區別主要體現在數據的傳遞上

    • GET:
      • 在請求URL后面以?的形式, 接上要發給服務器的參數, 多個參數之間用&隔開
      • 如: http://www.test.com/login?username=xxx&pwd=abc&type=JSON
      • 由于瀏覽器和服務器對URL長度有限制, 因此在URL后面附帶的參數是有限制的, 通常不能超過1kb
    • POST:
      • 發給服務器的參數, 全部都放在請求體
      • 理論上, POST傳遞的數據量沒有限制(但是只是理論上, 具體還得看服務器的處理能力)
  7. GET和POST的選擇

    • 如果要傳遞大量數據, 比如文件傳送, 只能使用POST請求
    • GET的安全性比POST要差, 如果包含機密信息的話, 建議使用POST
    • 如果只是索取數據, 建議使用GET, 比如數據查詢, 發送特定的參數, 獲取特定的數據
    • 如果是對數據做出修改, 建議使用POST
  8. HTTP報文

    • HTTP報文結構示意圖:


      報文示意圖.png
    • 報文首部: 在客戶端和服務器處理時, 起重要作用的信息(比如端口數據, 端口)
      • 請求報文
        • 請求行: 請求方法 + URL + HTTP版本
        • 請求頭:
          • 請求首部字段
          • 通用首部字段
          • 實體首部字段
      • 響應報文
        • 狀態行: HTTP版本 + 狀態碼
        • 響應頭:
          • 響應首部字段
          • 通用首部字段
          • 實體首部字段
    • 空行:
    • 報文主體(請求體/響應體): 請求參數或響應的數據
  9. HTTP通信過程 - 請求

    • HTTP協議規定: 一個完整的由客戶端發送給服務器的HTTP請求中, 包含以下內容
    • 請求頭: 包含了對客戶端的環境描述, 客戶端請求信息
      • GET/background.png HTTP/1.1: 請求方法+請求資源路徑+HTTP協議版本
      • Host: 120.25.225.168:81: 客戶端想訪問的服務器主機地址
      • User-Agent: Mozilla/5.0: 客戶端的類型, 客戶端的軟件環境
      • Accept: text/html(xx/xx): 客戶端所能接收的數據類型
      • Accept-Language: zh-cn: 客戶端的語言環境
      • Accept-Encoding: gzip: 客戶端支持的數據壓縮格式
    • 請求體: 客戶端發給服務器的具體數據, 比如文件數據(注: 只有POST請求才有)
  10. HTTP通信過程 - 響應

    • 客戶端向服務器發送請求, 服務器應當響應客戶端的請求, 并且返回數據給客戶端
    • HTTP協議規定: 一個完整的HTTP響應應該包含以下內容
    • 響應頭: 包含了對服務器的描述, 對返回數據的描述
      • HTTP/1.1 200 OK: HTTP協議版本, 狀態碼, 狀態的英文說明
      • Server: Apache-Coyote/1.1: 服務器的類型
      • Content-Type: image/jpeg: 返回數據的類型
      • Content-Length: 56811: 返回數據的長度
      • Date: Mon, 23 Jun 2014 12:54:52 GMT: 響應的時間
    • 響應體: 服務器返回給客戶端的具體數據, 比如請求一個文件, 返回的整體文件數據
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,622評論 6 544
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,716評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,746評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,991評論 1 318
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,706評論 6 413
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 56,036評論 1 329
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 44,029評論 3 450
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 43,203評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,725評論 1 336
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,451評論 3 361
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,677評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,161評論 5 365
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,857評論 3 351
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,266評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,606評論 1 295
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,407評論 3 400
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,643評論 2 380

推薦閱讀更多精彩內容