HTTP協議內容講解一

超文本傳輸​​協議是應用程序用於相互通信的協議。從本質上講,HTTP負責委託客戶端和服務器之間的所有互聯網媒體文件。這包括HTML,圖像,文本文件,電影以及介於兩者之間的所有內容。它可以快速可靠地完成這項工作。

HTTP協議內容講解一

HTTP是 應用程序協議而不是傳輸協議,因為它用於應用程序層中的通信。在這裡慢慢記憶是網絡堆棧的樣子。從該圖像中,您可以清楚地看到HTTP是應用程序協議,TCP可以在傳輸層上運行。

HTTP協議內容講解一

資源:互聯網上的一切都是資源,HTTP與資源協同工作。這包括文件,流,服務和其他一切。HTML頁面是一種資源,Youtube視頻是一種資源,您在Web應用程序上的日常任務的電子表格是一種資源......您明白了。

你如何將一種資源與另一種資源區分開來?

通過提供URL(統一資源定位器)。

URL指向瀏覽器可以找到資源的唯一位置。

如何在Web客戶端和Web服務器之間交換消息

每個內容,每個資源都存在於某個Web服務器(HTTP服務器)上。這些服務器期望HTTP請求提供這些資源。

但是,您如何從Web服務器請求資源?

當然,您需要一個HTTP客戶端!

您現在正在使用HTTP客戶端來閱讀本文。Web瀏覽器是HTTP客戶端。它們與HTTP服務器通信以檢索計算機的資源。一些最受歡迎的客戶是谷歌的Chrome,Mozilla的Firefox,Opera,Apple的Safari,以及不幸的是仍然臭名昭著的Internet Explorer。

消息和一些消息示例

那麼HTTP消息是什麼樣的?

如果不太多談論它,這裡有一些HTTP消息的例子:

HTTP協議內容講解一

HTTP協議內容講解一

請求的第一行是為請求行保留的它由 請求方法名稱,請求URIHTTP版本組成。

接下來的幾行代表請求標頭。請求標頭為請求提供附加信息,例如請求期望的內容類型,授權信息等。

對於GET請求,故事就在那裡結束。POST請求還可以具有正文並以正文消息的形式攜帶其他信息。在這種情況下,它是一條JSON消息,其中包含有關如何為URI中指定的給定repo創建GitHub webhook的附加信息。webhook創建需要該消息,因此我們使用POST請求將該信息提供給GitHub API。

請求行和請求標頭必須後跟 (回車和換行符\ r \ n),並且消息標題和僅包含 的消息正文之間只有一個空行。

作為對這些請求的回應,我們得到了什麼?

HTTP協議內容講解一

響應消息的結構與請求的結構非常相似,除了調用的第一行是 狀態行,它本身令人驚訝地傳遞有關響應狀態的信息。

狀態行後跟響應標頭響應正文

MIME類型

MIME類型用作描述Internet上文件類型的標準方法。您的瀏覽器有一個MIME類型列表,Web服務器也是如此。這樣,無論操作系統如何,都可以以相同的方式傳輸文件。

一個有趣的事實是MIME代表多用途Internet郵件擴展,因為它們最初是為多媒體電子郵件開發的。它們已經適用於HTTP和其他幾種協議。

每MIME類型由一個的類型子類型 和列表 可選參數 在以下格式: 類型/子類型; 可選參數。

HTTP協議內容講解一

HTTP請求方法(也稱為“動詞”)定義將對資源執行的操作。HTTP定義了幾種請求方法,其中最常見/使用的是GETPOST方法。

請求方法可以是冪等的或不是冪等的。這只是一個奇特的術語,用於解釋從同一資源多次調用該方法是安全/不安全的。換句話說,這意味著,唯一目的是檢索信息的GET方法默認情況下應該是冪等的。一遍又一遍地在同一資源上調用GET不應該導致不同的響應。另一方面,POST方法不是冪等方法。

在HTTP / 1.1之前,只有三種方法:GET,POST和HEAD,並且HTTP / 1.1的規範在遊戲中帶來了更多:OPTIONS,PUT,DELETE,TRACE和CONNECT。

標題字段是冒號分隔的名稱 - 值字段,您可以在請求或響應消息的第一行之後找到它們。它們為HTTP消息提供更多上下文,並確保客戶端和服務器適當地瞭解請求或響應的性質。

總共有五種類型的標題:

  • 常規標題: 這些標題對服務器和客戶端都很有用。一個很好的例子是Date頭字段,它提供有關消息創建時間的信息。
  • 請求標頭: 特定於請求消息。它們為服務器提供附加信息。例如,Accept:* / * header字段通知服務器客戶端願意接收任何媒體類型。
  • 響應標頭: 特定於響應消息。它們為客戶提供其他信息。例如,Allow:GET,HEAD,PUT標頭字段通知客戶端所請求資源允許哪些方法。
  • 實體標題: 這些標題處理實體主體。例如,Content-Type:text / html標題允許應用程序知道數據是HTML文檔。
  • 擴展標頭: 這些是由應用程序開發人員構建的非標準標頭。它們不是HTTP的一部分,但需要被容忍。

狀態代碼

狀態代碼

就是一個表示請求的結果的三位數。接下來是原因短語,它是人類可讀的狀態碼解釋。

一些例子包括:

  • 200:好的
  • 404:未找到
  • 500:內部服務器錯誤

狀態代碼分為五個不同的組。

HTTP協議內容講解一

通過學習HTTP獲得的知識並不能幫助您直接解決某些問題。但它讓您瞭解互聯網通信的基本原則,您可以將其應用於比HTTP更高級別的幾乎所有其他問題。無論是REST,API,Web應用程序開發還是網絡,您現在都可以在解決這些問題時更加自信。


分享到:


相關文章: