Java Web開發(fā)之Http協(xié)議

學(xué)習(xí)Java Web首先要知道Web應(yīng)用程序的請求過程,客戶端與服務(wù)器之間是如何通信的,這樣我們可以更加靈活的處理請求和響應(yīng)的消息。

什么是HTTP協(xié)議?

HTTP是超文本傳輸協(xié)議(Hypertext Transfer Protocol),它是TCP/IP協(xié)議的一個應(yīng)用層協(xié)議,用于定義WEB瀏覽器與WEB服務(wù)器之間的交換數(shù)據(jù)的過程。(HTTP所用的端口號80,HTTPS所用端口號是443

主要特點

  • 簡單快速:客戶端向服務(wù)器請求服務(wù)時,只需傳送請求方法和路徑。
  • 無連接:無連接的含義是限制每次只處理一個請求。服務(wù)器處理完客戶的請求,并受到客戶的應(yīng)答后,即斷開連接。采用這種方式可以節(jié)省傳輸時間
  • 無狀態(tài):HTTP是一個無狀態(tài)的協(xié)議,無狀態(tài)是指WEB瀏覽器和服務(wù)器之間不需要建立持久的聯(lián)系。

HTTP工作原理

HTTP的工作流程:

1.客戶端連接到web服務(wù)器

當(dāng)我們在瀏覽器輸入網(wǎng)址或者當(dāng)我們點擊鏈接時,HTTP開始工作。

2.發(fā)送HTTP請求

建立連接后,客戶機發(fā)送一個請求給服務(wù)器,如當(dāng)我們在瀏覽器地址欄輸入Michaeljian.top 后回車,瀏覽器將我們的請求封裝成HTTP報文。請求報文的格式:

  • 請求行
  • 請求頭部
  • 空行
  • 請求數(shù)據(jù)

3.服務(wù)器接受請求并返回HTTP響應(yīng)

Web服務(wù)器解析請求,定義請求資源。服務(wù)器將資源復(fù)本 寫到TCP套接字中,有客戶端讀取。響應(yīng)報文的格式:

  • 狀態(tài)行
  • 響應(yīng)頭部
  • 空行
  • 響應(yīng)數(shù)據(jù)

4.釋放TCP連接

若connection 模式為close,則服務(wù)器主動關(guān)閉TCP連接,客戶端被動關(guān)閉連接,釋放TCP連接;若connection 模式為keepalive,則該連接會保持一段時間,在該時間內(nèi)可以繼續(xù)接收請求。

5.客戶端瀏覽器解析HTML內(nèi)容

客戶端瀏覽器首先會解析狀態(tài)行,查看請求是否成功的狀態(tài)代碼。然后解析每一個響應(yīng)頭,響應(yīng)頭告知以下為若干字節(jié)的HTML文檔和文檔的字符集??蛻舳藶g覽器讀取響應(yīng)數(shù)據(jù)HTML,根據(jù)HTML的語法對其進行格式化,并在瀏覽器窗口中顯示。

DNS域名解析

在瀏覽器地址欄輸入URL,按下回車之后會經(jīng)歷以下流程:

  • 瀏覽器向DNS服務(wù)器請求解析該URL中的域名對應(yīng)的IP地址;

  • 解析出IP地址后,根據(jù)該IP地址和默認(rèn)端口80,和服務(wù)器建立TCP連接;

  • 瀏覽器發(fā)出讀取文件(URL中域名后面部分對應(yīng)的文件)的HTTP請求,該請求報文作為TCP三次握手的第三個報文的數(shù)據(jù)發(fā)送給服務(wù)器;

  • 服務(wù)器對瀏覽器請求做出響應(yīng),并把對應(yīng)的HTML文本發(fā)送給瀏覽器;

  • 釋放TCP連接;

  • 瀏覽器將該HTML文本并顯示內(nèi)容;

    image.png

HTTP協(xié)議版本以及區(qū)別

HTTP協(xié)議的版本:HTTP/1.0、HTTP/1.1、HTTP/2.0

  • 在HTTP1.0協(xié)議中,客戶端與web服務(wù)器建立連接后,只能獲得一個web資源。
  • 在HTTP1.1協(xié)議,允許客戶端與web服務(wù)器建立連接后,在一個連接上獲取多個web資源。
  • 在HTTP2.0協(xié)議中,
    • 新的二進制格式:HTTP1.x的解析是基于文本協(xié)議的格式 解析存在天然的缺陷,文本的表現(xiàn)形式有多樣性,要做到健壯性考慮的場景必然很多,二級制在不同,只有0和1的組合?;谶@種考慮HTTP2.0的協(xié)議解析決定采用二進制的格式,實現(xiàn)方便且健壯。
    • 多路復(fù)用:即連接共享,每個request都是用作連接共享機制的。
    • header壓縮,如上文中所言,對前面提到過HTTP1.x的header帶有大量信息,而且每次都要重復(fù)發(fā)送,HTTP2.0使用encoder來減少需要傳輸?shù)膆eader大小,通訊雙方各自cache一份header fields表,既避免了重復(fù)header的傳輸,又減小了需要傳輸?shù)拇笮 ?/li>
    • 服務(wù)端推送(server push),同SPDY一樣,HTTP2.0也具有server push功能。

URI和URL的區(qū)別

URL是統(tǒng)一資源地位符(Uniform Resource Locator)。URL是URI的一種,不僅標(biāo)識了Web 資源,還指定了操作或者獲取方式,同時指出了主要訪問機制和網(wǎng)絡(luò)位置。

http://michaeljian.top/

URI是統(tǒng)一資源標(biāo)識符(Uniform Resource Identifier)。URI是個純粹的語法結(jié)構(gòu),用于指定標(biāo)識Web資源的字符串的各個部分。

例子:ftp://ftp.is.co.za/rfc/rfc1808.txt (also a URL because of the protocol)

URN是統(tǒng)一資源名稱(Uniform Resource Name)URN是URI的一種,用特定命名空間的名字標(biāo)識資源。使用URN可以在不知道其網(wǎng)絡(luò)位置及訪問方式的情況下討論資源。

img

HTTP之請求消息Request

客戶端發(fā)送一個HTTP請求到服務(wù)器的請求消息包括以下格式:

請求行(request line)、請求頭部(header)、空行和請求數(shù)據(jù)四個部分組成。
image.png

請求行

請求行中個請求方式最常用的是GET和POST,用戶如果沒有設(shè)置,默認(rèn)情況下瀏覽器向服務(wù)器發(fā)送的都是get請求,例如在瀏覽器直接輸?shù)刂吩L問,點超鏈接訪問等都是get,用戶如想把請求方式改為post,可通過更改表單的提交方式實現(xiàn)。

兩種方式的主要區(qū)別:

  • 如果請求方式為GET方式,則可以在請求的URL地址后以?的形式帶上交給服務(wù)器的數(shù)據(jù),多個數(shù)據(jù)之間以&進行分隔,例如:GET /mail/1.html?name=abc&password=xyz HTTP/1.1 。在URL地址后附帶的參數(shù)是有限制的

  • 如果請求方式為POST方式,則可以在請求的實體內(nèi)容中向服務(wù)器發(fā)送數(shù)據(jù),Post方式的特點:傳送的數(shù)據(jù)量無限制。

HTTP之響應(yīng)消息Response

一個HTTP響應(yīng)代表服務(wù)器向客戶端回送的數(shù)據(jù),它包括: 一個狀態(tài)行、若干消息頭、以及實體內(nèi)容 。

image.png

HTTP之狀態(tài)碼

image.png

HTTP與HTTPS的區(qū)別

HTTP是HTTP協(xié)議運行在TCP之上。所有傳輸?shù)膬?nèi)容都是明文,客戶端和服務(wù)器端都無法驗證對方的身份。

HTTPS是HTTP運行在SSL/TLS之上,SSL/TLS運行在TCP之上。所有傳輸?shù)膬?nèi)容都經(jīng)過加密,加密采用對稱加密,但對稱加密的密鑰用服務(wù)器方的證書進行了非對稱加密。此外客戶端可以驗證服務(wù)器端的身份,如果配置了客戶端驗證,服務(wù)器方也可以驗證客戶端的身份。

參考資料

http://mp.weixin.qq.com/s/9gT4VXHNCre5mQADYW8APA

https://www.cnblogs.com/ranyonsue/p/5984001.html

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 一、概念(載錄于:http://www.cnblogs.com/EricaMIN1987_IT/p/3837436...
    yuantao123434閱讀 8,744評論 6 152
  • Http協(xié)議詳解 標(biāo)簽(空格分隔): Linux 聲明:本片文章非原創(chuàng),內(nèi)容來源于博客園作者MIN飛翔的HTTP協(xié)...
    Sivin閱讀 5,352評論 3 82
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,663評論 19 139
  • 八月 充滿綠色和果香的季節(jié) 人來人往 或不期而遇 或匆匆離別 我深知打破安逸重新起航需要的無畏和果決 我也篤信恰到...
    wangzhe_閱讀 172評論 0 0
  • 東方娃娃幼兒園【書香浸潤童年,閱讀點亮人生】為愛讀書第27天,動物王國! 鳥類,哺乳類,還有昆蟲。
    燕雨泉閱讀 213評論 0 0

友情鏈接更多精彩內(nèi)容