JavaEE 要懂的小事:一、圖解Http協議

來源:互聯網
上載者:User

標籤:

Writer      :BYSocket(泥沙磚瓦漿木匠)

微         博:BYSocket

豆         瓣:BYSocket

FaceBook:BYSocket

Twitter    :BYSocket

泥瓦匠記得和左瀟龍【部落格園】上次聊天時,龍哥問了個Session的問題。我當時的理解就是雲裡霧裡,先從Http協議理解開始吧。

一、技術基石及概述

問:什麼是HTTP?
答:HTTP是一個用戶端和伺服器端請求和響應的標準TCP。其實建立在TCP之上的。

當我們開啟百度網頁時,是這樣的:

https://www.baidu.com

多了個S,其實S表示TLS、SSL。在這裡不做解釋,因此HTTP的技術基石:

那HTTP協議呢?HTTP協議(HyperText Transfer Protocol),即超文字傳輸通訊協定 (HTTP)是用於伺服器傳輸到用戶端瀏覽器的傳輸協議。Web上,伺服器和用戶端利用HTTP協議進行通訊會話。有OOP思想的得出結論:其會話的結構是一個簡單的請求/響應序列,即瀏覽器發出請求和伺服器做出響應。

 

二、深入理解技術基石和工作流程

既然HTTP是基於傳輸層的TCP協議,而TCP協議是連線導向的端到端的協議。因此,使用HTTP協議傳輸前,首先建立TCP串連,就是因此在談的TCP連結過程的“三向交握”。

在Web上,HTTP協議使用TCP協議而不是UDP協議的原因在於一個網頁必須傳送很多資料,而且保證其完整性。TCP協議提供傳輸控制,按順序組織資料和錯誤校正的一系列功能。

 

一次HTTP操作稱為一個事務,其工作過程可分為四步:

1、用戶端與伺服器需要建立串連。(比如某個超級連結,HTTP就開始了。)

2、建立串連後,發送請求。

3、伺服器接到請求後,響應其響應資訊。

4、用戶端接收伺服器所返回的資訊通過瀏覽器顯示在使用者的顯示屏上,然後客戶機與伺服器中斷連線。

建立串連,其實建立在TCP串連基礎之上。圖解核心工作過程(即省去串連過程)如下:

 

三、詳解工作過程的HTTP報文

HTTP報文由從客戶機到伺服器的請求和從伺服器到客戶機的響應構成。

一、請求報文格式如下:

請求行

通用資訊頭

要求標頭

實體頭

(空行)

報文主體

,請求我部落格一篇文章時發送的報文內容:

對於其中請求報文詳解:

1、請求行

    方法欄位 + URL + Http協議版本

2、通用資訊頭

    Cache-Control頭域:指定請求和響應遵循的緩衝機制。

    keep-alive 是其串連持續有效【在下面百度的例子,會得到驗證】

3、要求標頭

    Host頭域,腦補吧

    Referer頭域:允許用戶端指定請求URL的資源地址。

    User-Agent頭域:請求使用者資訊。【可以看出一些用戶端瀏覽器的核心資訊】

 

4、報文主體

中的 “ p=278 ”一般來說,請求主體少不了請求參數。

二、應答報文格式如下:

狀態行

通用資訊頭

回應標頭

實體頭

(空行)

報文主體

,就是這篇部落格響應的內容:

對其中響應報文詳解:

1、狀態行

    HTTP協議版本 + 狀態代碼 + 狀態碼的文本描述

    【比如這裡,200 代表請求成功】

2、通用資訊頭

    keep-alive 是其串連持續有效【在下面百度的例子,會得到驗證】

    Date頭域:時間描述

3、回應標頭

    Server頭:處理請求的原始伺服器的軟體資訊。

4、實體頭

    Content-Type頭:便是接收方實體的介質類型。(這也表示了你的報文主體是什麼。)

(空行)

5、報文主體

    這裡就是HTML響應頁面了,在tab頁中的response中可查看。

一次簡單的請求/響應就完成了。

 

三、HTTP協議知識補充

請求報文相關:

請求行-要求方法

GET            請求擷取Request-URI所標識的資源
POST          在Request-URI所標識的資源後附加新的資料
HEAD         請求擷取由Request-URI所標識的資源的響應訊息前序
PUT            請求伺服器儲存一個資源,並用Request-URI作為其標識
DELETE       請求伺服器刪除Request-URI所標識的資源
TRACE        請求伺服器回送收到的請求資訊,主要用於測試或診斷
CONNECT  保留將來使用
OPTIONS   請求查詢服務器的效能,或者查詢與資源相關的選項和需求

 

 

響應報文相關:

響應行-狀態代碼

1xx:指示資訊–表示請求已接收,繼續處理
2xx:成功–表示請求已被成功接收、理解、接受
3xx:重新導向–要完成請求必須進行更進一步的操作
4xx:用戶端錯誤–請求有語法錯誤或請求無法實現
5xx:伺服器端錯誤–伺服器未能實現合法的請求

常見的狀態代碼

200 OK

請求成功(其後是對GET和POST請求的應答文檔。)

 

304 Not Modified

未按預期修改文檔。用戶端有緩衝的文檔並發出了一個條件性的請求(一般是提供If-Modified-Since頭表示客戶只想比指定日期更新的文檔)。伺服器告訴客戶,原來緩衝的文檔還可以繼續使用。

 

404 Not Found

伺服器無法找到被請求的頁面。

 

500 Internal Server Error

請求未完成。伺服器遇到不可預知的情況。

 

比如304,在瀏覽器第一次開啟百度時,:

重新整理一下:

這上面的304就證明了

1、304狀態代碼:有些圖片和js檔案在本地用戶端緩衝,再次請求後,緩衝的檔案可以使用。

2、以上所以HTTP請求,只靠一個TCP串連,這就是所謂的持久串連。

四、關於HTTP協議的Web應用程式框架或者規範

JavaEE的人會知道Servlet規範。其中Web應用程式容器都實現了HTTP協議中的對象,即請求和響應對象。比如 javax.servlet.http.HttpServletResponse 對象中肯定有對狀態代碼描述,

至於如何使用它們,坐等系列文章吧。

 

五、總結

回顧全文,HTTP協議其實就是我們對話一樣,語言就是其中的協議。所以掌握HTTP協議明白以下幾點就好:

1、用什麼通過HTTP協議通訊

2、怎麼通過HTTP協議通訊

 

Writer      :BYSocket(泥沙磚瓦漿木匠)

微         博:BYSocket

豆         瓣:BYSocket

FaceBook:BYSocket

Twitter    :BYSocket

JavaEE 要懂的小事:一、圖解Http協議

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.