成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

用戶訪問web服務(wù)器過程精解

GraphQuery / 3743人閱讀

摘要:文件如果在本機(jī)中仍然無法完成域名的解析,則會真正請求域名服務(wù)器來解析這個(gè)域名了。若沒有命中,就直接到域名服務(wù)器請求解析。是國際頂級域名服務(wù)器,如等,全球只有臺左右。本地域名服務(wù)器再向上一步返回的服務(wù)器發(fā)送請求。

博文參考
http://www.hackdig.com/
http://www.hackdig.com/07/hack-47475.htm
http://www.cnblogs.com/yuteng/articles/1904215.html
http://blog.csdn.net/bpingchang/article/details/51328941
http://blog.csdn.net/boer521314/article/details/41460865


概括預(yù)覽

當(dāng)一個(gè)用戶在瀏覽器里輸入www.google.com這個(gè)URL時(shí),將會發(fā)生如下操作

1 首先,瀏覽器會請求DNS把這個(gè)域名解析成對應(yīng)的IP地址;
2 然后,根據(jù)這個(gè)IP地址在互聯(lián)網(wǎng)上找到對應(yīng)的服務(wù)器,建立Socket連接,向這個(gè)服務(wù)器發(fā)起一個(gè)HTTP Get請求,由這個(gè)服務(wù)器決定返回默認(rèn)的數(shù)據(jù)資源給訪問的用戶;
3 在服務(wù)器端實(shí)際上還有復(fù)雜的業(yè)務(wù)邏輯:服務(wù)器可能有多臺,到底指定哪臺服務(wù)器處理請求,這需要一個(gè)負(fù)載均衡設(shè)備來平均分配所有用戶的請求;
4 還有請求的數(shù)據(jù)是存儲在分布式緩存里還是一個(gè)靜態(tài)文件中,或是在數(shù)據(jù)庫里;
5 當(dāng)數(shù)據(jù)返回瀏覽器時(shí),瀏覽器解析數(shù)據(jù)發(fā)現(xiàn)還有一些靜態(tài)資源(如:css,js或者圖片)時(shí)又會發(fā)起另外的HTTP請求,而這些請求可能會在CDN上,那么CDN服務(wù)器又會處理這個(gè)用戶的請求;

HTTP協(xié)議解析 HTTP協(xié)議
最重要的就是要熟悉HTTP協(xié)議中的HTTP Header,HTTP Header控制著互聯(lián)網(wǎng)上成千上萬的用戶的數(shù)據(jù)傳輸。最關(guān)鍵的是,它控制著用戶瀏覽器的渲染行為和服務(wù)器的執(zhí)行邏輯。


? 200: 成功,請求數(shù)據(jù)通過響應(yīng)報(bào)文的entity-body部分發(fā)送;OK
? 301: 請求的URL指向的資源已經(jīng)被刪除;但在響應(yīng)報(bào)文中通過首部Location指明了資源在所處的新位置; Moved Permanently
? 302: 與301相似,但在響應(yīng)報(bào)文中通過Location指明資源現(xiàn)在所處臨時(shí)新位置; Moved Temporarily
? 304: 客戶端發(fā)出了條件式請求,但服務(wù)器上的資源未曾發(fā)生改變,則通過響應(yīng)此響應(yīng)狀態(tài)碼通知客戶端; Not Modified
? 401: 需要輸入賬號和密碼認(rèn)證方能訪問資源; Unauthorized
? 403: 請求被禁止; Forbidden
? 404: 服務(wù)器無法找到客戶端請求的資源; Not Found
? 500: 服務(wù)器內(nèi)部錯誤; Internal Server Error
? 502: 代理服務(wù)器從后端服務(wù)器收到了一條偽響應(yīng),如無法連接到父網(wǎng)關(guān); Bad Gateway

瀏覽器緩存機(jī)制
當(dāng)我們使用Ctrl+F5組合鍵刷新一個(gè)頁面時(shí),首先是在瀏覽器端,會直接向目標(biāo)URL發(fā)送請求,而不會使用瀏覽器緩存的數(shù)據(jù);其次即使請求發(fā)送到服務(wù)端,也有可能訪問到的是緩存的數(shù)據(jù)。所以在HTTP的請求頭中會增加一些請求頭,它告訴服務(wù)端我們要獲取最新的數(shù)據(jù)而非緩存。最重要的是在請求頭中增加了兩個(gè)請求項(xiàng)Pragma:no-cache和Cache-Control:no-cache。

1 Cache-Control/Pragma這個(gè)HTTP Head字段用于指定所有緩存機(jī)制在整個(gè)請求/響應(yīng)鏈中必須服從的指令,如果知道該頁面是否為緩存,不僅可以控制瀏覽器,還可以控制和HTTP協(xié)議相關(guān)的緩存或代理服務(wù)器。Http Head字段的可選值:

Cache-Control請求字段被各個(gè)瀏覽器支持的較好,而且它的優(yōu)先級也比較高,它和其他一些請求字段(如Expires)同時(shí)出現(xiàn)時(shí),Cache-Control會覆蓋其他字段。

Pragma字段的作用和Cache-Control有點(diǎn)類似,它也是在HTTP頭中包含一個(gè)特殊的指令,使相關(guān)的服務(wù)器來遵守,最常用的就是Pragma:no-cache,它和Cache-Control:no-cache的作用是一樣的。

2 Expires 緩存過期時(shí)間Expires通常的使用格式是Expires:Sat,25 Feb 2012 12:22:17 GMT,后面跟著一個(gè)日期和時(shí)間,超過這個(gè)值后,緩存的內(nèi)容將失效,也就是瀏覽器在發(fā)出請求之前檢查這個(gè)頁面的這個(gè)字段,看該頁面是否已經(jīng)過期了,過期了將重新向服務(wù)器發(fā)起請求。

3 Last-Modified/Etag 最后修改時(shí)間Last-Modified字段一般用于表示一個(gè)服務(wù)器上的字段的最后修改時(shí)間,資源可以是靜態(tài)(靜態(tài)內(nèi)容自動加上Last-Modified)或者動態(tài)的內(nèi)容(如Servlet提供了一個(gè)getLastModified方法用于檢查某個(gè)動態(tài)內(nèi)容是否已經(jīng)更新),通過這個(gè)最后修改時(shí)間可以判斷當(dāng)前請求的資源是否是最新的。一般服務(wù)器端在響應(yīng)頭中返回一個(gè)Last-Modified字段,告訴瀏覽器這個(gè)頁面的最后修改時(shí)間,如:Sat,25 Feb 2012 12:55:04 GMT,瀏覽器再次請求時(shí)在請求頭中增加一個(gè)If-Modified-Since:Sat,25 Feb 2012 12:55:04 GMT字段,詢問當(dāng)前緩存的頁面是否是最新的,如果是最新的就會返回304狀態(tài)碼,告訴瀏覽器是最新的,服務(wù)器也不會傳輸新的數(shù)據(jù)。

與Last-Modified字段有類似功能的還有一個(gè)Etag字段,這個(gè)字段的作用是讓服務(wù)端給每個(gè)頁面分配一個(gè)唯一編號,然后通過這個(gè)編號來區(qū)分當(dāng)前這個(gè)頁面是否是最新的。這種方式比使用Last-Modified更加靈活,但是在后端的Web服務(wù)器有多臺時(shí)比較難處理,因?yàn)槊總€(gè)Web服務(wù)器都要記住網(wǎng)站的所有資源編號,否則瀏覽器返回這個(gè)編號就沒有意義了。

WEB工作流程 上網(wǎng)過程
瀏覽器本身是一個(gè)客戶端,當(dāng)你輸入U(xiǎn)RL的時(shí)候,首先瀏覽器會去請求DNS服務(wù)器,通過DNS獲取相應(yīng)的域名對應(yīng)的IP,然后通過IP地址找到IP對應(yīng)的服務(wù)器后,要求建立TCP連接,等瀏覽器發(fā)送完HTTP Request(請求)包后,服務(wù)器接收到請求包之后才開始處理請求包,服務(wù)器調(diào)用自身服務(wù),返回HTTP Response(響應(yīng))包;客戶端收到來自服務(wù)器的響應(yīng)后開始渲染這個(gè)Response包里的主體(body),等收到全部的內(nèi)容隨后斷開與該服務(wù)器之間的TCP連接。

Web服務(wù)器的工作原理可以簡單地歸納為

瀏覽器通過DNS域名解析到服務(wù)器IP;

客戶機(jī)通過TCP/IP協(xié)議建立到服務(wù)器的TCP連接;

客戶端向服務(wù)器發(fā)送HTTP協(xié)議請求包,請求服務(wù)器里的資源文檔;

服務(wù)器向客戶機(jī)發(fā)送HTTP協(xié)議應(yīng)答包,如果請求的資源包含有動態(tài)語言的內(nèi)容,那么服務(wù)器會調(diào)用動態(tài)語言的解釋引擎負(fù)責(zé)處理“動態(tài)內(nèi)容”,并將處理得到的數(shù)據(jù)返回給客戶端;

客戶機(jī)與服務(wù)器斷開。由客戶端解釋HTML文檔,在客戶端屏幕上渲染圖形結(jié)果;

DNS域名解析

當(dāng)用戶在瀏覽器中輸入域名,如:www.google.com,并按下回車后,DNS解析過程大體如下

(1)瀏覽器先查緩存,若緩存中有域名對應(yīng)IP地址,則解析結(jié)束。(存活時(shí)間TTL)
(2)若瀏覽器緩存中沒有,瀏覽器會查詢操作系統(tǒng)中緩存緩存是否有這個(gè)域名對應(yīng)的DNS解析結(jié)果。(hosts 文件)
(3)如果在本機(jī)中仍然無法完成域名的解析,則會真正請求域名服務(wù)器來解析這個(gè)域名了。操作系統(tǒng)會把域名發(fā)送給設(shè)置的LDNS(cat /etc/resolv.conf)。
(4)若LDNS沒有命中,就直接到Root Server域名服務(wù)器請求解析。
(5)根域名服務(wù)器返回本地域名服務(wù)器一個(gè)所查詢域的主域名服務(wù)器(gTLD Server)地址。GTLD是國際頂級域名服務(wù)器,如.com、.cn、.org等,全球只有13臺左右。
(6)本地域名服務(wù)器(Local DNS Server)再向上一步返回的GTLD服務(wù)器發(fā)送請求。
(7)接受請求的GTLD服務(wù)器查找并返回此域名對應(yīng)的Name Server域名服務(wù)器,這個(gè)Name Server通常就是你注冊的域名服務(wù)器,例如你在某個(gè)域名服務(wù)提供商申請的域名,那么這個(gè)域名解析任務(wù)就有這個(gè)域名提供商的服務(wù)器來完成。
(8)Name Server返回IP記錄和TTL(緩存時(shí)間)。
(9)LDNS緩存該記錄,緩存時(shí)間有TTL控制。
(10)解析結(jié)果返回給用戶,用戶根據(jù)TTL值緩存在本地系統(tǒng)緩存中,域名解析過程結(jié)束。
幾種域名解析方式
1    A記錄,A代表的是Address,用來指定域名對應(yīng)的IP地址如將item.taobao.com指定到115.238.23.241,將switch.taobao.com指定到121.14.24.241。A記錄可以將多個(gè)域名解析到一個(gè)IP地址,但是不能將一個(gè)域名解析到多個(gè)IP地址。
2    MX記錄,表示的是Mail Exchange,就是可以將某個(gè)域名下的郵件服務(wù)器指向自己的Mail Server如taobao.com域名的A記錄IP地址是115.238.25.245,如果MX記錄設(shè)置為115.238.25.246,是[email protected]的郵件路由,DNS會將郵件發(fā)送到115.238.25.246所在的服務(wù)器,而正常通過Web請求的話仍然解析到A記錄的IP地址。
3    CNAME記錄,全稱是Canonical Name(別名解析),所謂的別名解析就是可以為一個(gè)域名設(shè)置一個(gè)或者多個(gè)別名如將taobao.com解析到xulingbo.net,將srcfan.com也解析到xulingbo.net,其中xulingbo.net分別是taobao.com和srcfan.com的別名。前面的跟蹤域名解析中的“www.taobao.com. 1542 IN CNAME www.gslb.taobao.com”就是CNAME解析。
4    NS記錄,為某個(gè)域名指定DNS解析服務(wù)器,也就是這個(gè)域名有指定的IP地址的DNS服務(wù)器去解析前面的“google.com. 172800 IN NS ns4.google.com.”就是NS解析。
5    TXT記錄,為某個(gè)主機(jī)名或域名設(shè)置說明如可以為google.com設(shè)置TXT記錄為“谷歌|中國”這樣的說明。
發(fā)起TCP協(xié)議 三次握手連接
拿到域名對應(yīng)的IP地址之后,User-Agent(一般是指瀏覽器)會以一個(gè)隨機(jī)端口(1024 < 端口 < 65535)向服務(wù)器的WEB程序(常用的有httpd,nginx等)80端口發(fā)起TCP的連接請求。這個(gè)連接請求(原始的http請求經(jīng)過TCP/IP4層模型的層層封包)到達(dá)服務(wù)器端后(這中間通過各種路由設(shè)備,局域網(wǎng)內(nèi)除外),進(jìn)入到網(wǎng)卡,然后是進(jìn)入到內(nèi)核的TCP/IP協(xié)議棧(用于識別該連接請求,解封包,一層一層的剝開),還有可能要經(jīng)過Netfilter防火墻(屬于內(nèi)核的模塊)的過濾,最終到達(dá)WEB程序,最終建立了TCP/IP的連接。

   Client首先發(fā)送一個(gè)連接試探,ACK=0 表示確認(rèn)號無效,SYN = 1 表示這是一個(gè)連接請求或連接接受報(bào)文,同時(shí)表示這個(gè)數(shù)據(jù)報(bào)不能攜帶數(shù)據(jù),seq = x 表示Client自己的初始序號(seq = 0 就代表這是第0號包),這時(shí)候Client進(jìn)入syn_sent狀態(tài),表示客戶端等待服務(wù)器的回復(fù)。
   Server監(jiān)聽到連接請求報(bào)文后,如同意建立連接,則向Client發(fā)送確認(rèn)。TCP報(bào)文首部中的SYN 和 ACK都置1 ,ack = x + 1表示期望收到對方下一個(gè)報(bào)文段的第一個(gè)數(shù)據(jù)字節(jié)序號是x+1,同時(shí)表明x為止的所有數(shù)據(jù)都已正確收到(ack=1其實(shí)是ack=0+1,也就是期望客戶端的第1個(gè)包),seq = y 表示Server自己的初始序號(seq=0就代表這是服務(wù)器這邊發(fā)出的第0號包)。這時(shí)服務(wù)器進(jìn)入syn_rcvd,表示服務(wù)器已經(jīng)收到Client的連接請求,等待client的確認(rèn)。
   Client收到確認(rèn)后還需再次發(fā)送確認(rèn),同時(shí)攜帶要發(fā)送給Server的數(shù)據(jù)。ACK 置1 表示確認(rèn)號ack= y + 1 有效(代表期望收到服務(wù)器的第1個(gè)包),Client自己的序號seq= x + 1(表示這就是我的第1個(gè)包,相對于第0個(gè)包來說的),一旦收到Client的確認(rèn)之后,這個(gè)TCP連接就進(jìn)入Established狀態(tài),就可以發(fā)起http請求了。
建立TCP連接發(fā)起http請求

經(jīng)過TCP3次握手之后,瀏覽器發(fā)起了http的請求(看第?包),使用的http的方法 GET 方法,請求的URL是 / ,協(xié)議是HTTP/1.0:

抓包實(shí)戰(zhàn)

以上的報(bào)文是HTTP請求報(bào)文。那么HTTP請求報(bào)文和響應(yīng)報(bào)文會是什么格式呢?

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

頭部信息:User-Agent Host等成對出現(xiàn)的值

主體

不管是請求報(bào)文還是響應(yīng)報(bào)文都會遵循以上的格式。那么起始行中的請求方法有哪些種呢?

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

HEAD: 僅請求響應(yīng)首部

POST: 提交表單 (常用)

PUT: 上傳

DELETE: 刪除

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

TRACE: 追求一個(gè)資源請求中間所經(jīng)過的代理

那什么是URL、URI、URN?

URI Uniform Resource Identifier 統(tǒng)一資源標(biāo)識符,如:scheme://[username:password@]HOST:port/path/to/source

URL Uniform Resource Locator 統(tǒng)一資源定位符,如:http://www.magedu.com/downloads/nginx-1.5.tar.gz

URN Uniform Resource Name 統(tǒng)一資源名稱

請求的協(xié)議有哪些種?有以下幾種

http/0.9: stateless

http/1.0: MIME, keep-alive (保持連接), 緩存

http/1.1: 更多的請求方法,更精細(xì)的緩存控制,持久連接(persistent connection) 比較常用

    Accept 就是告訴服務(wù)器端,接受那些MIME類型

    Accept-Encoding 這個(gè)看起來是接受那些壓縮方式的文件

    Accept-Lanague 告訴服務(wù)器能夠發(fā)送哪些語言

    Connection 告訴服務(wù)器支持keep-alive特性

    Cookie 每次請求時(shí)都會攜帶上Cookie以方便服務(wù)器端識別是否是同一個(gè)客戶端

    Host 用來標(biāo)識請求服務(wù)器上的那個(gè)虛擬主機(jī),比如Nginx里面可以定義很多個(gè)虛擬主機(jī),那這里就是用來標(biāo)識要訪問那個(gè)虛擬主機(jī)。

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

    條件請求頭部:If-Modified-Since是瀏覽器向服務(wù)器端詢問某個(gè)資源文件如果自從什么時(shí)間修改過,那么重新發(fā)給我,這樣就保證服務(wù)器端資源文件更新時(shí),瀏覽器再次去請求,而不是使用緩存中的文件。

    安全請求頭部:Authorization: 客戶端提供給服務(wù)器的認(rèn)證信息;
網(wǎng)頁處理過程
html → head → title → #text(網(wǎng)頁標(biāo)題) → style → 加載樣式 → 解析樣式 → link → 加載外部樣式表文件 → 解析外部樣式表 → script → 加載外部腳本文件 → 解析外部腳本文件 → 執(zhí)行外部腳本 → body → div → script → 加載腳本 → 解析腳本 → 執(zhí)行腳本 → img → script → 加載腳本 → 解析腳本 → 執(zhí)行腳本 → 加載外部圖像文件 → 頁面初始化完畢
httpd請求過程

<1>.客戶端發(fā)送請求??蛻舳藶g覽器向服務(wù)器發(fā)送請求URL;

<2>.服務(wù)器接收請求。服務(wù)器接收到該瀏覽器發(fā)送的請求;

<3>.服務(wù)器生成HTML。服務(wù)器解析請求的URL,根據(jù)URL確定請求的目標(biāo)資源文件;這個(gè)資源文件通常是一個(gè)動態(tài)頁面(如ASP,PHP,JSP,ASPX等文件)的網(wǎng)絡(luò)地址(MVC結(jié)構(gòu)的程序例外)。Web服務(wù)器根據(jù)動態(tài)頁面文件的內(nèi)容和URL中的參數(shù),調(diào)用相應(yīng)的資源(數(shù)據(jù)庫數(shù)據(jù)或圖片文件等等)組織數(shù)據(jù),生成HTML頁面。

<4>.服務(wù)端響應(yīng)請求。生成HTML文檔以后,服務(wù)器響應(yīng)瀏覽器的請求,將生成的HTML文檔發(fā)送給客戶端瀏覽器;

<5>.客戶端接收響應(yīng)。瀏覽器接收服務(wù)端發(fā)出的請求得來HTML文檔;

<6>.客戶端解析HTML。瀏覽器對HTML文檔進(jìn)行解析,并加載相關(guān)的資源文件(JS,CSS,多媒體資源,內(nèi)嵌網(wǎng)頁)等,(在這里瀏覽器解悉完HTML文檔以后,就會進(jìn)行呈現(xiàn),但同時(shí)也會向服務(wù)器發(fā)送請求來請求其它相關(guān)的資源文件)

<7>.服務(wù)器發(fā)送資源文件。服務(wù)器接到瀏覽器對資源文件的請求,將相應(yīng)的資源文件響應(yīng)給客戶端瀏覽器;

<8>.客戶端加載資源文件。客戶端瀏覽器將接收服務(wù)器發(fā)送的資源文件,整理并呈現(xiàn)到頁面中;

<9>.客戶端從上到下加載。在進(jìn)行頁面呈現(xiàn)的時(shí)候,瀏覽器會從上到下執(zhí)行HTML文檔,當(dāng)遇到相應(yīng)的頁面腳本的時(shí)候,會對腳本進(jìn)行分析,并解釋執(zhí)行相應(yīng)的腳本代碼。

在第6步以后,我們就可以看到一部分頁面內(nèi)容了,不過可能是純文本內(nèi)容,沒有樣式,沒有圖片或其它資源。待到瀏覽器請求得到某資源的時(shí)候就會進(jìn)行組織呈現(xiàn),直到整個(gè)頁面所有資源加載完畢,顯示完成,請求響應(yīng)完畢。

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/39635.html

相關(guān)文章

  • 用戶訪問web務(wù)器過程精解

    摘要:文件如果在本機(jī)中仍然無法完成域名的解析,則會真正請求域名服務(wù)器來解析這個(gè)域名了。若沒有命中,就直接到域名服務(wù)器請求解析。是國際頂級域名服務(wù)器,如等,全球只有臺左右。本地域名服務(wù)器再向上一步返回的服務(wù)器發(fā)送請求。 博文參考 http://www.hackdig.com/ http://www.hackdig.com/07/hack-47475.htm http://www.cnblogs...

    sarva 評論0 收藏0
  • JavaScript 編程精解 中文第三版 十三、瀏覽器中的 JavaScript

    摘要:在本例中,使用屬性指定鏈接的目標(biāo),其中表示超文本鏈接。您應(yīng)該認(rèn)為和元數(shù)據(jù)隱式出現(xiàn)在示例中,即使它們沒有實(shí)際顯示在文本中。 來源:ApacheCN『JavaScript 編程精解 中文第三版』翻譯項(xiàng)目原文:JavaScript and the Browser 譯者:飛龍 協(xié)議:CC BY-NC-SA 4.0 自豪地采用谷歌翻譯 部分參考了《JavaScript 編程精解(第 2 版)》 ...

    zhiwei 評論0 收藏0
  • CrackMe006 | 160個(gè)crackme精解系列(圖文+視頻+注冊機(jī)源碼)

    摘要:作者逆向驛站微信公眾號逆向驛站知乎逆向驛站依然是的,而且沒殼子,條線比較清晰,算法也不難,非常適合新入門的來練習(xí)快過年了,系列年前就停更在吧,祝大家新年年后繼續(xù)準(zhǔn)備環(huán)境和工具虛擬機(jī)環(huán)境學(xué)習(xí)層次逆向分析程序驗(yàn)證流程邏輯解密算法,寫注冊機(jī)積累程 作者:逆向驛站微信公眾號:逆向驛站知乎:逆向驛站showImg(https://segmentfault.com/img/bVbnUo0?w=11...

    Barry_Ng 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<