來源網絡 原創不詳
當我們在瀏覽器的地址欄輸入“www.baidu.com”然后按回車,這之后發生了什么事,我們直接看到的是打開了對應的網頁,那么內部客戶端和服務端是如何通信的呢?
1、 1、URL自動解析
HTTP URL包含了用於查找某個資源的足夠信息,基本格式如下:HTTP://host[“:”port][abs_path],其中HTTP表示桶蓋HTTP協議來定位網絡資源;host表示合法的主機域名或IP地址,port指定一個端口號,缺省80;abs_path指定請求資源的URI;如果URL中沒有給出abs_path,那么當它作為請求URI時,必須以“/”的形式給出,通常這個工作瀏覽器自動幫我們完成。
例如:輸入www.163.com;瀏覽器會自動轉換成:HTTP://www.163.com/
2、獲取IP,建立TCP連接
瀏覽器地址欄中輸入"HTTP://www.xxx.com/"並提交之后,首先它會在DNS本地緩存表中查找,如果有則直接告訴IP地址。如果沒有則要求網關DNS進行查找,如此下去,找到對應的IP后,則返回會給瀏覽器。
當獲取IP之后,就開始與所請求的Tcp建立三次握手連接,連接建立后,就向服務器發出HTTP請求。
3、客戶端瀏覽器向服務器發出HTTP請求
一旦建立了TCP連接,Web瀏覽器就會向Web服務器發送請求命令,接着以頭信息的形式向Web服務器發送一些別的信息,之后瀏覽器發送了一空白行來通知服務器,它已經結束了該頭信息的發送。
例如:GET/sample/hello.jsp HTTP/1.1
4、Web服務器應答,並向瀏覽器發送數據
客戶機向服務器發出請求后,服務器會客戶機回送應答,
HTTP/1.1 200 OK
應答的第一部分是協議的版本號和應答狀態碼,正如客戶端會隨同請求發送關於自身的信息一樣,服務器也會隨同應答向用戶發送關於它自己的數據及被請求的文檔。
Web服務器向瀏覽器發送頭信息后,它會發送一個空白行來表示頭信息的發送到此為結束,接着,它就以Content-Type應答頭信息所描述的格式發送用戶所請求的實際數據
5、Web服務器關閉TCP連接
一般情況下,一旦Web服務器向瀏覽器發送了請求數據,它就要關閉TCP連接,然后如果瀏覽器或者服務器在其頭信息加入了這行代碼
Connection:keep-alive
TCP連接在發送后將仍然保持打開狀態,於是,瀏覽器可以繼續通過相同的連接發送請求。保持連接節省了為每個請求建立新連接所需的時間,還節約了網絡帶寬。
網上對HTTP通信的另一種說法:
(1)建立TCP連接在HTTP工作開始之前,Web瀏覽器首先要通過網絡與Web服務器建立連接,該連接是通過TCP來完成的,該協議與IP協議共同構建Internet,即著名的TCP/IP協議族,因此Internet又被稱作是TCP/IP網絡。HTTP是比TCP更高層次的應用層協議,根據規則,只有低層協議建立之后才能,才能進行更層協議的連接,因此,首先要建立TCP連接,一般TCP連接的端口號是80
(2) Web瀏覽器向Web服務器發送請求命令
一旦建立了TCP連接,Web瀏覽器就會向Web服務器發送請求命令例如:GET/sample/hello.jsp HTTP/1.1
(3) Web瀏覽器發送請求頭信息
瀏覽器發送其請求命令之后,還要以頭信息的形式向Web服務器發送一些別的信息,之后瀏覽器發送了一空白行來通知服務器,它已經結束了該頭信息的發送。
(4) Web服務器應答
客戶機向服務器發出請求后,服務器會客戶機回送應答,HTTP/1.1 200 OK應答的第一部分是協議的版本號和應答狀態碼
(5) Web服務器發送應答頭信息
正如客戶端會隨同請求發送關於自身的信息一樣,服務器也會隨同應答向用戶發送關於它自己的數據及被請求的文檔。
(6) Web服務器向瀏覽器發送數據
Web服務器向瀏覽器發送頭信息后,它會發送一個空白行來表示頭信息的發送到此為結束,接着,它就以Content-Type應答頭信息所描述的格式發送用戶所請求的實際數據
(7) Web服務器關閉TCP連接
一般情況下,一旦Web服務器向瀏覽器發送了請求數據,它就要關閉TCP連接,然后如果瀏覽器或者服務器在其頭信息加入了這行代碼Connection:keep-aliveTCP連接在發送后將仍然保持打開狀態,於是,瀏覽器可以繼續通過相同的連接發送請求。保持連接節省了為每個請求建立新連接所需的時間,還節約了網絡帶寬。
