03.02 網頁瀏覽完成後直接關閉瀏覽器,客戶端和服務器如何完成斷開連接通信的?

尼古拉奧斯特洛夫斯陳


要搞清楚這個問題,首先要明白瀏覽器(也就是題主說的客戶端)和服務器是如何通信的:

一、瀏覽器和服務器如何通信(HTTP協議)

1.介紹

HTTP是Hyper Text Transfer Protocol(超文本傳輸協議)的縮寫。它的發展是萬維網協會(World Wide Web Consortium)和Internet工作小組IETF(Internet Engineering Task Force)合作的結果,(他們)最終發佈了一系列的RFC,RFC 1945定義了HTTP/1.0版本。其中最著名的就是RFC 2616。RFC 2616定義了今天普遍使用的一個版本——HTTP 1.1。

HTTP協議(HyperText Transfer Protocol,超文本傳輸協議)是用於從WWW服務器傳輸超文本到本地瀏覽器的傳送協議。它可以使瀏覽器更加高效,使網絡傳輸減少。它不僅保證計算機正確快速地傳輸超文本文檔,還確定傳輸文檔中的哪一部分,以及哪部分內容首先顯示(如文本先於圖形)等。

HTTP是一個應用層協議,由請求和響應構成,是一個標準的客戶端服務器模型。

此處是重點:HTTP是一個無狀態的協議。

2.工作流程

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

1)首先客戶機與服務器需要建立連接。只要單擊某個超級鏈接,HTTP的工作開始。

2)建立連接後,客戶機發送一個請求給服務器,請求方式的格式為:統一資源標識符(URL)、協議版本號,後邊是MIME信息包括請求修飾符、客戶機信息和可能的內容。

3)服務器接到請求後,給予相應的響應信息,其格式為一個狀態行,包括信息的協議版本號、一個成功或錯誤的代碼,後邊是MIME信息包括服務器信息、實體信息和可能的內容。

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

如果在以上過程中的某一步出現錯誤,那麼產生錯誤的信息將返回到客戶端,有顯示屏輸出。對於用戶來說,這些過程是由HTTP自己完成的,用戶只要用鼠標點擊,等待信息顯示就可以了。

也就是說,服務器根本不知道客戶端(用戶)已經關閉了瀏覽器。

二、服務器如何保存瀏覽器狀態

以“記住我的登錄狀態”為例說明服務器如何保存瀏覽器的某些狀態:

1.Cookie的機制

Cookie是瀏覽器(User Agent)訪問一些網站後,這些網站存放在客戶端的一組數據,用於使網站等跟蹤用戶,實現用戶自定義功能。

Cookie的Domain和Path屬性標識了這個Cookie是哪一個網站發送給瀏覽器的;Cookie的Expires屬性標識了Cookie的有 效時間,當Cookie的有效時間過了之後,這些數據就被自動刪除了。

如果不設置過期時間,則表示這個Cookie生命週期為瀏覽器會話期間,只要關閉瀏覽器窗口,Cookie就消失了。這種生命期為瀏覽會話期的 Cookie被稱為會話Cookie。會話Cookie一般不保存在硬盤上而是保存在內存裡。如果設置了過期時間,瀏覽器就會把Cookie保存到硬盤 上,關閉後再次打開瀏覽器,這些Cookie依然有效直到超過設定的過期時間。存儲在硬盤上的Cookie可以在不同的瀏覽器進程間共享,比如兩個IE窗 口。而對於保存在內存的Cookie,不同的瀏覽器有不同的處理方式。

2.Session的機制

Session是存放在服務器端的類似於HashTable結構(每一種Web開發技術的實現可能不一樣,下文直接稱之為HashTable)來存放用戶 數據,當瀏覽器第一次發送請求時,服務器自動生成了一個HashTable和一個Session ID用來唯一標識這個HashTable,並將其通過響應發送到瀏覽器。當瀏覽器第二次發送請求,會將前一次服務器響應中的Session ID放在請求中一併發送到服務器上,服務器從請求中提取出Session ID,並和保存的所有Session ID進行對比,找到這個用戶對應的HashTable。

一般情況下,服務器會在一定時間內(默認20分鐘)保存這個HashTable,過了時間限制,就會銷燬這個HashTable。在銷燬之前,程序員可以 將用戶的一些數據以Key和Value的形式暫時存放在這個HashTable中。當然,也有使用數據庫將這個HashTable序列化後保存起來的,這 樣的好處是沒了時間的限制,壞處是隨著時間的增加,這個數據庫會急速膨脹,特別是訪問量增加的時候。一般還是採取前一種方式,以減輕服務器壓力。

3.Session的客戶端實現形式(即Session ID的保存方法)

一般瀏覽器提供了兩種方式來保存,還有一種是程序員使用HTML隱藏域的方式自定義實現:

[1] 使用Cookie來保存,這是最常見的方法,本文“記住我的登錄狀態”功能的實現正式基於這種方式的。服務器通過設置Cookie的方式將Session ID發送到瀏覽器。如果我們不設置這個過期時間,那麼這個Cookie將不存放在硬盤上,當瀏覽器關閉的時候,Cookie就消失了,這個Session ID就丟失了。如果我們設置這個時間為若干天之後,那麼這個Cookie會保存在客戶端硬盤中,即使瀏覽器關閉,這個值仍然存在,下次訪問相應網站時,同 樣會發送到服務器上。

[2] 使用URL附加信息的方式,也就是像我們經常看到JSP網站會有aaa.jsp?JSESSIONID=*一樣的。這種方式和第一種方式裡面不設置 Cookie過期時間是一樣的。

[3] 第三種方式是在頁面表單裡面增加隱藏域,這種方式實際上和第二種方式一樣,只不過前者通過GET方式發送數據,後者使用POST方式發送數據。但是明顯後 者比較麻煩。

4.實現“記住我的登錄狀態”的功能

前面我們瞭解到,如果我們將Session ID通過Cookie發送到客戶端的時候設置其過期時間為1年,那麼在今後的一年時間內,客戶端訪問我的網站的時候都回將這個Session ID值發送到服務器上,服務器根據這個Session ID從內存或者數據庫裡面恢復存放Key-Value對的Hashtable。

其實這已經很好的實現了我們的功能了。但是,前面也提到了,實際上Session並不會一直都存在的,過了一定的時間之後,服務器上的Session就被 銷燬了,以減輕服務器的訪問壓力。當服務器上的數據被銷燬後,即使客戶端上存放了Cookie也沒有辦法“記住我的登錄狀態”了。

通用的實現辦法是,將用戶的用戶名和加密之後的密碼也通過Cookie的方式存放在客戶端,當服務器上的Session銷燬以後,使用Cookie裡面存 放的用戶名和加密之後的密碼重新執行一次登錄操作,重建Session,並更新客戶端上Cookie中存放的的Session ID,而這個操作是發生在用戶請求一個需要身份驗證的頁面資源的背後,對於用戶來講是透明的,於是就達到了“記住我的登錄狀態”的目的了。


大美宇宙


事實上當網頁展示完成後,客戶端已經和服務器斷開通信了。具體原理如下:

首先http是一個應用層的協議,在這個層的協議,只是一種通訊規範,也就是因為雙方要進行通訊,大家要事先約定一個規範。

我們以

http://www.mytest.com/

網址作為示範

1.連接 當我們輸入這樣一個請求時,首先要建立一個socket連接,因為socket是通過ip和端口建立的,所以之前還有一個DNS解析過程,把http://www.mytest.com/網址變成ip,如果url裡不包含端口號,則會使用該協議的默認端口號。

DNS的過程是這樣的:首先我們知道我們本地的機器上在配置網絡時都會填寫DNS,這樣本機就會把這個url發給這個配置的DNS服務器,如果能夠找到相應的url則返回其ip,否則該DNS將繼續將該解析請求發送給上級DNS,整個DNS可以看做是一個樹狀結構,該請求將一直髮送到根直到得到結果。現在已經擁有了目標ip和端口號,這樣我們就可以打開socket連接了。

2.請求 連接成功建立後,開始向web服務器發送請求,這個請求一般是GET或POST命令(POST用於FORM參數的傳遞)。GET命令的格式為:GET 路徑/文件名 HTTP/1.0

文件名指出所訪問的文件,HTTP/1.0指出Web瀏覽器使用的HTTP版本。現在可以發送GET命令:GET /mytest/index.html HTTP/1.0,

3.應答 web服務器收到這個請求,進行處理。從它的文檔空間中搜索子目錄mytest的文件index.html。如果找到該文件,Web服務器把該文件內容傳送給相應的Web瀏覽器。

為了告知瀏覽器,,Web服務器首先傳送一些HTTP頭信息,然後傳送具體內容(即HTTP體信息),HTTP頭信息和HTTP體信息之間用一個空行分開。

常用的HTTP頭信息有:

  ① HTTP 1.0 200 OK  這是Web服務器應答的第一行,列出服務器正在運行的HTTP版本號和應答代碼。代碼"200 OK"表示請求完成。

  ② MIME_Version:1.0 它指示MIME類型的版本。

  ③ content_type:類型 這個頭信息非常重要,它指示HTTP體信息的MIME類型。如:content_type:text/html指示傳送的數據是HTML文檔。

  ④ content_length:長度值 它指示HTTP體信息的長度(字節)。

4.關閉連接:當應答結束後,Web瀏覽器與Web服務器必須斷開,以保證其它Web瀏覽器能夠與Web服務器建立連接。


泠音工作室


網頁瀏覽你的網頁加載完之後實際上連接已經斷開了,它的通訊是單向的,瀏覽器向服務器請求數據,服務器返回響應。結束


覆水難收77313204


關閉瀏覽器,你的操作系統並沒有關閉,依然會發送ip包通知對方tcp已關閉,除非你扯掉網線,那麼對方只能等超時關閉連接了。

類似的syn方式ddos攻擊就是讓服務器產生大量只能超時關閉的tcp連接消耗服務器資源達到攻擊目的


分享到:


相關文章: