推薦閱讀《圖解HTTP》
從要訪問的域名中獲取IP地址,DNS查詢的步驟以下:html
DNS(Domain Name System,域名系統),因特網上做爲域名和IP地址相互映射的一個分佈式數據庫,可以使用戶更方便的訪問互聯網,而不用去記住可以被機器直接讀取的IP數串。經過主機名,最終獲得該主機名對應的IP地址的過程叫作域名解析(或主機名解析)。web
當局部DNS服務器本身不能回答客戶機的DNS查詢時,它就須要向其餘DNS服務器進行查詢。
此時有兩種方式,如圖所示的是遞歸方式。
局部DNS服務器本身負責向其餘DNS服務器進行查詢,通常是先向該域名的根域服務器查詢,再由根域名服務器一級級向下查詢。
最後獲得的查詢結果返回給局部DNS服務器,再由局部DNS服務器返回給客戶端。ajax
當局部DNS服務器本身不能回答客戶機的DNS查詢時,也能夠經過迭代查詢的方式進行解析,如圖所示。
局部DNS服務器不是本身向其餘DNS服務器進行查詢,而是把能解析該域名的其餘DNS服務器的IP地址返回給客戶端DNS程序,客戶端DNS程序再繼續向這些DNS服務器進行查詢,直到獲得查詢結果爲止。
也就是說,迭代解析只是幫你找到相關的服務器而已,而不會幫你去查。
好比說:baidu.com的服務器ip地址在192.168.4.5這裏,你本身去查吧,本人比較忙,只能幫你到這裏了。算法
咱們在前面有說到根DNS服務器,域DNS服務器,這些都是DNS域名稱空間的組織方式。
按其功能命名空間中用來描述 DNS 域名稱的五個類別的介紹詳見下表中,以及與每一個名稱類型的示例:數據庫
向 http://facebook.com/
發出GET請求瀏覽器
在請求中,HTTP報文首部由方法、URI、HTTP版本、HTTP首部字段等構成。緩存
《計算機網絡》第四版中講「三次握手」的目的是「爲了防止已失效的鏈接請求報文段忽然又傳送到了服務端,於是產生錯誤」服務器
書中的例子是這樣的,「已失效的鏈接請求報文段」的產生在這樣一種狀況下:client發出的第一個鏈接請求報文段並無丟失,而是在某個網絡結點長時間的滯留了,以至延誤到鏈接釋放之後的某個時間纔到達server。
原本這是一個早已失效的報文段。但server收到此失效的鏈接請求報文段後,就誤認爲是client再次發出的一個新的鏈接請求。因而就向client發出確認報文段,贊成創建鏈接。網絡
假設不採用「三次握手」,那麼只要server發出確認,新的鏈接就創建了。因爲如今client並無發出創建鏈接的請求,所以不會理睬server的確認,也不會向server發送數據。但server卻覺得新的運輸鏈接已經創建,並一直等待client發來數據。這樣,server的不少資源就白白浪費掉了。採用「三次握手」的辦法能夠防止上述現象發生。
例如剛纔那種狀況,client不會向server的確認發出確認。server因爲收不到確認,就知道client並無要求創建鏈接。」。主要目的防止server端一直等待,浪費資源。
這是由於服務端在LISTEN狀態下,收到創建鏈接請求的SYN報文後,把ACK和SYN放在一個報文裏發送給客戶端。
而關閉鏈接時,當收到對方的FIN報文時,僅僅表示對方再也不發送數據了可是還能接收數據,己方也未必所有數據都發送給對方了,因此己方能夠當即close,也能夠發送一些數據給對方後,再發送FIN報文給對方來表示贊成如今關閉鏈接,所以,己方ACK和FIN通常都會分開發送。
客戶端原本能夠直接經過HTTP協議訪問某網站應用服務器,網站管理員能夠在中間加上一個Nginx,客戶端請求Nginx,Nginx請求應用服務器,而後將結果返回給客戶端,此時Nginx就是反向代理服務器。
服務器會發送一個301永久重定向響應來告訴瀏覽器訪問 http://www.facebook.com/
而不是 http://facebook.com/
。
爲何服務器堅持重定向而不是直接給予瀏覽器用戶須要的結果,這有不少有意思緣由:
http://www.igoro.com/
和 http://igoro.com/
,搜索引擎會認爲這是兩個不一樣的網站,結果他們兩個每一個都有一部分訪問量,可是也只能擁有更低的搜索引擎排名。若是使用了301定位,搜索引擎將會識別重定向,進而將同一來源的多個連接算做一個。301和302狀態碼都表示重定向,就是說瀏覽器在拿到服務器返回的這個狀態碼後會自動跳轉到一個新的URL地址,這個地址能夠從響應的Location首部中獲取(用戶看到的效果就是他輸入的地址A瞬間變成了另外一個地址B)——這是它們的共同點。
他們的不一樣在於。301表示舊地址A的資源已經被永久地移除了(這個資源不可訪問了),搜索引擎在抓取新內容的同時也將舊的網址換爲重定向以後的網址;
302表示舊地址A的資源還在(仍然能夠訪問),這個重定向只是臨時地從舊地址A跳轉到地址B,搜索引擎會抓取新的內容而保存舊的網址。 SEO 302好於301
當一個網站或者網頁24—48小時內臨時移動到一個新的位置,這時候就要進行302跳轉,而使用301跳轉的場景就是以前的網站由於某種緣由須要移除掉,而後要到新的地址訪問,是永久性的。
清晰明確而言:使用301跳轉的大概場景以下:
一、 域名到期不想續費(或者發現了更適合網站的域名),想換個域名。
二、 在搜索引擎的搜索結果中出現了不帶www的域名,而帶www的域名卻沒有收錄,這個時候能夠用301重定向來告訴搜索引擎咱們目標的域名是哪個。
三、 空間服務器不穩定,換空間的時候。
瀏覽器知道了 http://www.facebook.com/
是真正應該訪問的URL,因此就發送了另一個GET請求。
服務器會接收這個GET請求,而且返回一個響應結果
小網站會常常有一個SQL數據庫來存儲他們的數據,可是網站存儲數據量過大或者流量過大後就必須將數據庫分佈在多臺機器,解決的方法有不少種
包括sharding(在主鍵基礎上劃分表到多個數據庫中),複製和使用簡化的弱語義一致性數據庫
例如,Facebook必須儘快更新新聞供應,但數據支持的「你可能認識的人」功能可能只須要每晚進行更新(做者猜想是這樣)。批處理做業的更新致使存在一些舊的相對不重要的數據,可是使數據更新更快更簡單。
HTTP/1.1 200 OK Cache-Control: private, no-store, no-cache, must-revalidate, post-check=0, pre-check=0 Expires: Sat, 01 Jan 2000 00:00:00 GMT P3P: CP="DSP LAW" Pragma: no-cache Content-Encoding: gzip Content-Type: text/html; charset=utf-8 X-Cnection: close Transfer-Encoding: chunked Date: Fri, 12 Feb 2010 09:05:55 GMT ...
整個完整的響應是36KB,其中大部分處理後由blob類型傳送
內容編碼頭部告訴瀏覽器響應體使用了gzip壓縮算法。在解析blob後,你就會看到你指望的HTML了。
在瀏覽器接收完整HTML文件前,瀏覽器就開始渲染頁面了。
隨着瀏覽器渲染HTML,瀏覽器會注意到有些標籤須要請求其餘URLs的資源,瀏覽器將會發送一個GET請求來從新獲取每一個文件 。
在web2.0時代,即便在頁面渲染後客戶端仍是持續與服務器端通訊。
例如,當你的朋友上線或下線時,Facebook聊天功能將會持續更新你已經登陸的朋友列表。爲了更新這個列表,你瀏覽器上運行的JS將會發送異步請求到服務器,異步請求是發送給特殊URL的GET或POST請求。在Facebook的例子中,客戶端會發送一個POST請求到 http://www.facebook.com/ajax/chat/buddy_list.php
,獲取你在線的朋友列表
這個模式被稱爲AJAX,是「Asynchronous JavaScript And XML」,的縮寫,雖然不太清楚爲何服務器必須將響應格式化爲xml。