1. 程式人生 > >一次完整的HTTP事務全過程詳解

一次完整的HTTP事務全過程詳解

當我們在瀏覽器的位址列輸入 www.linux178.com ,然後回車,回車這一瞬間到看到頁面到底發生了什麼呢?

以下過程僅是個人理解:

域名解析 --> 發起TCP的3次握手 --> 建立TCP連線後發起http請求 --> 伺服器響應http請求,瀏覽器得到html程式碼 --> 瀏覽器解析html程式碼,並請求html程式碼中的資源(如js、css、圖片等) --> 瀏覽器對頁面進行渲染呈現給使用者

關於HTTP協議可以參考以下:

HTTP協議漫談  http://kb.cnblogs.com/page/140611/

HTTP協議概覽  http://www.cnblogs.com/vamei/archive/2013/05/11/3069788.html

以下就是上面過程的一一分析,我們就以Chrome瀏覽器為例:

1.域名解析

首先Chrome瀏覽器會解析 www.linux178.com 這個域名(準確的叫法應該是主機名)對應的IP地址。怎麼解析到對應的IP地址?

① Chrome瀏覽器 會首先搜尋瀏覽器自身的DNS快取(快取時間比較短,大概只有1分鐘,且只能容納1000條快取),看自身的快取中是否有www.linux178.com 對應的條目,而且沒有過期,如果有且沒有過期則解析到此結束。

    注:我們怎麼檢視Chrome自身的快取?可以使用 chrome://net-internals/#dns 來進行檢視

② 如果瀏覽器自身的快取裡面沒有找到對應的條目,那麼Chrome會搜尋作業系統自身的DNS快取,如果找到且沒有過期則停止搜尋解析到此結束.

     注:怎麼檢視作業系統自身的DNS快取,以Windows系統為例,可以在命令列下使用 ipconfig /displaydns 來進行檢視  

③ 如果在Windows系統的DNS快取也沒有找到,那麼嘗試讀取hosts檔案(位於C:\Windows\System32\drivers\etc),看看這裡面有沒有該域名對應的IP地址,如果有則解析成功。

④ 如果在hosts檔案中也沒有找到對應的條目,瀏覽器就會發起一個DNS的系統呼叫,就會向本地配置的首選DNS伺服器(一般是電信運營商提供的,也可以使用像Google提供的DNS伺服器)發起域名解析請求(通過的是UDP協議向DNS的53埠發起請求,這個請求是遞迴的請求,也就是運營商的DNS伺服器必須得提供給我們該域名的IP地址),運營商的DNS伺服器首先查詢自身的快取,找到對應的條目,且沒有過期,則解析成功。如果沒有找到對應的條目,則有運營商的DNS代我們的瀏覽器發起迭代DNS解析請求,它首先是會找根域的DNS的IP地址(這個DNS伺服器都內建13臺根域的DNS的IP地址),找打根域的DNS地址,就會向其發起請求(請問www.linux178.com這個域名的IP地址是多少啊?),根域發現這是一個頂級域com域的一個域名,於是就告訴運營商的DNS我不知道這個域名的IP地址,但是我知道com域的IP地址,你去找它去,於是運營商的DNS就得到了com域的IP地址,又向com域的IP地址發起了請求(請問www.linux178.com這個域名的IP地址是多少?),com域這臺伺服器告訴運營商的DNS我不知道www.linux178.com這個域名的IP地址,但是我知道linux178.com這個域的DNS地址,你去找它去,於是運營商的DNS又向linux178.com這個域名的DNS地址(這個一般就是由域名註冊商提供的,像萬網,新網等)發起請求(請問www.linux178.com這個域名的IP地址是多少?),這個時候linux178.com域的DNS伺服器一查,誒,果真在我這裡,於是就把找到的結果傳送給運營商的DNS伺服器,這個時候運營商的DNS伺服器就拿到了www.linux178.com這個域名對應的IP地址,並返回給Windows系統核心,核心又把結果返回給瀏覽器,終於瀏覽器拿到了www.linux178.com  對應的IP地址,該進行一步的動作了。

注:一般情況下是不會進行以下步驟的

如果經過以上的4個步驟,還沒有解析成功,那麼會進行如下步驟(以下是針對Windows作業系統):

⑤ 作業系統就會查詢NetBIOS name Cache(NetBIOS名稱快取,就存在客戶端電腦中的),那這個快取有什麼東西呢?凡是最近一段時間內和我成功通訊的計算機的計算機名和Ip地址,就都會存在這個快取裡面。什麼情況下該步能解析成功呢?就是該名稱正好是幾分鐘前和我成功通訊過,那麼這一步就可以成功解析。

⑥ 如果第⑤步也沒有成功,那會查詢WINS 伺服器(是NETBIOS名稱和IP地址對應的伺服器)

⑦ 如果第⑥步也沒有查詢成功,那麼客戶端就要進行廣播查詢

⑧ 如果第⑦步也沒有成功,那麼客戶端就讀取LMHOSTS檔案(和HOSTS檔案同一個目錄下,寫法也一樣)

如果第八步還沒有解析成功,那麼就宣告這次解析失敗,那就無法跟目標計算機進行通訊。只要這八步中有一步可以解析成功,那就可以成功和目標計算機進行通訊。

看下圖抓包截圖:

Linux虛擬機器測試,使用命令 wget www.linux178.com 來請求,發現直接使用chrome瀏覽器請求時,干擾請求比較多,所以就使用wget命令來請求,不過使用wget命令只能把index.html請求回來,並不會對index.html中包含的靜態資源(js、css等檔案)進行請求。

wKioL1LSWzzxRParAAKbC85UJtE371.jpg

抓包分析:

① 號包,這個是那臺虛擬機器在廣播,要獲取192.168.100.254(也就是閘道器)的MAC地址,因為區域網的通訊靠的是MAC地址,它為什麼需要跟閘道器進行通訊是因為我們的DNS伺服器IP是外圍IP,要出去必須要依靠閘道器幫我們出去才行。

② 號包,這個是閘道器收到了虛擬機器的廣播之後,迴應給虛擬機器的迴應,告訴虛擬機器自己的MAC地址,於是客戶端找到了路由出口。

③ 號包,這個包是wget命令向系統配置的DNS伺服器提出域名解析請求(準確的說應該是wget發起了一個DNS解析的系統呼叫),請求的域名www.linux178.com,期望得到的是IP6的地址(AAAA代表的是IPv6地址)

④ 號包,這個DNS伺服器給系統的響應,很顯然目前使用IPv6的還是極少數,所以得不到AAAA記錄的

⑤ 號包,這個還是請求解析IPv6地址,但是www.linux178.com.leo.com這個主機名是不存在的,所以得到結果就是no such name

⑥ 號包,這個才是請求的域名對應的IPv4地址(A記錄)

⑦ 號包,DNS伺服器不管是從快取裡面,還是進行迭代查詢最終得到了域名的IP地址,響應給了系統,系統再給了wget命令,wget於是得到了www.linux178.com的IP地址,這裡也可以看出客戶端和本地的DNS伺服器是遞迴的查詢(也就是伺服器必須給客戶端一個結果)這就可以開始下一步了,進行TCP的三次握手。

2.發起TCP的3次握手

拿到域名對應的IP地址之後,User-Agent(一般是指瀏覽器)會以一個隨機埠(1024 < 埠 < 65535)向伺服器的WEB程式(常用的有httpd,nginx等)80埠發起TCP的連線請求。這個連線請求(原始的http請求經過TCP/IP4層模型的層層封包)到達伺服器端後(這中間通過各種路由裝置,區域網內除外),進入到網絡卡,然後是進入到核心的TCP/IP協議棧(用於識別該連線請求,解封包,一層一層的剝開),還有可能要經過Netfilter防火牆(屬於核心的模組)的過濾,最終到達WEB程式(本文就以Nginx為例),最終建立了TCP/IP的連線。

如下圖:

wKioL1LSW6rjI1nhAAE63Uv8ZRY731.jpg

1) Client首先發送一個連線試探,ACK=0 表示確認號無效,SYN = 1 表示這是一個連線請求或連線接受報文,同時表示這個資料報不能攜帶資料,seq = x 表示Client自己的初始序號(seq = 0 就代表這是第0號包),這時候Client進入syn_sent狀態,表示客戶端等待伺服器的回覆

2) Server監聽到連線請求報文後,如同意建立連線,則向Client傳送確認。TCP報文首部中的SYN 和 ACK都置1 ,ack = x + 1表示期望收到對方下一個報文段的第一個資料位元組序號是x+1,同時表明x為止的所有資料都已正確收到(ack=1其實是ack=0+1,也就是期望客戶端的第1個包),seq = y 表示Server 自己的初始序號(seq=0就代表這是伺服器這邊發出的第0號包)。這時伺服器進入syn_rcvd,表示伺服器已經收到Client的連線請求,等待client的確認。

3) Client收到確認後還需再次傳送確認,同時攜帶要傳送給Server的資料。ACK 置1 表示確認號ack= y + 1 有效(代表期望收到伺服器的第1個包),Client自己的序號seq= x + 1(表示這就是我的第1個包,相對於第0個包來說的),一旦收到Client的確認之後,這個TCP連線就進入Established狀態,就可以發起http請求了。

看抓包截圖:

wKiom1LSW9-BWZw6AAD7FV3OfS4963.jpg

⑨ 號包 這個就是對應上面的步驟 1)

⑩ 號包 這個對應的上面的步驟 2)

號包 這個對應的上面的步驟 3)

TCP 為什麼需要3次握手?

舉個例子:

假設一個老外在故宮裡面迷路了,看到了小明,於是就有下面的對話:

老外: Excuse me,Can you Speak English?

小明: yes 。

老外: OK,I want ...

在問路之前,老外先問小明是否會說英語,小明回答是的,這時老外才開始問路

2個計算機通訊是靠協議(目前流行的TCP/IP協議)來實現,如果2個計算機使用的協議不一樣,那是不能進行通訊的,所以這個3次握手就相當於試探一下對方是否遵循TCP/IP協議,協商完成後就可以進行通訊了,當然這樣理解不是那麼準確。

為什麼HTTP協議要基於TCP來實現?

目前在Internet中所有的傳輸都是通過TCP/IP進行的,HTTP協議作為TCP/IP模型中應用層的協議也不例外,TCP是一個端到端的可靠的面向連線的協議,所以HTTP基於傳輸層TCP協議不用擔心資料的傳輸的各種問題。

3.建立TCP連線後發起http請求

進過TCP3次握手之後,瀏覽器發起了http的請求(看第包),使用的http的方法 GET 方法,請求的URL是 / ,協議是HTTP/1.0

wKioL1LSXDmgmVT_AAFUErYF2ys832.jpg

下面是第12號包的詳細內容:

wKiom1LSXHiCgHkBAAKtTT2l-Ac152.jpg

以上的報文是HTTP請求報文。

那麼HTTP請求報文和響應報文會是什麼格式呢?

起始行:如 GET / HTTP/1.0 (請求的方法  請求的URL 請求所使用的協議)

頭部資訊:User-Agent  Host等成對出現的值

主體

不管是請求報文還是響應報文都會遵循以上的格式。

那麼起始行中的請求方法有哪些種呢?

  GET: 完整請求一個資源 (常用)

  HEAD: 僅請求響應首部

  POST:提交表單  (常用)

  PUT: (webdav) 上傳檔案(但是瀏覽器不支援該方法)

  DELETE:(webdav) 刪除

  OPTIONS:返回請求的資源所支援的方法的方法

  TRACE: 追求一個資源請求中間所經過的代理(該方法不能由瀏覽器發出)

那什麼是URL、URI、URN?

URI  Uniform Resource Identifier 統一資源識別符號

URL  Uniform Resource Locator 統一資源定位符

    格式如下:  scheme://[username:[email protected]]HOST:port/path/to/source

                http://www.magedu.com/downloads/nginx-1.5.tar.gz

URN  Uniform Resource Name 統一資源名稱

URL和URN 都屬於 URI

為了方便就把URL和URI暫時都通指一個東西

請求的協議有哪些種?

有以下幾種:

http/0.9: stateless

http/1.0: MIME, keep-alive (保持連線), 快取

http/1.1: 更多的請求方法,更精細的快取控制,持久連線(persistent connection) 比較常用

下面是Chrome發起的http請求報文頭部資訊

wKioL1LSXMqCjyIQAAESKm-mkV8876.jpg

其中

Accept  就是告訴伺服器端,我接受那些MIME型別

Accept-Encoding  這個看起來是接受那些壓縮方式的檔案

Accept-Lanague   告訴伺服器能夠傳送哪些語言

Connection       告訴伺服器支援keep-alive特性

Cookie           每次請求時都會攜帶上Cookie以方便伺服器端識別是否是同一個客戶端

Host             用來標識請求伺服器上的那個虛擬主機,比如Nginx裡面可以定義很多個虛擬主機

                那這裡就是用來標識要訪問那個虛擬主機。

User-Agent       使用者代理,一般情況是瀏覽器,也有其他型別,如:wget curl 搜尋引擎的蜘蛛等    

條件請求首部:

If-Modified-Since 是瀏覽器向伺服器端詢問某個資原始檔如果自從什麼時間修改過,那麼重新發給我,這樣就保證伺服器端資源

            檔案更新時,瀏覽器再次去請求,而不是使用快取中的檔案

安全請求首部:

Authorization: 客戶端提供給伺服器的認證資訊;

什麼是MIME?

MIME(Multipurpose Internet Mail Extesions 多用途網際網路郵件擴充套件)是一個網際網路標準,它擴充套件了電子郵件標準,使其能夠支援非ASCII字元、二進位制格式附件等多種格式的郵件訊息,這個標準被定義在RFC 2045、RFC 2046、RFC 2047、RFC 2048、RFC 2049等RFC中。 由RFC 822轉變而來的RFC 2822,規定電子郵件標準並不允許在郵件訊息中使用7位ASCII字符集以外的字元。正因如此,一些非英語字元訊息和二進位制檔案,影象,聲音等非文字訊息都不能在電子郵件中傳輸。MIME規定了用於表示各種各樣的資料型別的符號化方法。 此外,在全球資訊網中使用的HTTP協議中也使用了MIME的框架,標準被擴充套件為網際網路媒體型別。

MIME 遵循以下格式:major/minor 主型別/次型別 例如:

1 2 3 4 5 image/jpg image/gif text/html video/quicktime appliation/x-httpd-php

4.伺服器端響應http請求,瀏覽器得到html程式碼

看下圖 第12號包是http請求包,第32包是http響應包

伺服器端WEB程式接收到http請求以後,就開始處理該請求,處理之後就返回給瀏覽器html檔案。

wKiom1LSXVeQETJrAAaV9VlbbBo896.jpg

第32號包 是伺服器返回給客戶端http響應包(200 ok 響應的MIME型別是text/html),代表這一次客戶端發起的http請求已成功響應。200 代表是的 響應成功的狀態碼,還有其他的狀態碼如下:

1xx: 資訊性狀態碼

    100, 101

2xx: 成功狀態碼

    200:OK

3xx: 重定向狀態碼

    301: 永久重定向, Location響應首部的值仍為當前URL,因此為隱藏重定向;

    302: 臨時重定向,顯式重定向, Location響應首部的值為新的URL

    304:Not Modified  未修改,比如本地快取的資原始檔和伺服器上比較時,發現並沒有修改,伺服器返回一個304狀態碼,

                        告訴瀏覽器,你不用請求該資源,直接使用本地的資源即可。

4xx: 客戶端錯誤狀態碼

    404: Not Found  請求的URL資源並不存在

5xx: 伺服器端錯誤狀態碼

    500: Internal Server Error  伺服器內部錯誤

    502: Bad Gateway  前面代理伺服器聯絡不到後端的伺服器時出現

    504:Gateway Timeout  這個是代理能聯絡到後端的伺服器,但是後端的伺服器在規定的時間內沒有給代理伺服器響應

用Chrome瀏覽器看到的響應頭資訊:

wKioL1LSXgCDWDvyAADfe7wzmKk795.jpg

Connection            使用keep-alive特性

Content-Encoding      使用gzip方式對資源壓縮

Content-type          MIME型別為html型別,字符集是 UTF-8

Date                  響應的日期

Server                使用的WEB伺服器

Transfer-Encoding:chunked   分塊傳輸編碼 是http中的一種資料傳輸機制,允許HTTP由網頁伺服器傳送給客戶端應用(通常是網頁瀏覽器)的資料可以分成多個部分,分塊傳輸編碼只在HTTP協議1.1版本(HTTP/1.1)中提供

Vary  這個可以參考(http://blog.csdn.net/tenfyguo/article/details/5939000)

X-Pingback  參考(http://blog.sina.com.cn/s/blog_bb80041c0101fmfz.html)

那到底伺服器端接收到http請求後是怎麼樣生成html檔案?

假設伺服器端使用nginx+php(fastcgi)架構提供服務

① nginx讀取配置檔案

我們在瀏覽器的位址列裡面輸入的是 http://www.linux178.com (http://可以不用輸入,瀏覽器會自動幫我們新增),其實完整的應該是http://www.linux178.com./ 後面還有個點(這個點代表就是根域,一般情況下我們不用輸入,也不顯示),後面的/也是不用新增,瀏覽器會自動幫我們新增(且看第3部那個圖裡面的URL),那麼實際請求的URL是http://www.linux178.com/,那麼好了Nginx在收到 瀏覽器 GET / 請求時,會讀取http請求裡面的頭部資訊,根據Host來匹配 自己的所有的虛擬主機的配置檔案的server_name,看看有沒有匹配的,有匹配那麼就讀取該虛擬主機的配置,發現如下配置:

1 root /web/echo

通過這個就知道所有網頁檔案的就在這個目錄下 這個目錄就是/ 當我們http://www.linux178.com/時就是訪問這個目錄下面的檔案,例如訪問http://www.linux178.com/index.html,那麼代表/web/echo下面有個檔案叫index.html

1 index index.html index.htm index.php

通過這個就能得知網站的首頁檔案是那個檔案,也就是我們在入http://www.linux178.com/ ,nginx就會自動幫我們把index.html(假設首頁是index.php 當然是會嘗試的去找到該檔案,如果沒有找到該檔案就依次往下找,如果這3個檔案都沒有找到,那麼就丟擲一個404錯誤)加到後面,那麼新增之後的URL是/index.php,然後根據後面的配置進行處理

1 2 3 4 5 6 7 location ~ .*\.php(\/.*)*$ { root /web/echo; fastcgi_pass   127.0.0.1:9000; fastcgi_index  index.php; astcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name; include        fastcgi_params; }

這一段配置指明凡是請求的URL中匹配(這裡是啟用了正則表示式進行匹配) *.php字尾的(後面跟的引數)都交給後端的fastcgi程序進行處理。

② 把php檔案交給fastcgi程序去處理

於是nginx把/index.php這個URL交給了後端的fastcgi程序處理,等待fastcgi處理完成後(結合資料庫查詢出資料,填充模板生成html檔案)返回給nginx一個index.html文件,Nginx再把這個index.html返回給瀏覽器,於是乎瀏覽器就拿到了首頁的html程式碼,同時nginx寫一條訪問日誌到日誌檔案中去。

注1:nginx是怎麼找index.php檔案的?

當nginx發現需要/web/echo/index.php檔案時,就會向核心發起IO系統呼叫(因為要跟硬體打交道,這裡的硬體是指硬碟,通常需要靠核心來操作,而核心提供的這些功能是通過系統呼叫來實現的),告訴核心,我需要這個檔案,核心從/開始找到web目錄,再在web目錄下找到echo目錄,最後在echo目錄下找到index.php檔案,於是把這個index.php從硬碟上讀取到核心自身的記憶體空間,然後再把這個檔案複製到nginx程序所在的記憶體空間,於是乎nginx就得到了自己想要的檔案了。

注2:尋找檔案在檔案系統層面是怎麼操作的?

比如nginx需要得到/web/echo/index.php這個檔案

每個分割槽(像ext3 ext3等檔案系統,block塊是檔案儲存的最小單元 預設是4096位元組)都是包含元資料區和資料區,每一個檔案在元資料區都有元資料條目(一般是128位元組大小),每一個條目都有一個編號,我們稱之為inode(index node 索引節點),這個inode裡面包含 檔案型別、許可權、連線次數、屬主和陣列的ID、時間戳、這個檔案佔據了那些磁碟塊也就是塊的編號(block,每個檔案可以佔用多個block,並且block不一定是連續的,每個block是有編號的),如下圖所示:

wKiom1LSXwWRzx75AACjRCdIYcI778.jpg

還有一個要點:目錄其實也普通是檔案,也需要佔用磁碟塊,目錄不是一個容器。你看預設建立的目錄就是4096位元組,也就說只需要佔用一個磁碟塊,但這是不確定的。所以要找到目錄也是需要到元資料區裡面找到對應的條目,只有找到對應的inode就可找到目錄所佔用的磁碟塊。

那到底目錄裡面存放著什麼,難道不是檔案或者其他目錄嗎?

其實目錄存著這麼一張表(姑且這麼理解),裡面放著 目錄或者檔案的名稱和對應的inode號(暫時稱之為對映表),如下圖:

wKiom1LSX3KATYWYAAAx2GkMEO4103.jpg

假設

/           在資料區佔據 1、2號block ,/其實也是一個目錄 裡面有3個目錄  web 111

web         佔據 5號block  是目錄 裡面有2個目錄 echo data

echo        佔據 11號 block  是目錄  裡面有1個檔案 index.php

index.php   佔據 15 16號 block  是檔案

其在檔案系統中分佈如下圖所示

wKioL1LSX6OizObEAAHJJkuxCa0943.jpg

那麼核心究竟是怎麼找到index.php這個檔案的呢?

核心拿到nginx的IO系統呼叫要獲取/web/echo/index.php這個檔案請求之後

① 核心讀取元資料區 / 的inode,從inode裡面讀取/所對應的資料塊的編號,然後在資料區找到其對應的塊(1 2號塊),讀取1號塊上的對映表找到web這個名稱在元資料區對應的inode號

② 核心讀取web對應的inode(3號),從中得知web在資料區對應的塊是5號塊,於是到資料區找到5號塊,從中讀取對映表,知道echo對應的inode是5號,於是到元資料區找到5號inode

③ 核心讀取5號inode,得到echo在資料區對應的是11號塊,於是到資料區讀取11號塊得到對映表,得到index.php對應的inode是9號

④ 核心到元資料區讀取9號inode,得到index.php對應的是15和16號資料塊,於是就到資料區域找到15 16號塊,讀取其中的內容,得到index.php的完整內容

5. 瀏覽器解析html程式碼,並請求html程式碼中的資源

瀏覽器拿到index.html檔案後,就開始解析其中的html程式碼,遇到js/css/image等靜態資源時,就向伺服器端去請求下載(會使用多執行緒下載,每個瀏覽器的執行緒數不一樣),這個時候就用上keep-alive特性了,建立一次HTTP連線,可以請求多個資源,下載資源的順序就是按照程式碼裡的順序,但是由於每個資源大小不一樣,而瀏覽器又多執行緒請求請求資源,所以從下圖看出,這裡顯示的順序並不一定是程式碼裡面的順序。

瀏覽器在請求靜態資源時(在未過期的情況下),向伺服器端發起一個http請求(詢問自從上一次修改時間到現在有沒有對資源進行修改),如果伺服器端返回304狀態碼(告訴瀏覽器伺服器端沒有修改),那麼瀏覽器會直接讀取本地的該資源的快取檔案。

wKiom1LSX_PT06f3AAF_5iS18UA331.jpg

6.瀏覽器對頁面進行渲染呈現給使用者

最後,瀏覽器利用自己內部的工作機制,把請求到的靜態資源和html程式碼進行渲染,渲染之後呈現給使用者。

自此一次完整的HTTP事務宣告完成.

轉自:http://linux5588.blog.51cto.com/65280/1351007

相關推薦

完整HTTP事務全過程

當我們在瀏覽器的位址列輸入 www.linux178.com ,然後回車,回車這一瞬間到看到頁面到底發生了什麼呢? 以下過程僅是個人理解: 域名解析 --> 發起TCP的3次握手 --> 建立TCP連線後發起http請求 --> 伺服器響應htt

完整HTTP事務是怎樣一個過程?

-h archive sts ipv 信息 headers document 響應頭 讀取 當我們在瀏覽器的地址欄輸入 www.linux178.com ,然後回車,回車這一瞬間到看到頁面到底發生了什麽呢? 以下過程僅是個人理解: 域名解析 --> 發起TCP

完整HTTP事務是怎樣一個過程

宣告:本文章中的說法僅是個人理解總結,不一定完全正確,但是可以有助於理解。 關於HTTP協議可以參考以下: HTTP協議漫談 http://kb.cnblogs.com/page/140611/ HTTP協議概覽 http://www.cnblogs.com/vamei/archive/2013/05

HTTP完整http請求處理過程

處理 請求過程 http請求處理過程如下.1、建立連接:接收或拒絕連接請求,通過三次握手建立.2、接收請求:接收客戶端請求報文中對某資源的一次請求的過程.Web訪問響應模型(Web I/O)單進程I/O模型:啟動一個進程處理用戶請求,而且一次只處理一個,多個請求被串行響應必須處理完前面的請求後才能處理

完整http的請求過程與https的實現

http一次完整的http請求過程: (1)發起請求建立連接; 三次握手 接收請求或拒絕請求 (2)接受請求 來自網絡的請求報文中對某資源的一次請求過程; 並發訪問響應模型(Web I/O); 單進程I/O結構:啟動一個進程處理用戶請求,而且一次只處理一個;多個請求被串行響應

完整HTTP請求的大致過程(轉)

帶寬 繼續 頭信息 cti www 參考 例如 相同 log 說明:這些理論基本都來自網上,所以不一定準確,但一定是比較好理解的,如果要刨根問底,最好的方式就是看書,且要看權威的書。 一次完整的HTTP請求所經歷的7個步驟 HTTP通信機制是在一次完整的HTTP通信

完整http請求

-s style keep alt transfer rom content -a 以及 一個http請求分為幾部分: 請求行,請求頭,空行,消息體 請求行:請求行是請求消息的第一行,由三部分組成:分別是請求方法(GET/POST/DELETE/PUT/HEAD)、請求資

完整HTTP 請求過程

net first 直接 orm gin 端口 add static 1.2 一次完整的HTTP請求過程從TCP三次握手建立連接成功後開始,客戶端按照指定的格式開始向服務端發送HTTP請求,服務端接收請求後,解析HTTP請求,處理完業務邏輯,最後返回一個HTTP的響應給客戶

完整http請求過程

網關 persist trac 頁面 都沒有 wan 服務器 modified 虛擬機 當我們在瀏覽器的地址欄輸入 www.linux178.com ,然後回車,回車這一瞬間到看到頁面到底發生了什麽呢? 以下過程僅是個人理解: 域名解析 --> 發

完整HTTP請求需要的步驟(http通訊協議)

<1> web瀏覽器(客戶端)和web應用伺服器建立tcp連線 http協議是tcp/ip 模型中的應用層的協議,是高層的協議。傳輸控制協議TCP位於傳輸層,tcp是建立本地主機和目標主機的會話,只有建立tcp連線,應用層http協議才可以有通道去進行

完整HTTP請求所經歷的步驟

一次完整的HTTP請求所經歷的7個步驟 HTTP通訊機制是在一次完整的HTTP通訊過程中,Web瀏覽器與Web伺服器之間將完成下列7個步驟: 1. 建立TCP連線 在HTTP工作開始之前,Web瀏覽器首先要通過網路與Web伺服器建立連線,該連線是通過TCP來完成的,該協議與IP協議共同構建I

完整HTTP請求是怎樣的

一次完整的HTTP請求過程從TCP三次握手建立連線成功後開始,客戶端按照指定的格式開始向服務端傳送HTTP請求,服務端接收請求後,解析HTTP請求,處理完業務邏輯,最後返回一個HTTP的響應給客戶端,HTTP的響應內容同樣有標準的格式。無論是什麼客戶端或者是什麼服務端,大家只要按照HTTP的協

完整HTTP請求所經歷的7個步驟

1. 建立TCP連線 在HTTP工作開始之前,Web瀏覽器首先要通過網路與Web伺服器建立連線,該連線是通過TCP來完成的,該協議與IP協議共同構建Internet,即著名的TCP/IP協議族,因此Internet又被稱作是TCP/IP網路。HTTP是比TCP更高層次的應用層協議,根據規則,只有低層協議建

後端知識體系--完整HTTP請求

這裡講的請求是後端DevOps可以控制的範圍內,不包括DNS解析,層層的路由等等,一切都從請求到達我們自己架設的伺服器開始。 1.與伺服器建立連線 1.1 TCP連線的建立 客戶端的請求到達伺服器,首先就是建立TCP連線 Client首先發

完整HTTP請求與響應都發生了什麼

本篇介紹的是一次完成的http請求都經過了那些步驟,這些步驟相應的作用又是什麼 1.在瀏覽器端輸入網站的url地址 只有知道了一個網站的url地址才能訪問到這個網站 2.瀏覽器查詢快取 瀏覽器會查詢瀏覽器快取,系統快取,路由快取,如果沒有的話 繼續下一步,如果有的

在瀏覽器中輸入URL後,執行的全部過程。會用到哪些協議?(完整HTTP請求過程)

一次完整的HTTP請求過程: 1.首先進行域名解析,域名解析具體過程講一下: 瀏覽器搜尋自己的DNS快取,快取中維護一張域名與IP地址的對應表; 若沒有,則搜尋作業系統的DNS快取; 若沒有,則作業系統將域名傳送至本地域名伺服器(遞迴查詢方式),本地域名伺服器查詢自己

【PHP學習】完整HTTP請求所經歷的7個步驟

HTTP通訊機制是在一次完整的HTTP通訊過程中,Web瀏覽器與Web伺服器之間將完成下列7個步驟: 1、建立TCP連線 在HTTP工作開始之前,Web瀏覽器首先要通過網路與Web伺服器建立連線,該連線是通過TCP來完成的,該協議與IP協議共同構建Inte

完整HTTP請求發生了什麼?

1. 域名解析 首先瀏覽器會解析域名(準確的叫法應該是主機名)得到對應的IP地址,那怎麼解析到對應的IP地址? ① 瀏覽器會首先搜尋瀏覽器自身的DNS快取(快取時間比較短,大概只有1分鐘,且只能容納1000條快取),看自身的快取中是否有該域名對應的條目,而且

【Java面試題】完整Http請求過程(非常詳細)

④ 如果在hosts檔案中也沒有找到對應的條目,瀏覽器就會發起一個DNS的系統呼叫,就會向本地配置的首選DNS伺服器(本地DNS伺服器,一般是電信運營商提供的,也可以使用像Google提供的DNS伺服器)發起域名解析請求(遞迴,通過的是UDP協議向DNS的53埠發起請求,這個請求是遞迴的請求,也就是運營商的D

完整HTTP請求與響應涉及了哪些知識?

本文以HTTP請求和響應的過程來講解涉及到的相關知識點。 一、 HTTP請求和響應步驟 以上完整表示了HTTP請求和響應的7個步驟,下面從TCP/IP協議模型的角度來理解HTTP請求和響應如何傳遞的。 二、TCP/IP協議 TCP/IP協議模型(Transmission Control Pr