
HTTP 和 TCP 的關係HTTP 是在 TCP 傳輸協議上層的應用層協議,主要解決如何包裝數據的問題,關於 TCP/IP 和 HTTP 協議的關係,網絡有一段比較容易理解的介紹:“我們在傳輸數據時,可以只使用(傳輸層)TCP/IP 協議,但是如果沒有應用層,便無法識別數據內容,如果想要使傳輸的數據有意義,則必須使用到應用層協議,應用層協議有很多,比如 HTTP、FTP、TELNET 等,也可以自己定義應用層協議,Web 使用 HTTP 協議作應用層協議,以封裝 HTTP 文本信息,然後使用 TCP/IP 做傳輸層協議將它發到網絡上”。
HTTP 協議和 TCP 協議1、HTTP 訪問到服務器的過程從在瀏覽器中輸入一個網址直到請求到達服務器的過程中如下圖。

2、長連接在 HTTP1.0 版本中,每一個請求都需要在 TCP 協議中經歷 “三次握手四次揮手”,在 HTTP1.1 中有了長連接,這個問題得到了改善,可以通過創建的一次 TCP 連接,進行多次請求響應,並在結束後關閉 TCP 連接。
HTTP1.0 版本:

HTTP1.1 長連接版本:

3、管線化在不同的瀏覽器中對於訪問同一個域名,都有一個最大的請求數限制,數量大小因瀏覽器而異,如果請求數量大於最大請求數限制,則需要排隊等待其他請求結束。
管線化技術,在超出最大請求數限制,客戶端繼續發送請求到服務端,而不需要其他請求得到響應的時候才能進行,實現並行發送請求,CDN 是比較典型的解決方式,將靜態資源分發到不同 ip 下的服務器,請求資源是通過不同的代理服務器去同時獲取,可以提高頁面初始化響應的速度。

