Wireshark Lab: HTTP

hungry1999發表於2021-01-03

Wireshark Lab: HTTP



預備知識

堅持型連線&非堅持型連線:是否在同一個TCP連線上完成所有的請求/應答報文的傳輸?Y:堅持型,N:非堅持型。

HTTP的非堅持型連線

現在來看看當你點選一個超連結的時候會發生什麼。
1.客戶機會對超連結的伺服器通過80埠(TCP預設埠號)發起一個TCP連線
2.客戶機通過套接字向伺服器傳送HTTP請求報文
3.伺服器收到報文之後,從自己的記憶體(RAM or disk)中獲取被請求的物件,並將這些物件封裝至HTTP請求報文(HTLM)中,然後通過套接字傳送給客戶機。
4.HTTP伺服器請求關閉TCP連線
5.客戶機獲取請求的物件,TCP連線徹底關閉。客戶機從恢復報文中獲取檔案
6.獲取其他的物件,繼續迴圈上面的步驟

由此可見,每當一個物件被正確接收的時候,之前的建立的TCP連線都會被關閉。一般情況下,瀏覽器會建立5到10個並行TCP連線,這樣的平行連線可以減短響應時間。

HTLM相應時間
由上圖,非堅持型下的HTLM的相應時間為:
t t o t a l = 2 ∗ t R T T + t t r a n s t_{total} = 2*t_{RTT} + t_{trans} ttotal=2tRTT+ttrans

HTTP的堅持型連線

非堅持型連線有以下幾個缺點:
1.每一個請求物件都需要建立一次TCP連線,這樣會導致額外的記憶體消耗

For each of these connections, TCP buffers must be allocated and TCP variables must be kept in both the client and server.

2.每一個物件的遞交過程會導致兩個RTT的時間消耗

堅持型HTTP連線的斷開

在HTTP1.1中,當TCP連線建立之後,剩餘的物件都通過這個TCP連線遞交。當遞交結束之後,當這條TCP連線在一定的時間(a configurable timeout interval)沒有被使用時,這條連線會自動關閉。

HTTP/2 builds on HTTP 1.1 by allowing multiple requests and replies to be interleaved in the same connection, and a mechanism for prioritizing HTTP message requests and replies within this connection.
(存疑)

在這裡插入圖片描述

HTTP的報文格式

請求報文
//一個例子
//The great majority of HTTP request messages use the GET method.
GET /somedir/page.html HTTP/1.1 //the method field, the URL field, and the HTTP version field.
Host: www.someschool.edu  //物件所在的主機地址(Web代理快取中需要)
Connection: close//表示非堅持型
User-agent: Mozilla/5.0 //瀏覽器的型別
Accept-language: fr//許多協商首部(negotiation header)中的一種

在這裡插入圖片描述
注意到上圖出現的實體(Entity Body)部分,在GET方法中是空的,他在POST方法中,例如當使用者提供搜尋關鍵詞的時候,POST仍然是向伺服器請求獲取網頁,但是是網頁特定的內容。
但是HTML表單(HTML form)通常用GET方法,並在URL(統一資源定位器)中加上輸入的文字,就像這樣:

//當你在某個網站上面搜尋“monkeys” 和“bananas”的時候,URL會變成下面這個樣子
 www.somesite.com/animalsearch?monkeys&bananas
應答報文
//一個例子
HTTP/1.1 200 OK//the protocol version field, a status code(狀態碼:請求結果), and a corresponding status message.
Connection: close//非堅持型
Date: Tue, 18 Aug 2015 15:44:04 GMT//伺服器從自己的檔案系統中獲取被請求物件,並將它插入到回應報文中,後將它傳送給客戶機時的時間
Server: Apache/2.2.3 (CentOS)//伺服器型別
Last-Modified: Tue, 18 Aug 2015 15:11:03 GMT// It is critical for object caching, both in the local client and in network cache servers (also known as proxy servers).
Content-Length: 6821//被髮送物件的位元數
Content-Type: text/html//傳送主題的型別(HTML 文字)(The object type is officially indicated by the Content-Type: header and not by the file extension.)
(data data data data data ...)//報文核心部分(the meat of message)包含被請求的物件

報文請求結果型別:

200 OK: Request succeeded and the information is returned in the response.
301 Moved Permanently: Requested object has been permanently moved; the new URL is specified in Location : header of the response message. The client software will automatically retrieve the new URL.
400 Bad Request: This is a generic error code indicating that the request could not be understood by the server
404 Not Found: The requested document does not exist on this server.
505 HTTP Version Not Supported: The requested HTTP protocol version is not supported by the server.

在這裡插入圖片描述
狀態行(state line)
表頭行(header line)
(待續…)


總結

問題: 1.HTTP/2?(unsolved)