淺談HTTP協議

好好學習,每天向上html

本文已收錄至個人Github倉庫DayDayUP:github.com/RobodLee/DayDayUP,歡迎Star,更多文章請前往:目錄導航git

咱們天天都在網上衝浪🚢,不少人都知道上網的用的最多的就是HTTP協議,可是你知道什麼是HTTP協議嗎?HTTP報文長什麼樣子?這篇文章就讓咱們來好好聊一聊什麼是HTTP協議。github

HTTP簡介

HTTP協議全稱爲Hyper Text Transfer Protocol(超文本傳輸協議),是用於客戶端和服務器之間的通訊的一種協議,它規定了傳輸信息的格式。瞭解計算機網絡的小夥伴都應該知道,TCP/IP網絡模型分爲四層,自上而下分別是:應用層,傳輸層,網絡層以及網絡接口層。而HTTP協議就是處於最上面的應用層協議。何時咱們會用到HTTP協議的呢,當咱們在瀏覽器中輸入一個地址時,或者點擊頁面上的某個連接的時候,HTTP協議就開始工做了。它會幫你添加請求方法,協議類型、版本,首部字段等一系列信息構成一個完整的請求報文發送給服務器,服務器一樣也會返回一個遵循HTTP協議規則的響應報文給你,而後瀏覽器對響應報文進行解析,給你呈現出一個精美的界面。雖然你只是作了一個很簡單的操做,可是HTTP協議在背後幫助你作了不少工做,從而保障了你與服務器之間可以順利地通訊。web

HTTP的幾個概念

1、HTTP是無狀態協議

HTTP協議的一個特色就是它是無狀態協議。無狀態的意思就是不保存狀態,就是HTTP自身不對請求和響應之間的通訊狀態進行保存。當客戶端向服務器發送一次請求以後,再次請求的時候服務器已經不記得上次客戶端請求了什麼。json

可是有的時候要須要保存狀態,好比逛淘寶的時候。那麼HTTP怎麼實現保持狀態功能呢,這就用到了Cookie技術,客戶端和服務端經過在HTTP報文中添加一個Cookie字段來獲取以前的狀態信息。就像下圖所示:瀏覽器

2、 HTTP的狀態碼

什麼是HTTP狀態碼呢?當咱們訪問服務器時,服務器返回給咱們的信息中會有一個數字,叫作狀態碼,狀態碼是用來描述服務器返回給瀏覽器的請求結果。通常分爲5類:緩存

分類 描述
1XX 接收的請求正在處理
2XX 請求正常處理完畢
3XX 須要進行附加操做以完成請求
4XX 服務器沒法處理請求
5XX 服務器處理請求出錯

細分的話就不少了,我畫了幾張思惟導圖,這樣看起來比較清晰:安全

1XX
1XX
2XX
2XX
3XX
3XX
4XX
4XX
5XX
5XX

若是想要思惟導圖原件的話,能夠點擊下載服務器

我已經列舉了一大堆了,其實還不止這些,可是咱們日常用的其實很少,我在這裏列舉了這麼可能是但願你對HTTP狀態碼有個更全面的認識。其實經常使用的也就十幾個:微信

狀態碼 描述
200 OK 表示從客戶端發來的請求在服務器端被正常處理了
204 No Content 正常處理,但響應報文中沒有主體部分
206 Partial Content 客戶端進行了範圍請求,服務器只返回請求範圍中的內容
301 Moved Permanently 永久性重定向,表示請求的資源已被分配了新的URL
302 Found 臨時性重定向,表示請求的資源臨時分配了新的URL,規定了禁止從POST變爲GET
303 See Other 功能和302相同,可是應使用GET請求
304 Not Modified 服務端資源未改變,可直接使用客戶端未過時的緩存
307 Temporary Redirect 和302相似,但不會從POST變爲GET
400 Bad Request 錯誤的請求,請求報文中存在語法錯誤
401 Unauthorized 表示發送的請求須要有經過HTTP認證的認證信息
403 Forbidden 服務器拒絕了瀏覽器的請求
404 Not Found 不用我說了吧,你們都應該感覺過了
500 Internal Server Error 服務器在執行請求時發生了錯誤
503 Service Unavailable 服務器正忙着呢,沒空搭理你

3、 HTTP方法

當咱們向服務器發送請求報文的時候,會在請求行中添加一個方法,好比GET,POST等,服務器經過這個方法就能夠知道咱們的意圖,從而作出正確的判斷,返回正確的數據。由於每一種方法都對應着不一樣的意圖。

一般咱們使用到的大概是如下幾種:

序號 方法 說明
1 GET 請求指定的頁面信息,並返回實體主體
2 POST 向指定資源提交數據進行處理請求,數據被包含在請求體中。好比登陸,註冊
3 PUT 更改服務器中的數據
4 HEAD 得到報文首部
5 DELETE 刪除指定的數據
6 OPTIONS 獲取服務器支持的HTTP請求方法
7 TRACE 追蹤路徑
8 CONNECT 要求用隧道協議鏈接代理

HTTP報文

說完了以上幾個概念就能夠介紹HTTP報文了,HTTP報文是客戶端與服務器之間進行交互的信息,不管是你向服務器發送了一個請求仍是服務器返回給你一條數據,都是經過報文的形式發送的,請求用的是請求報文,響應用的是響應報文。咱們先來看一個例子直觀的感覺一下,好比咱們來訪問百度的主頁:

百度報文截圖
百度報文截圖

能夠看到,不管是請求報文仍是響應報文,都含有報文首部,報文主體等信息。固然,這裏的請求報文沒有主體,由於是GET請求。

HTTP報文結構
HTTP報文結構

上面這張圖就是完整的報文格式了,咱們來分析一下。

請求行包含了請求的方法,請求URI和HTTP版本,例如 GET /index.html HTTP/1.1 ,請求URI不必定會有,好比上面的百度主頁就沒有,可是你用百度搜索內容就會有,我在這裏就不截圖了。

狀態行包含了HTTP版本,狀態碼和緣由短語,好比 HTTP/1.1 200 OK

空行就是一個空行,什麼也沒有,只是用於隔開首部和主體的。

報文主體沒什麼好說的,就是服務器給你的,或者你給服務器的真實數據,像什麼html或者json之類的。

這裏重點要說的就是首部字段,首部字段起到了傳遞額外重要信息的做用。是由首部字段名和字段值構成的,中間用冒號隔開,就像這樣:

Connection:keep-alive

根據實際用途分爲了4種類型:

  • 通用首部字段 請求報文和響應報文都會使用的首部。

    通用首部字段
    通用首部字段
  • 請求首部字段

    從客戶端向服務器發送請求報文時使用的首部。

    請求首部字段
    請求首部字段
  • 響應首部字段

    從服務器端向客戶端返回響應報文時使用的首部。

    響應首部字段
    響應首部字段
  • 實體首部字段

    針對請求報文和響應報文的實體部分使用的首部。

    實體首部字段
    實體首部字段

    關於HTTP首部的內容很是多,我就不細講了,上面的4張圖我是從《圖解HTTP》上面找的,感興趣的朋友能夠看看這本書,比我講的要詳細多了,內容也更全面。

最後

文章寫到這裏就基本上把HTTP協議講完了。和HTTP相關的還有HTTPS,它是經過添加一層SSL(Secure Sockets Layer 安全套接字協議),使得HTTP可以安全地傳輸,由於HTTP是明文傳輸,不安全,這裏就不展開講了(由於我也沒太搞明白HTTPS,哈哈😄)。文中可能有講的不恰當的地方,歡迎留言交流。

微信公衆號
微信公衆號
相關文章
相關標籤/搜索