HTTP

一、介紹

HTTP,英文爲HyperText Transfer Protocol,中文解釋爲超文本傳輸協議,是互聯網上應用最爲廣泛的一種網絡協議。用於從WWW服務器傳輸超文本到本地瀏覽器的傳輸協議,所有的WWW文件都必須遵守這個標準。

HTTP協議是一個應用層協議,是請求/響應模型的,客戶端發起請求,服務器回送響應。服務器無法主動將消息推送給客戶端。

理論上,只要協議符合HTTP協議要求,都可以承載HTTP協議。通常HTTP協議承載於TCP/IP協議之上,有時也承載於TLS或SSL協議層之上,也就是我們常說的HTTPS。

HTTP默認端口號爲80,可以修改爲其他符合要求的端口。

HTTPS的端口號爲443。

二、特點

1.HTTP是無連接:無連接的含義是限制每次連接只處理一個請求。服務器處理完客戶的請求,並收到客戶的應答後,即斷開連接。

2.HTTP是媒體獨立的:只要客戶端和服務器知道如何處理的數據內容,任何類型的數據都可以通過HTTP發送。客戶端以及服務器指定使用適合的MIME-type內容類型。 

3.HTTP是無狀態:HTTP協議是無狀態協議。無狀態是指協議對於事務處理沒有記憶能力。同一個客戶端的這次請求和上次請求是沒有對應關係。

三、HTTP請求方式

HTTP1.0定義了三種請求方法: GET, POST 和 HEAD方法。
HTTP1.1新增了五種請求方法:OPTIONS, PUT, DELETE, TRACE 和 CONNECT 方法。

1.GET:請求指定的資源,並返回消息主體。

2.HEAD:類似於GET請求,但是沒有相應內容,只有響應頭信息。

3.POST:向指定資源提交數據進行處理請求(例如提交表單或者上傳文件)。數據被包含在請求體中。POST請求可能會導致新的資源的建立和/或已有資源的修改。

4.PUT:從客戶端向服務器傳送的數據取代指定的文檔的內容。

5.DELETE:請求服務器刪除指定的資源。

6.OPTIONS:允許客戶端查看服務器的性能。

7.TRACE:回顯服務器收到的請求,主要用於測試或診斷。

8.CONNECT:HTTP1.1協議中預留給能夠將連接改爲管道方式的代理服務器。

四、URL和URI

HTTP使用統一資源標識符(Uniform Resource Identifiers, URI)來傳輸數據和建立連接。如:www.baidu.com。

URL,全稱是UniformResourceLocator, 中文叫統一資源定位符,是互聯網上用來標識某一處資源的地址。如:www.baidu.com/s?wd=http。

區別:URI,是uniform resource identifier,統一資源標識符,用來唯一的標識一個資源。URL是uniform resource locator,統一資源定位器,它是一種具體的URI,即URL可以用來標識一個資源,而且還指明瞭如何locate這個資源。

五、HTTP狀態碼

狀態代碼由三位數字組成,第一個數字定義了響應的類別,共分五種類別:

1xx:指示信息--表示請求已接收,繼續處理。

2xx:成功--表示請求已被成功接收、理解、接受。

3xx:重定向--要完成請求必須進行更進一步的操作。

4xx:客戶端錯誤--請求有語法錯誤或請求無法實現。

5xx:服務器端錯誤--服務器未能實現合法的請求。

常見狀態碼的含義

        200---OK/請求已經正常處理完畢。

        400---客戶端請求存在語法錯誤。

        404---客戶端請求的URL在服務端不存在。

        500---服務端錯誤。

六、HTTP請求消息

客戶端發送一個HTTP請求到服務器的請求消息包括以下格式:一個起始行,一個或者多個頭域,一個指示頭域結束的空行和可選的消息體組成。

HTTP的頭域包括通用頭,請求頭,響應頭和實體頭四個部分。每個頭域由一個域名,冒號(:)和域值三部分組成。域名是大小寫無關的,域值前可以添加任何數量的空格符,頭域可以被擴展爲多行,在每行開始處,使用至少一個空格或製表符。

GET請求消息例子,用PostMan工具抓取

GET /s?wd=http HTTP/1.1
Host: www.baidu.com
Cache-Control: no-cache
Postman-Token: d4f9c568-4967-4e59-a1d7-e9d743a55923

第一部分:請求行,用來說明請求類型爲GET,要訪問的資源爲/s?wd=http以及所使用的HTTP版本爲HTTP/1.1。

第二部分:請求頭部,緊接着請求行(即第一行)之後的部分,用來說明服務器要使用的附加信息。

Host指出請求資源的目的地;Cache-Control指定請求和響應遵循的緩存機制,no-cache指示請求或響應消息不能緩存;Postman-Token是工具生成的,可以忽略。

第三部分:空行,請求頭部後面的空行是必須的。

POST請求消息例子,用PostMan工具抓取(注意:百度禁止用post請求該地址,這裏爲測試用)

POST /s HTTP/1.1
Host: www.baidu.com
Content-Type: application/x-www-form-urlencoded
Cache-Control: no-cache
Postman-Token: 5cf2fa8a-bac8-4b8a-8d67-e58e1217352e

wd=http

第一部分:請求行,用來說明請求類型爲POST,要訪問的資源爲/s以及所使用的HTTP版本爲HTTP/1.1。

第二部分:請求頭部,緊接着請求行(即第一行)之後的部分,用來說明服務器要使用的附加信息。

Host指出請求資源的目的地;Content-Type內容類型,application/x-www-form-urlencoded數據被編碼爲名稱/值對。;Cache-Control指定請求和響應遵循的緩存機制,no-cache指示請求或響應消息不能緩存;Postman-Token是工具生成的,可以忽略。

第三部分:空行,請求頭部後面的空行是必須的。

第四部分:請求數據,即空行以下部分。

七、HTTP響應消息

服務器接收並處理客戶端發過來的請求後會返回一個HTTP的響應消息。

HTTP響應也由四個部分組成,分別是:狀態行、消息報頭、空行和響應正文。

響應消息例子

HTTP/1.1 200 OK
Date: Wed, 19 Sep 2018 12:01:21 GMT
Content-Type: text/html; charset=UTF-8

 

<html>
      <head></head>
      <body>
            <!--body goes here-->
      </body>
</html>

第一部分:狀態行,由HTTP協議版本號,狀態碼,狀態消息 三部分組成。

第二部分:消息報頭,用來說明客戶端要使用的一些附加信息

第二行和第三行爲消息報頭,
Date:生成響應的日期和時間;Content-Type:指定了MIME類型的HTML(text/html),編碼類型是UTF-8

第三部分:空行,消息報頭後面的空行是必須的

第四部分:響應正文,服務器返回給客戶端的文本信息。

八、工作原理

基於HTTP協議的客戶/服務器模式的信息交換過程,它分四個過程:建立連接、發送請求信息、接收響應信息、關閉連接。

1.建立連接:客戶機單擊某個超級鏈接,如:www.baidu.com ,HTTP的工作就開始了。

2.發送請求信息:建立連接後,客戶機發送一個請求消息給服務器。

3.接收響應信息:服務器接到請求消息後,給予相應的響應消息。

4.關閉連接:客戶端接收服務器所返回的信息通過瀏覽器顯示在用戶的顯示屏上,然後客戶機與服務器斷開連接。

九、HTTP版本歷史

HTTP/0.9: HTTP協議的最初版本,僅支持請求方式GET,並且僅能請求訪問HTML格式的資源。

HTTP/1.0:增加了請求方式POST和HEAD;根據Content-Type可以支持多種數據格式,即MIME多用途互聯網郵件擴展,例如text/html、image/jpeg等;同時也開始支持cache,就是當客戶端在規定時間內訪問統一網站,直接訪問cache即可。但是1.0版本的工作方式是每次TCP連接只能發送一個請求,當服務器響應後就會關閉這次連接,不支持keepalive。

HTTP/1.1:解決了1.0版本的keepalive問題,1.1版本加入了持久連接,一個TCP連接可以允許多個HTTP請求;加入了管道機制,一個TCP連接同時允許多個請求同時發送,增加了併發性;新增了請求方式PUT、PATCH、DELETE等。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章