iOS網路基礎 HTTP協議

陳振發表於2017-12-13

iOS網路基礎 - HTTP協議

HTTP協議

HTTP協議請求響應模型


      ---請求--->
客戶端   HTTP協議  伺服器
      <--響應---- 
      
複製程式碼

HTTP協議

  • 超文字傳輸協議(HyperText Transfer Protocol)
  • RFC 2616:HTTP 1.1
  • 是一個客戶端終端(使用者)和伺服器端(網站)請求和應答的標準

URL(Uniform Resource Locator)

http:api.douban.com/v2/book/17604305?fields=title,id,url,publisher,author schema://host[abs_path][?query_string]

  • 用於描述一個網路上的資源
  • schema:http
  • host:api.douban.com
  • abs_path:/v2/book/17604305
  • query-string:fields=title,id,url,publisher,author

HTTP訊息

如何約定傳輸的資料? 通過HTTP訊息(http message)

  • 從客戶端到伺服器的請求訊息 HTTP Request
  • 從伺服器到客戶端的響應訊息 HTTP Response

HTTP訊息格式

螢幕快照 2017-07-20 上午12.09.00.png

HTTP Request Start Line

  • HTTP方法 // get查 post增 put改 delete刪
  • URL
  • 版本資訊

GET vs POST

GET POST
用於獲取資訊 用於提交資訊
通過URL提交資料 通過HTTP Body提交資料

HTTP Header

  • 鍵值對描述
  • Key(field name):字串
  • 常見的header
    1. Host
    2. User-Agent
    3. Accept
    4. Accept-Encoding

HTTP Body 客戶端和伺服器之間規定的格式

HTTP Response

螢幕快照 2017-07-20 上午2.25.49.png

協議版本:HTTP/1.1 狀態碼:200 原因短語:OK 與狀態碼對應

狀態碼

  • 1xx:指示資訊--表示請求已接收,繼續處理 eg:100 Continue 繼續
  • 2xx:成功--表示請求已被成功接收,理解,接受 eg:200 OK 客戶端請求成功
  • 3xx:重定向--要完成請求必須進行進一步的操作 eg:301 Moved Permanently 請求永久重定向
  • 4xx:客戶端錯誤--請求有語法錯誤或請求無法實現 eg:404 Not Found 請求資源不存在
  • 5xx:伺服器端錯誤--伺服器未能實現合法的請求 eg:503 Service Unavailabel 服務當前不可用

HTTP Header

  • 鍵值對描述
  • Key:字串
  • Value:字串
  • 常見的Header:Content-Type Content-Length

HTTP Body

HTTP Header:Host

我要找誰?

Host:api.douban.com

  • 指定被請求資源的網路主機和埠號
  • 通常從HTTP URL 中提取出來
  • 必須的header

HTTP Header:User-Agent

我是誰

User-Agent:....

  • 包含關於發起請求的使用者代理的資訊
  • 用於識別發起請求的使用者

HTTP Header:Content-Type

我的資訊以什麼格式給你

Content-Type:application/json;charset=utf-8

  • 指明傳送給接收者的實體主體的媒體型別
    • 常見的媒體型別
      1. “application/x-www-form-urlencoded”
      2. “application/json”
      3. “application/xml”
      4. “multipart/form-data”

HTTP Header:Accept

我想要什麼格式

Accept:text/html;

指定哪些媒體型別的響應請求端是可接受的

HTTP Header:Content-Encoding

Content-Encoding:gzip

  • 表明對HTTP Body採用了什麼內容編碼
  • 內容編碼主要用於文件的壓縮或其他有效的變換

HTTP Header:Accept-Encoding

Accept-Encoding:gzip

  • 限定伺服器返回給客戶端可以接受的內容編碼

HTTP Header:Content-Length

Content-Length:3495

  • 傳送給接收者實體主體的大小
  • 以十進位制的位元組數表示

HTTP Header:Cookie

標記訪問者的身份

Cookie:health-check

  • 將Cookie的值傳送給伺服器

HTTP Header:Set-cookie

set-Cookie:locale

  • 伺服器將Cookie的值傳送給客戶端

HTTP 協議網路層次

螢幕快照 2017-07-20 上午3.12.28.png

螢幕快照 2017-07-20 上午3.13.26.png

HTTP協議

  • 應用層協議
  • 使用TCP作為其傳輸層
  • 預設埠:80

總結

  • URL
  • HTTP request
  • HTTP response
  • HTTP header

相關文章