4、URI 和 URLURI:是統一資源標識符,在某個規則下能把這個資源獨一無二標示出來,類似人的身份證號; URL:統一資源定位符,表示資源的地點,URL 是使用瀏覽器訪問 Web 頁面時需要輸入的網頁地址。
URL 的組成:
http://username:password@www.pandashen.com:80/2018/07/09/index.html?uid=1&name=panda#ch1
http :協議類型;
username:password :登錄信息(如 Github,不安全);
www.pandashen.com :服務器地址(與前面用 @ 連接);
80 :服務器端口號(與前面用 : 連接);
/2018/07/09/index.html :帶層次的文件路徑;
uid=1&name=panda :查詢字符串(與前面用 ? 連接);
ch1 :片段標識符(hash 值,與前面使用 # 連接)。
HTTP 的組成請求的一方叫客戶端,響應的一方叫服務器端,通過請求和響應達成通信,HTTP 是一種無狀態的協議。
1、請求報文請求報文包含請求行、請求首部和請求體三個部分。

請求行由三個部分組成,並寫在同一行,分別為請求方法、請求路徑(域名和端口號後面的部分)和協議/版本號。
請求方法:
- GET:獲取資源
- POST:向服務器端發送數據,傳輸實體主體
- PUT:傳輸文件
- HEAD:獲取報文首部
- DELETE:刪除文件
- OPTIONS:詢問支持的方法
- TRACE:追蹤路徑
追蹤路徑方式如下圖:

請求體內的內容為向服務端發送的數據,首部分為通用首部、請求首部、響應首部和實體首部四種,在後面詳細說明。
2、響應報文響應報文同樣包含三個部分,響應行、響應首部和響應體。

響應行由三個部分組成,並寫在同一行,分別為協議/版本號、狀態碼和狀態碼原因短語。
注意:在請求首部與請求體之間、在響應首部與響應體之間都應該空一個空行。
HTTP 響應狀態碼狀態碼負責表示客戶端請求的返回結果、標記服務器端是否正常、通知出現的錯誤。
1、狀態碼類別類別 | 原因短語 |
---|
1XX | Informational(信息性狀態碼) | 2XX | Success(成功狀態碼) | 3XX | Redirection(重定向) | 4XX | Client Error(客戶端錯誤狀態碼)
| 5XX | Server Error(服務器錯誤狀態嗎) |
2、常見狀態碼(1) 成功狀態碼 | 原因短語 | 原因解釋 |
---|
200 | OK | 客戶端發過來的數據被正常處理 | 204 | Not Content | 正常響應,沒有實體 | 206 | Partial Content | 範圍請求,返回部分數據,響應報文中由 Content-Range 指定實體內容 |
(2) 重定向狀態碼 | 原因短語 | 原因解釋 |
---|
301 | Moved Permanently | 永久重定向 | 302 | Found | 臨時重定向,規範要求方法名不變,但是都會改變成 GET | 303 | See Other | 和 302 類似,但必須用 GET 方法 | 304 | Not Modified | 狀態未改變,配合(If-Match、If-Modified-Since、If-None_Match、If-Range、If-Unmodified-Since) | 307 | Temporary Redirect | 臨時重定向,不該改變請求方法 |
(3) 客戶端錯誤狀態碼 | 原因短語 | 原因解釋 |
---|
400 | Bad Request | 請求報文語法錯誤 | 401 | Unauthorized | 需要認證 | 403 | Forbidden | 服務器拒絕訪問對應的資源 | 404 | Not Found | 服務器上無法找到資源 |
(4) 服務器錯誤狀態碼 | 原因短語 | 原因解釋 |
---|
500 | Internal Server Error | 服務器故障 | 503 | Service Unavailable | 服務器處於超負載或正在停機維護 |
HTTP 首部HTTP 首部字段是 HTTP 報文首部的重要部分,在客戶端和服務器進行通信的過程中,無論是請求還是響應都會使用首部字段,它能起到傳遞額外重要信息的作用。
HTTP 首部主要分為通用首部、請求首部、響應首部和實體首部四種:
- 通用首部字段:請求和響應報文兩方都會使用的首部字段;
- 請求首部字段:從客戶端向服務器發送請求報文時使用的首部字段,補充了請求的附加內容,客戶端信息,響應內容相關優先級等信息;
- 響應首部字段:從服務器向客戶端返迴響應報文時使用的首部字段;補充了響應的附加內容,也會要求客戶端附加額外的內容信息;
- 實體首部字段:針對請求報文和響應報文的實體部分使用的首部,補充了資源內容的更新時間等與實體有關的信息。
1、通用首部字段首部字段名 | 說明 |
---|
Cache-Control | 控制緩存行為 | Connection | 鏈接的管理 | Date | 報文日期 | Pragma | 報文指令
| Trailer | 報文尾部的首部 | Trasfer-Encoding | 指定報文主體的傳輸編碼方式 | Upgrade | 升級為其他協議 | Via | 代理服務器信息 | Warning | 錯誤通知 |
2、請求首部字段首部字段名 | 說明 |
---|
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 客戶端程序的信息 |
3、響應首部字段首部字段名 | 說明 |
---|
Accept-Ranges | 是否接受字節範圍 | Age | 資源的創建時間 | ETag | 資源的匹配信息 | Location | 客戶端重定向至指定的 URI
| Proxy-Authenticate | 代理服務器對客戶端的認證信息 | Retry-After | 再次發送請求的時機 | Server | 服務器的信息 | Vary | 代理服務器緩存的管理信息 | www-Authenticate | 服務器對客戶端的認證 |
4、實體首部字段首部字段名 | 說明 |
---|
Allow | 資源可支持的 HTTP 方法 | Content-Encoding | 實體的編碼方式 | Content-Language | 實體的自然語言 | Content-Length | 實體的內容大小(字節為單位)
| Content-Location | 替代對應資源的 URI | Content-MD5 | 實體的報文摘要 | Content-Range | 實體的位置範圍 | Content-Type | 實體主體的媒體類型 | Expires | 實體過期時間 | Last-Modified | 資源的最後修改時間 |
總結本篇重點介紹關於 HTTP 協議的一點基礎知識,關於請求、響應以及報文對應的信息及內容,也可以用作查詢使用。
|