演示並解析客戶端(瀏覽器)如何與服務器端通訊和數據交互&post和get請求方式的特點和區別

一.相關協議

Http協議
協議:雙方在交互、通訊的時候, 遵守的一種規範、規則。
http協議:針對網絡上的客戶端 與 服務器端在執行http請求的時候,遵守的一種規範。 其實就是規定了客戶端在訪問服務器端的時候,要帶上哪些東西, 服務器端返回數據的時候,也要帶上什麼東西。
版本:1.0&1.1
這裏不詳細介紹HTTP等相關協議,具體的請見我另一篇博文:HTTP與TCP/IP

二.準備工作

在地址欄中鍵入網絡地址 回車 或者是平常註冊的時候,點擊了註冊按鈕 , 瀏覽器都能顯示出來一些東西。那麼背地裏到底瀏覽器和服務器是怎麼通訊。 它們都傳輸了哪些數據。
工具:
1.安裝抓包工具 HttpWatch
2.打開tomcat. 輸入localhost:8080
3.打開首頁在首頁上找到Example 字樣
4.選擇 servlet 例子 —> Request Parameter執行tomcat的例子,然後查看瀏覽器和 tomcat服務器的對接細節
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
操作流程:在這裏插入圖片描述
在這裏插入圖片描述
三.分析在這裏插入圖片描述
官方HTTP/1.1文檔給出的解析:
Request解析:在這裏插入圖片描述基本含義: 請求:從客戶機到服務器的請求消息在該消息的第一行中包括要應用到的方法資源資源的標識符和正在使用的協議版本

請求行:請求行以方法令牌開頭,然後是請求uri協議版本,以及CRLF(回車換行)。元素由SP(空格)字符分隔。除最後的CRLF(回車換行)外,不允許有CR(回車)或LF(換行)序列。
請求行=方法 SP 請求uri SP http版本 CRLF(回車換行)

備註:
在本例中, 請求uri 是/examples/servlets/servlet/RequestParamExample
完整的全路徑,即Referer:http://localhost:8080/examples/servlets/servlet/RequestParamExample
本例中請求行是:POST /examples/servlets/servlet/RequestParamExample HTTP/1.1

Method解析:

在這裏插入圖片描述
基本含義:方法令牌指示要在請求uri標識的資源上執行的方法。該方法區分大小寫。文檔中也給出了幾種請求方法,常用的是POST和GET

post和get請求方式的特點:

post

1.數據是以的方式寫過去,不會在地址欄上面顯示。 現在一般提交數據到服務器使用的都是POST 2.以流的方式寫數據,所以數據沒有大小限制。

get

1.會在地址欄後面拼接數據,所以有安全隱患。 一般從服務器獲取數據,並且客戶端也不用提交上面數據的時候,可以使用GET 2.能夠帶的數據有限, 1kb大小。

post和get請求方式的區別:

1.請求路徑不同,post請求,在urI後面不拼接任何數據,get請求,在uri後面拼接數據。

2.帶上的數據不同。post請求會使用流的方式寫數據。get請求是在地址欄上帶數據。

3.post請求使用流的方式寫數據,所以一定需要一個Content-Length的頭來說明數據的長度有多少。

Request Header Fields(請求頭字段)
在這裏插入圖片描述基本含義:請求頭字段允許客戶端傳遞關於請求和客戶端自身的附加信息, 到服務器。這些字段充當請求修飾符,其語義相當於編程中的參數語言的方法調用。

本例request總結:

在這裏插入圖片描述
請求的數據裏面包含三個部分內容 : 請求行 、 請求頭 、請求體
請求行:POST /examples/servlets/servlet/RequestParamExample HTTP/1.1
POST : 請求方式 ,以post去提交數據
/examples/servlets/servlet/RequestParamExample請求的地址路徑 , 就是要訪問哪個地方。
請求體 firstname=jiacheng&lastname=DING 瀏覽器真正發送給服務器的數據 發送的數據呈現的是key=value ,如果存在多個數據使用 &。
Accept: 客戶端向服務器端表示,我能支持什麼類型的數據。
Referer : 真正請求的地址路徑,全路徑Accept-Language: 支持語言格式
User-Agent: 用戶代理 向服務器表明,當前來訪的客戶端信息。
Content-Type: 提交的數據類型。經過urlencoding編碼的form表單的數據
Accept-Encoding: gzip, deflate : 壓縮算法 。
Host : 主機地址
Content-Length: 數據長度
Connection : Keep-Alive 保持連接
Cache-Control : 對緩存的操作

官方HTTP/1.1文檔給出的解析:
Response解析:在這裏插入圖片描述
基本含義:在接收和解釋請求消息之後,服務器將使用HTTP響應消息進行響應
響應消息的第一行是狀態行,由協議版本和組成數字狀態碼及其相關的文本短語,每個元素由SP字符(空格)分隔。沒有CR(回車)或LF(換行)允許,但在最後的CRLF(回車換行)序列中除外。

狀態行(響應行)= http版本 SP(空格) 狀態碼 SP(換行) 原因短語 CRLF(回車或換行).本例中狀態行(響應行)是:HTTP/1.1 200 OK

HTTP/1.1是http版本;200是狀態碼(交互到底是什麼樣結果的一個code. ),OK是狀態碼對應狀態。

常見的狀態碼和狀態有:
200 : 成功,正常處理,得到數據。
403 : for bidden 拒絕
404 : Not Found
500 : 服務器異常

100-505之間的狀態碼及其對應的狀態如下:
在這裏插入圖片描述
Response Header Fields(響應頭字段)
在這裏插入圖片描述
基本含義:響應頭字段允許服務器傳遞關於響應的附加信息,而這是不可能的放在狀態行中。這些頭字段提供有關服務器的信息和關於進一步訪問的信息由請求uri標識的資源。

本例response總結:

在這裏插入圖片描述
Server: 服務器是哪一種類型。 Tomcat
Content-Type : 服務器返回給客戶端你的內容類型
Content-Length : 返回的數據長度
Date : 通訊的日期,響應的時間

擴展:

URLURI的區別: URL是Uniform Resource Location的縮寫,譯爲“統一資源定位符”。通俗地說,URL是Internet上 用來描述信息資源的字符串,主要用在各種WWW客戶程序和服務器程序上。
URI:Web上可用的每種資源 - HTML文檔、圖像、視頻片段、程序等 - 由一個通用資源標誌符(Uniform Resource Identifier, 簡稱"URI")進行定位。

Web資源
在http協議當中,規定了請求和響應雙方, 客戶端和服務器端。與web相關的資源。 有兩種分類。
靜態資源:html 、 js、 css
動態資源servlet/jspServletservlet是什麼?其實就是一個java程序,運行在我們的web服務器上,用於接收和響應 客戶端的http請求。 更多的是配合動態資源來做。 當然靜態資源也需要使用到servlet,只不過是Tomcat裏面已經定義好了一個默認的 DefaultServlet。

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