分享

HTTP 基礎 | PandaShen

 ipilipala 2018-10-12

HTTP 基礎

HTTP 和 TCP 的關係

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


HTTP 協議和 TCP 協議

1、HTTP 訪問到服務器的過程

從在瀏覽器中輸入一個網址直到請求到達服務器的過程中如下圖。


HTTP 協議訪問服務器流程

2、長連接

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

HTTP1.0 版本:


HTTP1.0 版本

HTTP1.1 長連接版本:


HTTP1.1 版本

3、管線化

在不同的瀏覽器中對於訪問同一個域名,都有一個最大的請求數限制,數量大小因瀏覽器而異,如果請求數量大於最大請求數限制,則需要排隊等待其他請求結束。

管線化技術,在超出最大請求數限制,客戶端繼續發送請求到服務端,而不需要其他請求得到響應的時候才能進行,實現並行發送請求,CDN 是比較典型的解決方式,將靜態資源分發到不同 ip 下的服務器,請求資源是通過不同的代理服務器去同時獲取,可以提高頁面初始化響應的速度。


HTTP 管線化

4、URI 和 URL

URI:是統一資源標識符,在某個規則下能把這個資源獨一無二標示出來,類似人的身份證號;
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:追蹤路徑

追蹤路徑方式如下圖:


TRACE 追蹤路徑

請求體內的內容為向服務端發送的數據,首部分為通用首部、請求首部、響應首部和實體首部四種,在後面詳細說明。

2、響應報文

響應報文同樣包含三個部分,響應行、響應首部和響應體。


請求報文

響應行由三個部分組成,並寫在同一行,分別為協議/版本號、狀態碼和狀態碼原因短語。

注意:在請求首部與請求體之間、在響應首部與響應體之間都應該空一個空行。


HTTP 響應狀態碼

狀態碼負責表示客戶端請求的返回結果、標記服務器端是否正常、通知出現的錯誤。

1、狀態碼類別

類別原因短語
1XXInformational(信息性狀態碼)
2XXSuccess(成功狀態碼)
3XXRedirection(重定向)
4XXClient Error(客戶端錯誤狀態碼)
5XXServer Error(服務器錯誤狀態嗎)

2、常見狀態碼

(1) 成功

狀態碼原因短語原因解釋
200OK客戶端發過來的數據被正常處理
204Not Content正常響應,沒有實體
206Partial Content範圍請求,返回部分數據,響應報文中由 Content-Range 指定實體內容

(2) 重定向

狀態碼原因短語原因解釋
301Moved Permanently永久重定向
302Found臨時重定向,規範要求方法名不變,但是都會改變成 GET
303See Other和 302 類似,但必須用 GET 方法
304Not Modified狀態未改變,配合(If-Match、If-Modified-Since、If-None_Match、If-Range、If-Unmodified-Since)
307Temporary Redirect臨時重定向,不該改變請求方法

(3) 客戶端錯誤

狀態碼原因短語原因解釋
400Bad Request請求報文語法錯誤
401Unauthorized需要認證
403Forbidden服務器拒絕訪問對應的資源
404Not Found服務器上無法找到資源

(4) 服務器錯誤

狀態碼原因短語原因解釋
500Internal Server Error服務器故障
503Service 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優先的語言
AuthorizationWeb 認證信息
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-AgentHTTP 客戶端程序的信息

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 協議的一點基礎知識,關於請求、響應以及報文對應的信息及內容,也可以用作查詢使用。


    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多