1. HTTP簡介

HTTP

一. 網(wǎng)絡知識基礎

  1. 網(wǎng)絡編程中的幾個基本概念

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

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

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


    網(wǎng)絡交互.png

二. HTTP

  1. URL

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

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


      ![Uploading HTTP協(xié)議_465404.png . . .]
  3. HTTP協(xié)議簡介

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


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

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

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

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

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

    • HTTP報文結(jié)構(gòu)示意圖:


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

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

    • 客戶端向服務器發(fā)送請求, 服務器應當響應客戶端的請求, 并且返回數(shù)據(jù)給客戶端
    • HTTP協(xié)議規(guī)定: 一個完整的HTTP響應應該包含以下內(nèi)容
    • 響應頭: 包含了對服務器的描述, 對返回數(shù)據(jù)的描述
      • HTTP/1.1 200 OK: HTTP協(xié)議版本, 狀態(tài)碼, 狀態(tài)的英文說明
      • Server: Apache-Coyote/1.1: 服務器的類型
      • Content-Type: image/jpeg: 返回數(shù)據(jù)的類型
      • Content-Length: 56811: 返回數(shù)據(jù)的長度
      • Date: Mon, 23 Jun 2014 12:54:52 GMT: 響應的時間
    • 響應體: 服務器返回給客戶端的具體數(shù)據(jù), 比如請求一個文件, 返回的整體文件數(shù)據(jù)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

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

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