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訊息格式
HTTP Request Start Line
- HTTP方法 // get查 post增 put改 delete刪
- URL
- 版本資訊
GET vs POST
GET | POST |
---|---|
用於獲取資訊 | 用於提交資訊 |
通過URL提交資料 | 通過HTTP Body提交資料 |
HTTP Header
- 鍵值對描述
- Key(field name):字串
- 常見的header
- Host
- User-Agent
- Accept
- Accept-Encoding
HTTP Body 客戶端和伺服器之間規定的格式
HTTP Response
協議版本: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
- 指明傳送給接收者的實體主體的媒體型別
- 常見的媒體型別
- “application/x-www-form-urlencoded”
- “application/json”
- “application/xml”
- “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 協議網路層次
HTTP協議
- 應用層協議
- 使用TCP作為其傳輸層
- 預設埠:80
總結
- URL
- HTTP request
- HTTP response
- HTTP header