一次HTTP操做稱爲一個事務,其工做過程大概以下:html
瀏覽器請求這個頁面:http://hackr.ip/index.html
在這一步,須要域名系統DNS解析域名hackr.ip,得主機的IP地址 20X.189.105.112。
而後將上面結合本機本身的信息,封裝成一個http請求數據包
複製代碼
Connection:keep-alive
,TCP鏈接在發送後將仍然保持打開狀態,因而,瀏覽器能夠繼續經過相同的鏈接發送請求。保持鏈接節省了爲每一個請求創建新鏈接所需的時間,還節約了網絡帶寬。
短鏈接的操做步驟是: 創建鏈接——數據傳輸——關閉鏈接...創建鏈接——數據傳輸——關閉鏈接瀏覽器
若是客戶請求頻繁,將在TCP的創建和關閉操做上浪費較多時間和帶寬。 緩存
長連接,指在一個鏈接上能夠連續發送多個數據包,在鏈接保持期間,若是沒有數據包發送,須要雙方發鏈路檢測包。bash
長連接操做步驟: 創建鏈接——數據傳輸...(保持鏈接)...數據傳輸——關閉鏈接服務器
長鏈接能夠省去較多的TCP創建和關閉的操做,減小浪費,節約時間網絡
長連接分爲 without pipelining 和 with pipelining,下圖中是without pipelining,客戶端只在收到前一個請求的響應後,才發出新的請求。 tcp
下圖是with pipelining,每次創建連接後無需等待請求回來就能夠發送下一個請求 post
客戶端發送一個HTTP請求到服務器的請求消息包括如下格式:網絡傳輸協議
請求行(request line)、請求頭部(header)、請求體組成,下圖給出了請求報文的通常格式。 編碼
請求行:
方法:
GET 獲取資源
POST 向服務器端發送數據,傳輸實體主體
PUT 傳輸文件
HEAD 獲取報文首部
DELETE 刪除文件
OPTIONS 詢問支持的方法
TRACE 追蹤路徑
協議/版本號
URL
請求頭:
通用首部(General Header)
請求首部(Request Header)
響應首部(Response Header)
實體首部(Entity Header Fields)
請求體
複製代碼
請求報文拆解:
HTTP響應組成:響應行、響應頭、響應體。
響應行
(HTTP/1.1)代表HTTP版本爲1.1版本,狀態碼爲200,狀態消息爲(ok)
響應頭
Date:生成響應的日期和時間;
Content-Type:指定了MIME類型的HTML(text/html),編碼類型是ISO-8859-1
響應體
複製代碼
響應報文拆解:
類別 | 緣由 |
---|---|
1XX | Informational(信息性狀態碼) |
2XX | Success(成功狀態碼) |
3XX | Redirection(重定向) |
4XX | Client Error(客戶端錯誤狀態碼) |
5XX | Server Error(服務器錯誤狀態嗎) |
200(OK 客戶端發過來的數據被正常處理
204(Not Content 正常響應,沒有實體
206(Partial Content 範圍請求,返回部分數據,響應報文中由Content-Range指定實體內容
複製代碼
301(Moved Permanently) 永久重定向
302(Found) 臨時重定向,規範要求,方法名不變,可是都會改變
303(See Other) 和302相似,但必須用GET方法
304(Not Modified) 狀態未改變, 配合(If-Match、If-Modified-Since、If-None_Match、If-Range、If-Unmodified-Since)
307(Temporary Redirect) 臨時重定向,不應改變請求方法
複製代碼
400(Bad Request) 請求報文語法錯誤
401 (unauthorized) 須要認證
403(Forbidden) 服務器拒絕訪問對應的資源
404(Not Found) 服務器上沒法找到資源
複製代碼
500(Internal Server Error)服務器故障
503(Service Unavailable) 服務器處於超負載或正在停機維護
複製代碼
首部字段名 | 說明 |
---|---|
Cache-Control | 控制緩存行爲 |
Connection | 連接的管理 |
Date | 報文日期 |
Pragma | 報文指令 |
Trailer | 報文尾部的首部 |
Trasfer-Encoding | 指定報文主體的傳輸編碼方式 |
Upgrade | 升級爲其餘協議 |
Via | 代理服務器信息 |
Warning | 錯誤通知 |
首部字段名 | 說明 |
---|---|
Accept | 用戶代理可處理的媒體類型 |
Accept-Charset | 優先的字符集 |
Accept-Encoding | 優先的編碼 |
Accept-Langulage | 優先的語言 |
Authorization | Web認證信息 |
Expect | 期待服務器的特定行爲 |
From | 用戶的電子郵箱地址 |
Host | 請求資源所在的服務器 |
If-Match | 比較實體標記 |
If-Modified-Since | 比較資源的更新時間 |
If-None-Match | 比較實體標記 |
If-Range | 資源未更新時發送實體Byte的範圍請求 |
If-Unmodified-Since | 比較資源的更新時間(和If-Modified-Since相反) |
Max-Forwards | 最大傳輸跳數 |
Proxy-Authorization | 代理服務器須要客戶端認證 |
Range | 實體字節範圍請求 |
Referer | 請求中的URI的原始獲取方 |
TE | 傳輸編碼的優先級 |
User-Agent | HTTP客戶端程序的信息 |
首部字段名 | 說明 |
---|---|
Accept-Ranges | 是否接受字節範圍 |
Age | 資源的建立時間 |
ETag | 資源的匹配信息 |
Location | 客戶端重定向至指定的URI |
Proxy-Authenticate | 代理服務器對客戶端的認證信息 |
Retry-After | 再次發送請求的時機 |
Server | 服務器的信息 |
Vary | 代理服務器緩存的管理信息 |
www-Authenticate | 服務器對客戶端的認證 |
首部字段名 | 說明 |
---|---|
Allow | 資源可支持的HTTP方法 |
Content-Encoding | 實體的編碼方式 |
Content-Language | 實體的天然語言 |
Content-Length | 實體的內容大小(字節爲單位) |
Content-Location | 替代對應資源的URI |
Content-MD5 | 實體的報文摘要 |
Content-Range | 實體的位置範圍 |
Content-Type | 實體主體的媒體類型 |
Expires | 實體過時時間 |
Last-Modified | 資源的最後修改時間 |
參考: