摘要:文件如果在本機中仍然無法完成域名的解析,則會真正請求域名服務器來解析這個域名了。若沒有命中,就直接到域名服務器請求解析。是國際頂級域名服務器,如等,全球只有臺左右。本地域名服務器再向上一步返回的服務器發(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
當一個用戶在瀏覽器里輸入www.google.com這個URL時,將會發(fā)生如下操作
1 首先,瀏覽器會請求DNS把這個域名解析成對應的IP地址; 2 然后,根據(jù)這個IP地址在互聯(lián)網(wǎng)上找到對應的服務器,建立Socket連接,向這個服務器發(fā)起一個HTTP Get請求,由這個服務器決定返回默認的數(shù)據(jù)資源給訪問的用戶; 3 在服務器端實際上還有復雜的業(yè)務邏輯:服務器可能有多臺,到底指定哪臺服務器處理請求,這需要一個負載均衡設備來平均分配所有用戶的請求; 4 還有請求的數(shù)據(jù)是存儲在分布式緩存里還是一個靜態(tài)文件中,或是在數(shù)據(jù)庫里; 5 當數(shù)據(jù)返回瀏覽器時,瀏覽器解析數(shù)據(jù)發(fā)現(xiàn)還有一些靜態(tài)資源(如:css,js或者圖片)時又會發(fā)起另外的HTTP請求,而這些請求可能會在CDN上,那么CDN服務器又會處理這個用戶的請求;HTTP協(xié)議解析 HTTP協(xié)議
最重要的就是要熟悉HTTP協(xié)議中的HTTP Header,HTTP Header控制著互聯(lián)網(wǎng)上成千上萬的用戶的數(shù)據(jù)傳輸。最關鍵的是,它控制著用戶瀏覽器的渲染行為和服務器的執(zhí)行邏輯。
瀏覽器緩存機制? 200: 成功,請求數(shù)據(jù)通過響應報文的entity-body部分發(fā)送;OK
? 301: 請求的URL指向的資源已經被刪除;但在響應報文中通過首部Location指明了資源在所處的新位置; Moved Permanently
? 302: 與301相似,但在響應報文中通過Location指明資源現(xiàn)在所處臨時新位置; Moved Temporarily
? 304: 客戶端發(fā)出了條件式請求,但服務器上的資源未曾發(fā)生改變,則通過響應此響應狀態(tài)碼通知客戶端; Not Modified
? 401: 需要輸入賬號和密碼認證方能訪問資源; Unauthorized
? 403: 請求被禁止; Forbidden
? 404: 服務器無法找到客戶端請求的資源; Not Found
? 500: 服務器內部錯誤; Internal Server Error
? 502: 代理服務器從后端服務器收到了一條偽響應,如無法連接到父網(wǎng)關; Bad Gateway
當我們使用Ctrl+F5組合鍵刷新一個頁面時,首先是在瀏覽器端,會直接向目標URL發(fā)送請求,而不會使用瀏覽器緩存的數(shù)據(jù);其次即使請求發(fā)送到服務端,也有可能訪問到的是緩存的數(shù)據(jù)。所以在HTTP的請求頭中會增加一些請求頭,它告訴服務端我們要獲取最新的數(shù)據(jù)而非緩存。最重要的是在請求頭中增加了兩個請求項Pragma:no-cache和Cache-Control:no-cache。
1 Cache-Control/Pragma這個HTTP Head字段用于指定所有緩存機制在整個請求/響應鏈中必須服從的指令,如果知道該頁面是否為緩存,不僅可以控制瀏覽器,還可以控制和HTTP協(xié)議相關的緩存或代理服務器。Http Head字段的可選值:
Cache-Control請求字段被各個瀏覽器支持的較好,而且它的優(yōu)先級也比較高,它和其他一些請求字段(如Expires)同時出現(xiàn)時,Cache-Control會覆蓋其他字段。
Pragma字段的作用和Cache-Control有點類似,它也是在HTTP頭中包含一個特殊的指令,使相關的服務器來遵守,最常用的就是Pragma:no-cache,它和Cache-Control:no-cache的作用是一樣的。
2 Expires 緩存過期時間Expires通常的使用格式是Expires:Sat,25 Feb 2012 12:22:17 GMT,后面跟著一個日期和時間,超過這個值后,緩存的內容將失效,也就是瀏覽器在發(fā)出請求之前檢查這個頁面的這個字段,看該頁面是否已經過期了,過期了將重新向服務器發(fā)起請求。
3 Last-Modified/Etag 最后修改時間Last-Modified字段一般用于表示一個服務器上的字段的最后修改時間,資源可以是靜態(tài)(靜態(tài)內容自動加上Last-Modified)或者動態(tài)的內容(如Servlet提供了一個getLastModified方法用于檢查某個動態(tài)內容是否已經更新),通過這個最后修改時間可以判斷當前請求的資源是否是最新的。一般服務器端在響應頭中返回一個Last-Modified字段,告訴瀏覽器這個頁面的最后修改時間,如:Sat,25 Feb 2012 12:55:04 GMT,瀏覽器再次請求時在請求頭中增加一個If-Modified-Since:Sat,25 Feb 2012 12:55:04 GMT字段,詢問當前緩存的頁面是否是最新的,如果是最新的就會返回304狀態(tài)碼,告訴瀏覽器是最新的,服務器也不會傳輸新的數(shù)據(jù)。
與Last-Modified字段有類似功能的還有一個Etag字段,這個字段的作用是讓服務端給每個頁面分配一個唯一編號,然后通過這個編號來區(qū)分當前這個頁面是否是最新的。這種方式比使用Last-Modified更加靈活,但是在后端的Web服務器有多臺時比較難處理,因為每個Web服務器都要記住網(wǎng)站的所有資源編號,否則瀏覽器返回這個編號就沒有意義了。
WEB工作流程 上網(wǎng)過程瀏覽器本身是一個客戶端,當你輸入URL的時候,首先瀏覽器會去請求DNS服務器,通過DNS獲取相應的域名對應的IP,然后通過IP地址找到IP對應的服務器后,要求建立TCP連接,等瀏覽器發(fā)送完HTTP Request(請求)包后,服務器接收到請求包之后才開始處理請求包,服務器調用自身服務,返回HTTP Response(響應)包;客戶端收到來自服務器的響應后開始渲染這個Response包里的主體(body),等收到全部的內容隨后斷開與該服務器之間的TCP連接。
Web服務器的工作原理可以簡單地歸納為
瀏覽器通過DNS域名解析到服務器IP;
客戶機通過TCP/IP協(xié)議建立到服務器的TCP連接;
客戶端向服務器發(fā)送HTTP協(xié)議請求包,請求服務器里的資源文檔;
服務器向客戶機發(fā)送HTTP協(xié)議應答包,如果請求的資源包含有動態(tài)語言的內容,那么服務器會調用動態(tài)語言的解釋引擎負責處理“動態(tài)內容”,并將處理得到的數(shù)據(jù)返回給客戶端;
客戶機與服務器斷開。由客戶端解釋HTML文檔,在客戶端屏幕上渲染圖形結果;
DNS域名解析當用戶在瀏覽器中輸入域名,如:www.google.com,并按下回車后,DNS解析過程大體如下
(1)瀏覽器先查緩存,若緩存中有域名對應IP地址,則解析結束。(存活時間TTL) (2)若瀏覽器緩存中沒有,瀏覽器會查詢操作系統(tǒng)中緩存緩存是否有這個域名對應的DNS解析結果。(hosts 文件) (3)如果在本機中仍然無法完成域名的解析,則會真正請求域名服務器來解析這個域名了。操作系統(tǒng)會把域名發(fā)送給設置的LDNS(cat /etc/resolv.conf)。 (4)若LDNS沒有命中,就直接到Root Server域名服務器請求解析。 (5)根域名服務器返回本地域名服務器一個所查詢域的主域名服務器(gTLD Server)地址。GTLD是國際頂級域名服務器,如.com、.cn、.org等,全球只有13臺左右。 (6)本地域名服務器(Local DNS Server)再向上一步返回的GTLD服務器發(fā)送請求。 (7)接受請求的GTLD服務器查找并返回此域名對應的Name Server域名服務器,這個Name Server通常就是你注冊的域名服務器,例如你在某個域名服務提供商申請的域名,那么這個域名解析任務就有這個域名提供商的服務器來完成。 (8)Name Server返回IP記錄和TTL(緩存時間)。 (9)LDNS緩存該記錄,緩存時間有TTL控制。 (10)解析結果返回給用戶,用戶根據(jù)TTL值緩存在本地系統(tǒng)緩存中,域名解析過程結束。幾種域名解析方式
1 A記錄,A代表的是Address,用來指定域名對應的IP地址如將item.taobao.com指定到115.238.23.241,將switch.taobao.com指定到121.14.24.241。A記錄可以將多個域名解析到一個IP地址,但是不能將一個域名解析到多個IP地址。 2 MX記錄,表示的是Mail Exchange,就是可以將某個域名下的郵件服務器指向自己的Mail Server如taobao.com域名的A記錄IP地址是115.238.25.245,如果MX記錄設置為115.238.25.246,是xxx@taobao.com的郵件路由,DNS會將郵件發(fā)送到115.238.25.246所在的服務器,而正常通過Web請求的話仍然解析到A記錄的IP地址。 3 CNAME記錄,全稱是Canonical Name(別名解析),所謂的別名解析就是可以為一個域名設置一個或者多個別名如將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記錄,為某個域名指定DNS解析服務器,也就是這個域名有指定的IP地址的DNS服務器去解析前面的“google.com. 172800 IN NS ns4.google.com.”就是NS解析。 5 TXT記錄,為某個主機名或域名設置說明如可以為google.com設置TXT記錄為“谷歌|中國”這樣的說明。發(fā)起TCP協(xié)議 三次握手連接
拿到域名對應的IP地址之后,User-Agent(一般是指瀏覽器)會以一個隨機端口(1024 < 端口 < 65535)向服務器的WEB程序(常用的有httpd,nginx等)80端口發(fā)起TCP的連接請求。這個連接請求(原始的http請求經過TCP/IP4層模型的層層封包)到達服務器端后(這中間通過各種路由設備,局域網(wǎng)內除外),進入到網(wǎng)卡,然后是進入到內核的TCP/IP協(xié)議棧(用于識別該連接請求,解封包,一層一層的剝開),還有可能要經過Netfilter防火墻(屬于內核的模塊)的過濾,最終到達WEB程序,最終建立了TCP/IP的連接。
Client首先發(fā)送一個連接試探,ACK=0 表示確認號無效,SYN = 1 表示這是一個連接請求或連接接受報文,同時表示這個數(shù)據(jù)報不能攜帶數(shù)據(jù),seq = x 表示Client自己的初始序號(seq = 0 就代表這是第0號包),這時候Client進入syn_sent狀態(tài),表示客戶端等待服務器的回復。
Server監(jiān)聽到連接請求報文后,如同意建立連接,則向Client發(fā)送確認。TCP報文首部中的SYN 和 ACK都置1 ,ack = x + 1表示期望收到對方下一個報文段的第一個數(shù)據(jù)字節(jié)序號是x+1,同時表明x為止的所有數(shù)據(jù)都已正確收到(ack=1其實是ack=0+1,也就是期望客戶端的第1個包),seq = y 表示Server自己的初始序號(seq=0就代表這是服務器這邊發(fā)出的第0號包)。這時服務器進入syn_rcvd,表示服務器已經收到Client的連接請求,等待client的確認。
建立TCP連接發(fā)起http請求Client收到確認后還需再次發(fā)送確認,同時攜帶要發(fā)送給Server的數(shù)據(jù)。ACK 置1 表示確認號ack= y + 1 有效(代表期望收到服務器的第1個包),Client自己的序號seq= x + 1(表示這就是我的第1個包,相對于第0個包來說的),一旦收到Client的確認之后,這個TCP連接就進入Established狀態(tài),就可以發(fā)起http請求了。
經過TCP3次握手之后,瀏覽器發(fā)起了http的請求(看第?包),使用的http的方法 GET 方法,請求的URL是 / ,協(xié)議是HTTP/1.0:
抓包實戰(zhàn)以上的報文是HTTP請求報文。那么HTTP請求報文和響應報文會是什么格式呢?
起始行:如 GET / HTTP/1.0 (請求的方法 請求的URL 請求所使用的協(xié)議) 頭部信息:User-Agent Host等成對出現(xiàn)的值 主體
不管是請求報文還是響應報文都會遵循以上的格式。那么起始行中的請求方法有哪些種呢?
GET: 完整請求一個資源 (常用) HEAD: 僅請求響應首部 POST: 提交表單 (常用) PUT: 上傳 DELETE: 刪除 OPTIONS: 返回請求的資源所支持的方法的方法 TRACE: 追求一個資源請求中間所經過的代理
那什么是URL、URI、URN?
URI Uniform Resource Identifier 統(tǒng)一資源標識符,如: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: 更多的請求方法,更精細的緩存控制,持久連接(persistent connection) 比較常用
Accept 就是告訴服務器端,接受那些MIME類型 Accept-Encoding 這個看起來是接受那些壓縮方式的文件 Accept-Lanague 告訴服務器能夠發(fā)送哪些語言 Connection 告訴服務器支持keep-alive特性 Cookie 每次請求時都會攜帶上Cookie以方便服務器端識別是否是同一個客戶端 Host 用來標識請求服務器上的那個虛擬主機,比如Nginx里面可以定義很多個虛擬主機,那這里就是用來標識要訪問那個虛擬主機。 User-Agent 用戶代理,一般情況是瀏覽器,也有其他類型,如:wget curl 搜索引擎的蜘蛛等 條件請求頭部:If-Modified-Since是瀏覽器向服務器端詢問某個資源文件如果自從什么時間修改過,那么重新發(fā)給我,這樣就保證服務器端資源文件更新時,瀏覽器再次去請求,而不是使用緩存中的文件。 安全請求頭部:Authorization: 客戶端提供給服務器的認證信息;網(wǎng)頁處理過程
html → head → title → #text(網(wǎng)頁標題) → style → 加載樣式 → 解析樣式 → link → 加載外部樣式表文件 → 解析外部樣式表 → script → 加載外部腳本文件 → 解析外部腳本文件 → 執(zhí)行外部腳本 → body → div → script → 加載腳本 → 解析腳本 → 執(zhí)行腳本 → img → script → 加載腳本 → 解析腳本 → 執(zhí)行腳本 → 加載外部圖像文件 → 頁面初始化完畢httpd請求過程
<1>.客戶端發(fā)送請求??蛻舳藶g覽器向服務器發(fā)送請求URL;
<2>.服務器接收請求。服務器接收到該瀏覽器發(fā)送的請求;
<3>.服務器生成HTML。服務器解析請求的URL,根據(jù)URL確定請求的目標資源文件;這個資源文件通常是一個動態(tài)頁面(如ASP,PHP,JSP,ASPX等文件)的網(wǎng)絡地址(MVC結構的程序例外)。Web服務器根據(jù)動態(tài)頁面文件的內容和URL中的參數(shù),調用相應的資源(數(shù)據(jù)庫數(shù)據(jù)或圖片文件等等)組織數(shù)據(jù),生成HTML頁面。
<4>.服務端響應請求。生成HTML文檔以后,服務器響應瀏覽器的請求,將生成的HTML文檔發(fā)送給客戶端瀏覽器;
<5>.客戶端接收響應。瀏覽器接收服務端發(fā)出的請求得來HTML文檔;
<6>.客戶端解析HTML。瀏覽器對HTML文檔進行解析,并加載相關的資源文件(JS,CSS,多媒體資源,內嵌網(wǎng)頁)等,(在這里瀏覽器解悉完HTML文檔以后,就會進行呈現(xiàn),但同時也會向服務器發(fā)送請求來請求其它相關的資源文件)
<7>.服務器發(fā)送資源文件。服務器接到瀏覽器對資源文件的請求,將相應的資源文件響應給客戶端瀏覽器;
<8>.客戶端加載資源文件。客戶端瀏覽器將接收服務器發(fā)送的資源文件,整理并呈現(xiàn)到頁面中;
<9>.客戶端從上到下加載。在進行頁面呈現(xiàn)的時候,瀏覽器會從上到下執(zhí)行HTML文檔,當遇到相應的頁面腳本的時候,會對腳本進行分析,并解釋執(zhí)行相應的腳本代碼。
在第6步以后,我們就可以看到一部分頁面內容了,不過可能是純文本內容,沒有樣式,沒有圖片或其它資源。待到瀏覽器請求得到某資源的時候就會進行組織呈現(xiàn),直到整個頁面所有資源加載完畢,顯示完成,請求響應完畢。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/39635.html
摘要:文件如果在本機中仍然無法完成域名的解析,則會真正請求域名服務器來解析這個域名了。若沒有命中,就直接到域名服務器請求解析。是國際頂級域名服務器,如等,全球只有臺左右。本地域名服務器再向上一步返回的服務器發(fā)送請求。 博文參考 http://www.hackdig.com/ http://www.hackdig.com/07/hack-47475.htm http://www.cnblogs...
摘要:在本例中,使用屬性指定鏈接的目標,其中表示超文本鏈接。您應該認為和元數(shù)據(jù)隱式出現(xiàn)在示例中,即使它們沒有實際顯示在文本中。 來源:ApacheCN『JavaScript 編程精解 中文第三版』翻譯項目原文:JavaScript and the Browser 譯者:飛龍 協(xié)議:CC BY-NC-SA 4.0 自豪地采用谷歌翻譯 部分參考了《JavaScript 編程精解(第 2 版)》 ...
摘要:作者逆向驛站微信公眾號逆向驛站知乎逆向驛站依然是的,而且沒殼子,條線比較清晰,算法也不難,非常適合新入門的來練習快過年了,系列年前就停更在吧,祝大家新年年后繼續(xù)準備環(huán)境和工具虛擬機環(huán)境學習層次逆向分析程序驗證流程邏輯解密算法,寫注冊機積累程 作者:逆向驛站微信公眾號:逆向驛站知乎:逆向驛站showImg(https://segmentfault.com/img/bVbnUo0?w=11...
閱讀 2832·2023-04-25 18:58
閱讀 976·2021-11-25 09:43
閱讀 1210·2021-10-25 09:46
閱讀 3494·2021-09-09 11:40
閱讀 1679·2021-08-05 09:59
閱讀 868·2019-08-29 15:07
閱讀 956·2019-08-29 12:48
閱讀 695·2019-08-29 11:19