源伺服器是如何獲取數據的
Ⅰ 認識HTTP----緩存篇
本文內容大多參考 《圖解HTTP》一書
所以講緩存為什麼要先扯代理伺服器?別急,讓我們看一下一個請求的簡單示意圖。
我們看到客戶端(用戶)發送了一個請求並不是直接發給源伺服器的而是經過了代理伺服器,然後經由代理伺服器再發送給源伺服器,響應也同樣遵循這個順序。
那麼代理伺服器在這中間擔任了什麼角色?
緩存是指代理伺服器或客戶端本地磁碟內保存的資源副本。利用緩存可減少對源伺服器的訪問,因此也就節省了通信流量和通信時間。
緩存伺服器是代理伺服器的一種,並歸類在緩存代理類型中。換句話說,當代理轉發從伺服器返回的響應時,代理伺服器將會保存一份資源的副本。
緩存伺服器的優勢在於利用緩存可避免多次從源伺服器轉發資源。因此客戶端可就近從緩存伺服器上獲取資源,而源伺服器也不必多次處理相同的請求了。
即便緩存伺服器和客戶端內有緩存,也不能每次都給我返回緩存吧,如果是這樣,源伺服器更新了我也不知道,因為我每次都是看緩存的資源。
為了解決這個問題,針對緩存設計了時效性的概念:
即使存在緩存,也會因為客戶端的要求、緩存的有效期等因素,向源伺服器確認資源的有效性。若判斷緩存失效,緩存伺服器將會再次從源伺服器上獲取「新」資源。
緩存不僅可以存在於緩存伺服器內,還可以存在客戶端瀏覽器中。以Internet Explorer 程序為例,把客戶端緩存稱為臨時網路文件(Temporary Internet File)。
瀏覽器緩存如果有效,就不必再向伺服器請求相同的資源了,可以直接從本地磁碟內讀取。
另外,和緩存伺服器相同的一點是,當判定緩存過期後,會向源伺服器確認資源的有效性。若判斷瀏覽器緩存失效,瀏覽器會再次請求新資源。
Pragma 是HTTP/1.1 之前版本的歷史遺留欄位,僅作為與HTTP/1.0的向後兼容而定義。
規范定義的形式唯一,如下所示。
Pragma: no-cache
該首部欄位屬於通用首部欄位,但只用在客戶端發送的請求中。客戶端會要求所有的中間伺服器不返回緩存的資源。
通過指定首部欄位Cache-Control 的指令,就能操作緩存的工作機制。
可用的指令按請求和響應分類如下所示:
public指令
Cache-Control: public
當指定使用public 指令時,則明確表明其他用戶也可利用緩存。
private指令
no-store指令
Cache-Control: no-store
當使用no-store 指令時,暗示請求(和對應的響應)或響應中包含機密信息。
因此,該指令規定緩存不能在本地存儲請求或響應的任一部分。
ps:從字面意思上很容易把no-cache誤解成為不緩存,但事實上no-cache代表不緩存過期的資源,緩存會向源伺服器進行有效期確認後處理資源,也許稱為do-not-serve-from-cache-without-revalidation更合適。no-store 才是真正地不進行緩存,請讀者注意區別理解。
s-maxage指令
Cache-Control: s-maxage=604800 //(單位:秒)
s-maxage 指令的功能和max-age 指令的功能相同, 它們的不同點是s-maxage 指令只適用於供多位用戶使用的公共緩存伺服器(這里指代理伺服器)。也就是說,對於向同一用戶重復返回響應的伺服器來說,這個指令沒有任何作用。
另外,當使用s-maxage 指令後,則直接忽略對Expires 首部欄位及max-age 指令的處理。
max-age指令
cache-extension token
Cache-Control: private, community="UCI"
通過 cache-extension 標記(token),可以擴展Cache-Control 首部欄位內的指令。
如上例,Cache-Control 首部欄位本身沒有community 這個指令。藉助extension tokens 實現了該指令的添加。如果緩存伺服器不能理community 這個新指令,就會直接忽略。因此,extension tokens 僅對能理解它的緩存伺服器來說是有意義的。
If-Unmodified-Since: Thu, 03 Jul 2012 00:00:00 GMT
首部欄位If-Unmodified-Since 和首部欄位If-Modified-Since 的作用相反。它的作用的是告知伺服器,指定的請求資源只有在欄位值內指定的日期時間之後,未發生更新的情況下,才能處理請求。如果在指定日期時間後發生了更新,則以狀態碼412 Precondition Failed 作為響應返回。
ps:Last-Modified 存在一定問題,如果在伺服器上,一個資源被修改了,但其實際內容根本沒發生改變,會因為Last-Modified時間匹配不上而返回了整個實體給客戶端(即使客戶端緩存里有個一模一樣的資源)。
首部欄位If-None-Match 屬於附帶條件之一。它和首部欄位If-Match 作用相反。用於指定If-None-Match 欄位值的實體標記(ETag)值與請求資源的ETag 不一致時,它就告知伺服器處理該請求。
在GET 或HEAD 方法中使用首部欄位If-None-Match 可獲取最新的資源。因此,這與使用首部欄位If-Modified-Since 時有些類似。
不與伺服器確認,而是直接使用瀏覽器緩存的內容。其中響應內容和之前的響應內容一模一樣,例如其中的Date時間是上一次響應的時間。
F5的作用和直接在URI輸入欄中輸入然後回車是不一樣的,F5會讓瀏覽器無論如何都發一個HTTP Request給Server,即使先前的響應中有Expires頭部。
Ctrl+F5要的是徹底的從Server拿一份新的資源過來,所以不光要發送HTTP request給Server,而且這個請求裡面連If-Modified-Since/If-None-Match都沒有,這樣就逼著Server不能返回304,而是把整個資源原原本本地返回一份,這樣,Ctrl+F5引發的傳輸時間變長了,自然網頁Refresh的也慢一些。
Cache-Control 是 HTTP1.1 才有的,不適用於 HTTP1.0,而 Expires 既適用於 HTTP1.0,也適用於 HTTP1.1,所以說在大多數情況下同時發送這兩個頭會是一個更好的選擇,當客戶端兩種頭都能解析的時候,會優先使用 Cache-Control。
二者都是通過某個標識值來請求資源, 如果伺服器端的資源沒有變化,則自動返回 HTTP 304 (Not Changed)狀態碼,內容為空,這樣就節省了傳輸數據量。當資源變化後則返回新資源。從而保證不向客戶端重復發出資源,也保證當伺服器有變化時,客戶端能夠得到最新的資源。
其中Last-Modified使用文件最後修改作為文件標識值,它無法處理文件一秒內多次修改的情況,而且只要文件修改了哪怕文件實質內容沒有修改,也會重新返回資源內容;ETag作為「被請求變數的實體值」,其完全可以解決Last-Modified頭部的問題,但是其計算過程需要耗費伺服器資源。
Expires和Cache-Control都有一個問題就是服務端的修改,如果還在緩存時效里,那麼客戶端是不會去請求服務端資源的(非刷新),這就存在一個資源版本不符的問題,而強制刷新一定會發起HTTP請求並返回資源內容,無論該內容在這段時間內是否修改過;而Last-Modified和Etag每次請求資源都會發起請求,哪怕是很久都不會有修改的資源,都至少有一次請求響應的消耗。
對於所有可緩存資源,指定一個Expires或Cache-Control max-age以及一個Last-Modified或ETag至關重要。同時使用前者和後者可以很好的相互適應。
前者不需要每次都發起一次請求來校驗資源時效性,後者保證當資源未出現修改的時候不需要重新發送該資源。而在用戶的不同刷新頁面行為中,二者的結合也能很好的利用HTTP緩存控制特性,無論是在地址欄輸入URI然後輸入回車進行訪問,還是點擊刷新按鈕,瀏覽器都能充分利用緩存內容,避免進行不必要的請求與數據傳輸。
做法很簡單,就是把可能會更新的資源以版本形式發布,常用的方法是在文件名或參數帶上一串md5或時間標記符:
可以看到上面的例子中有不同的做法,有的在URI後面加上了md5參數,有的將md5值作為文件名的一部分,有的將資源放在特性版本的目錄中。
那麼在文件沒有變動的時候,瀏覽器不用發起請求直接可以使用緩存文件;而在文件有變化的時候,由於文件版本號的變更,導致文件名變化,請求的url變了,自然文件就更新了。這樣能確保客戶端能及時從伺服器收取到新修改的文件。通過這樣的處理,增長了靜態資源,特別是圖片資源的緩存時間,避免該資源很快過期,客戶端頻繁向服務端發起資源請求,伺服器再返回304響應的情況(有Last-Modified/Etag)。
Ⅱ 怎樣實現同一資料庫在海外伺服器和國內伺服器數據同步
可以搭建主從復制。
Ⅲ 什麼是CDNCDN的優勢是什麼
CDN的全稱為:Content Delivery Network,翻譯為中文的意思就是內容分發網路。
CDN是建立在現有網路之上的虛擬網路,主要是依靠在使用用戶附近部署伺服器節點,通過負載均衡(Load Balance)、內容分發、調度等功能,讓用戶在最近的節點上獲取所需的數據,減小了骨幹線路的負載,提高用戶的訪問速度。
CDN主要原理就是將內存緩存在終端用戶附近,降低了骨幹線路的網路擁塞,將骨幹線路的壓力下沉到底層。
有人會感覺CDN和鏡像伺服器比較類似,兩個的不同是在於鏡像伺服器是完整的復制源伺服器的數據,CDN是部分的內容緩存,智能度更高。
CDN=更智能的鏡像+緩存+流量導流
CDN的優劣勢:
優勢:
1.用戶訪問數據快
因為CDN是就近原則,可以讓用戶在距離最近的節點上訪問數據,使用CDN的速度要比不使用的速度快。
2.可以讓更多的客戶訪問
CDN可以確保網路具有高數據閾值,大量用戶可以在沒有延遲的去訪問數據。實現高流量訪問,允許世界各地的人同時可以訪問你的網站。
3.安全性
CDN可以隱藏源伺服器的IP地址減少被黑客的攻擊。
劣勢:
1.成本高
用戶訪問時,CDN的就近原則把用戶分配到最近節點,如果節點沒有數據,節點需要重新回到源伺服器取數據,會產生回源流量,CDN成本是按照流量多少來支付費用的。CDN也更適合靜態的內容,不適用動態的內容(實時交互數據)。
2.服務地點
如果您的大多數受眾群體位於CDN沒有伺服器的國家/地區,則您網站上的數據可能需要比不使用任何CDN更進一步。
3.數據安全
您是否願意將您的網站文件移交給另一家公司?在決定是否使用CDN之前,您必須考慮這一點。使用CDN意味著第三方會收到有關您的網站和系統的信息。
結論:
是否應該使用CDN的問題取決於貴公司的需求。如果你有一個擁有高流量和足夠資源的熱門網站,使用CDN是非常不錯的選擇。
Ⅳ CDN向源站請求數據用的是源站伺服器內網帶寬嗎
這個應該是事實,CDN 是將靜態資源存在距離用戶端較近的 CDN 節點上,如果 CDN
節點上不存在資源,用戶就需要通過 CDN 回源站獲取最終資源。因此 CDN 回源帶寬多少,將決定客戶源站需要每月支出帶寬成本的多少。
所以CDN的回源會把你的伺服器拖垮,因為CDN用到的是緩存技術,加速的是網站的靜態、公用部分。如果是動態網站,不能緩存,每次都要回源伺服器訪問,用了CDN反而增加了一個環節!
具體cdn服務
CDN服務打個比方吧,A家的網速 100M的,但他只用了10M的速度,B家的網速是10M的,但是他需要15M的速度才行。怎麼辦呢。 C是一家CDN服務商,在A家有個節點(就像A是一個贊助商一樣)B在C家買了CDN加速服務。當B的速度不夠的時候,CDN加速就會選擇有節余的節點來幫B,提高B的速度。這樣B的速度就能達到或超過15M ,皆大歡喜。A沒浪費,B速度有了,C賺了錢。 當C的節點在全國都有,非常多的時候。那麼你用C家的CDN加速服務,你就會健步如飛了。C=八度網路。
形式B:當B網用戶訪問被CDN加速的站點時,從本地的DNS查詢域名,最終可能在全局智能DNS伺服器得到所訪問域名所對應的IP地址,即圖7所示:B網的緩存伺服器的IP;接著B網用戶瀏覽器向B網的緩存伺服器發起訪問請求,但是緩存伺服器並沒有緩存默認頁面文件,它需要先從源站獲取得到這個對象,緩存並把內容返還給B網用戶。B網緩存伺服器通過內部DNS知道源站在位置。
Ⅳ 使用html+ajax如何獲取伺服器或其它網站的數據
伺服器跟蹤用戶狀態有好幾種方法,其中一種就是,伺服器保持session,給客戶端一個sessionid,客戶端每次發送請求時,會把這個sessionid提交給伺服器(這是瀏覽器乾的事),伺服器根據這個sessionid找到相應的session,如果你用的jsp,jsp引擎(比如tomcat)會吧這個session作為一個實例變數放到jsp頁面里,你可以直接使用。如果是html文件,jsp引擎會直接發送給客戶端html文件的內容。
客戶端的js訪問cookie的方法只能訪問存儲在客戶端的cookie(使用js或session的cookie存儲的)。
一般來說,只有伺服器端的CGI程序(ASP、PHP、JSP)具有session會話功能,用來保存用戶在網站期間(會話)的活動數據信息,而對於數量眾多的靜態頁面(HTML)來說,只能使用客戶端的cookies來保存臨時活動數據,但對於cookies的操作是個很煩瑣的過程,遠沒有對於session操作那樣簡便。
為此,本文向讀者推薦一種在DHTML中的解決方案「Persistence技術」,使得在靜態頁面中也能使用session會話功能。
使用保持(Persistence)技術讓我們能夠在當前會話過程中保存一些數據對象到客戶端,它減少了對伺服器的訪問請求,充分發揮了客戶端計算機的數據處理能力,從而也整體提升了頁面顯示效率。
Microsoft Internet Explorer 5瀏覽器和以後的版本都支持使用狀態保持(Persistence)技術,它有以下幾種行為可供調用:
saveFavorite—當頁面被添加到收藏夾時保存頁面狀態和信息
saveHistory—在當前會話中保存頁面狀態和信息
saveSnapshot—當頁面被保存到硬碟時,保存頁面狀態和信息persists
page state and information directly in the page when users save the Web page to
their hard disk.
userData—在當前會話中用XML格式保存頁面狀態和信息 網頁製作
Persistence技術打破了以前使用使用cookies和session的傳統,它繼承了以前cookies的一些安全策略,同時也增加了存儲和管理數據的能力。我們的每個頁面有64KB的用戶數據存儲容量,對於每個站點總計有640KB的存儲上限。
Persistence技術存儲的數據格式符合XML標准,所以可以使用DOM技術中的getAttribute和setAttribute方法來存取數據。
下面是一個Persistence技術的典型應用,通過對Persistence存儲數據的分析,使得靜態頁面具有驗證功能。
實際判斷過程是這樣的:
有三個對象:遊客V、導航頁面A、內容頁面C
遊客V只能通過導航頁面A的鏈接才能看到內容頁面C;
如果遊客V是通過其它途徑來訪問內容頁面C(比如通過其它網站的超鏈接、直接在IE地址欄中輸入網址訪問等),內容頁面C將自動提示版權信息,顯示空白頁。
具體實現步驟:
一、在「導航頁面」中加入一個STYLE用來定義persistent類,同時加入存儲函數fnSave用來授權。
<STYLE>
.userData
</STYLE>
<SCRIPT language=Javascript>
網頁編程
function fnSave(){
oPersistDiv.setAttribute("bIsValid","true");
oPersistDiv.save("oXMLStore");
}
</SCRIPT>
二、在「導航頁面」的<body>和</body>區域中定義一個層用來標識Persistence對象
<DIV CLASS=userData ID="oPersistDiv"></DIV>
三、在「導航頁面」的超鏈接屬性中加入一條語句用來調用函數fnSave:
<a href='redhat2.htm' onmousedown="fnSave()">
接下來,為「內容頁面」加入驗證功能:
四、在「內容頁面」中加入一個STYLE用來定義persistent類,同時加入存儲函數fnLoad用來判斷合法性。
<STYLE>
.userData
</STYLE>
<SCRIPT>
var bPageValid=false;
function fnLoad(){
oPersistDiv.load("oXMLStore");
if((oPersistDiv.getAttribute("bIsValid"))&&(oPersistDiv.getAttribute("bIsValid")=="true")){
bPass=true;
網頁模板
}
else{
bPass=false;
}
oPersistDiv.setAttribute("bIsValid","false");
oPersistDiv.save("oXMLStore");
if(bPass==false){
var sError="來源不明,請您通過授權網站訪問我們.";
alert(sError);
location.href="about:blank";
}
}
</SCRIPT>
五、修改「內容頁面」的<body>區域如下:
<BODY onload="fnLoad()">
<DIV CLASS=userData ID="oPersistDiv"></DIV>
從以上範例可看出,通過persistence的使用,使得普通的靜態內容頁面具有了session功能,一般的不敏感信息完全可以通過session保存在客戶端。
另外,如果不明白persistence的使用,也可以這樣,你的首頁上有個form,用來提交用戶名和密碼。如果你把首頁換成html頁面,完全可以,不過要在其他地方接收用戶名和密碼(比如logon.jsp)。form的action設為logon.jsp。很簡單。使用form的action來轉移接受session的地方,首頁就可以用靜態了
Ⅵ WWW伺服器,DNS伺服器,DHCP伺服器的關系
WWW的核心——HTTP協議
眾所周知,Internet的基本協議是TCP/IP協議,目前廣泛採用的FTP、Archie Gopher等是建立在TCP/IP協議之上的應用層協議,不同的協議對應著不同的應用。<BR> WWW伺服器使用的主要協議是HTTP協議,即超文體傳輸協議。由於HTTP協議支持的服務不限於WWW,還可以是其它服務,因而HTTP協議允許用戶在統一的界面下,採用不同的協議訪問不同的服務,如FTP、Archie、SMTP、NNTP等。另外,HTTP協議還可用於名字伺服器和分布式對象管理。
DNS伺服器是一個Windows NT Server內置的DNS伺服器配置工具。我們依次選取「開始」/「程序」/「管理工具(公用)」/「 DNS 管理器」,就會出現「域名服務管理器」主窗口。這里要做的第一件事是添加DNS伺服器以進行配置。
打開「 DNS 」菜單,選擇「新建伺服器」,在對話框中輸入DNS伺服器的主機名或IP地址:199.168.1.1,然後單擊「確定」按鈕。操作完成,剛添加的伺服器就會出現在伺服器列表中。對於今後要保存任何的設置變化到伺服器的數據文件,則右鍵單擊伺服器列表中的伺服器主機名或IP地址,再單擊「更新伺服器數據文件」即可。
什麼是DNS伺服器?
簡單來說,DNS伺服器就是域名管理系統.
DNS(Domain Name System)是域名解析伺服器的意思.
DNS伺服器是干什麼的?
DNS伺服器在互聯網的作用是:把域名轉換成為網路可以識別的ip地址。首先,要知道互聯網的網站都是一台一台伺服器的形式存在的,但是我們怎麼去到要訪問的網站伺服器呢?這就需要給每台伺服器分配IP地址,互聯網上的網站無窮多,我們不可能記住每個網站的IP地址,這就產生了方便記憶的域名管理系統 DNS,他可以把我們輸入的好記的域名轉換為要訪問的伺服器的IP地址.
也就是為了方便我們瀏覽互聯網上的網站而不用去刻意記住每個主機的IP地址,DNS伺服器就應運而生,提供將域名解析為IP的服務,從而使我們上網的時候能夠用簡短而好記的域名來訪問互聯網上的靜態IP的主機。
如何使用DNS伺服器的域名解析服務?
您擁有自己的域名後,您需要DNS伺服器來解析您的域名。解析的作用就是告知您的訪問者,您的網站是處於在哪個IP的主機上。
DNS伺服器是由您的域名注冊公司來提供的,如果您在某公司注冊域名,就由該公司來提供,您不需要做任何設置,只需保持默認選項即可。
您可以隨時更改您域名的設置,比如可以讓它指到不同的IP。當您更改了域名的設置時,全世界的DNS伺服器也將會一一被通知到。這樣,全世界的互聯網用戶也將一一被引導到您新的主機。通知是有一個過程的,如果讓全世界的DNS伺服器都刷新並了解到您的改動,約需要24個小時。
2.1 HTTP協議簡介
HTTP是一個屬於應用層的面向對象的協議,由於其簡捷、快速的方式,適用於分布式超媒體信息系統。它於1990年提出,經過幾年的使用與發展,得到不斷地完善和擴展。目前在WWW中使用的是HTTP/1.0的第六版,HTTP/1.1的規范化工作正在進行之中,而且HTTP-NG(Next Generation of HTTP)的建議已經提出。
HTTP協議的主要特點可概括如下:
1.支持客戶/伺服器模式。
2.簡單快速:客戶向伺服器請求服務時,只需傳送請求方法和路徑。請求方法常用的有GET、HEAD、POST。每種方法規定了客戶與伺服器聯系的類型不同。
由於HTTP協議簡單,使得HTTP伺服器的程序規模小,因而通信速度很快。
3.靈活:HTTP允許傳輸任意類型的數據對象。正在傳輸的類型由Content-Type加以標記。
4.無連接:無連接的含義是限制每次連接只處理一個請求。伺服器處理完客戶的請求,並收到客戶的應答後,即斷開連接。採用這種方式可以節省傳輸時間。
5.無狀態:HTTP協議是無狀態協議。無狀態是指協議對於事務處理沒有記憶能力。缺少狀態意味著如果後續處理需要前面的信息,則它必須重傳,這樣可能導致每次連接傳送的數據量增大。另一方面,在伺服器不需要先前信息時它的應答就較快。
2.2 HTTP協議的幾個重要概念
1.連接(Connection):一個傳輸層的實際環流,它是建立在兩個相互通訊的應用程序之間。
2.消息(Message):HTTP通訊的基本單位,包括一個結構化的八元組序列並通過連接傳輸。
3.請求(Request):一個從客戶端到伺服器的請求信息包括應用於資源的方法、資源的標識符和協議的版本號
4.響應(Response):一個從伺服器返回的信息包括HTTP協議的版本號、請求的狀態(例如「成功」或「沒找到」)和文檔的MIME類型。
5.資源(Resource):由URI標識的網路數據對象或服務。
6.實體(Entity):數據資源或來自服務資源的回映的一種特殊表示方法,它可能被包圍在一個請求或響應信息中。一個實體包括實體頭信息和實體的本身內容。
7.客戶機(Client):一個為發送請求目的而建立連接的應用程序。
8.用戶代理(User agent):初始化一個請求的客戶機。它們是瀏覽器、編輯器或其它用戶工具。
9.伺服器(Server):一個接受連接並對請求返回信息的應用程序。
10.源伺服器(Origin server):是一個給定資源可以在其上駐留或被創建的伺服器。
11.代理(Proxy):一個中間程序,它可以充當一個伺服器,也可以充當一個客戶機,為其它客戶機建立請求。請求是通過可能的翻譯在內部或經過傳遞到其它的伺服器中。一個代理在發送請求信息之前,必須解釋並且如果可能重寫它。
代理經常作為通過防火牆的客戶機端的門戶,代理還可以作為一個幫助應用來通過協議處理沒有被用戶代理完成的請求。
12.網關(Gateway):一個作為其它伺服器中間媒介的伺服器。與代理不同的是,網關接受請求就好象對被請求的資源來說它就是源伺服器;發出請求的客戶機並沒有意識到它在同網關打交道。
網關經常作為通過防火牆的伺服器端的門戶,網關還可以作為一個協議翻譯器以便存取那些存儲在非HTTP系統中的資源。
13.通道(Tunnel):是作為兩個連接中繼的中介程序。一旦激活,通道便被認為不屬於HTTP通訊,盡管通道可能是被一個HTTP請求初始化的。當被中繼的連接兩端關閉時,通道便消失。當一個門戶(Portal)必須存在或中介(Intermediary)不能解釋中繼的通訊時通道被經常使用。
14.緩存(Cache):反應信息的局域存儲。
2.3 HTTP協議的運作方式
HTTP協議是基於請求/響應範式的。一個客戶機與伺服器建立連接後,發送一個請求給伺服器,請求方式的格式為,統一資源標識符、協議版本號,後邊是MIME信息包括請求修飾符、客戶機信息和可能的內容。伺服器接到請求後,給予相應的響應信息,其格式為一個狀態行包括信息的協議版本號、一個成功或錯誤的代碼,後邊是MIME信息包括伺服器信息、實體信息和可能的內容。
許多HTTP通訊是由一個用戶代理初始化的並且包括一個申請在源伺服器上資源的請求。最簡單的情況可能是在用戶代理(UA)和源伺服器(O)之間通過一個單獨的連接來完成(見圖2-1)。
圖2-1
當一個或多個中介出現在請求/響應鏈中時,情況就變得復雜一些。中介由三種:代理(Proxy)、網關(Gateway)和通道 (Tunnel)。一個代理根據URI的絕對格式來接受請求,重寫全部或部分消息,通過URI的標識把已格式化過的請求發送到伺服器。網關是一個接收代理,作為一些其它伺服器的上層,並且如果必須的話,可以把請求翻譯給下層的伺服器協議。一個通道作為不改變消息的兩個連接之間的中繼點。當通訊需要通過一個中介(例如:防火牆等)或者是中介不能識別消息的內容時,通道經常被使用。 圖2-2
上面的圖2-2表明了在用戶代理(UA)和源伺服器(O)之間有三個中介(A,B和C)。一個通過整個鏈的請求或響應消息必須經過四個連接段。這個區別是重要的,因為一些HTTP通訊選擇可能應用於最近的連接、沒有通道的鄰居,應用於鏈的終點或應用於沿鏈的所有連接。盡管圖2-2是線性的,每個參與者都可能從事多重的、並發的通訊。例如,B可能從許多客戶機接收請求而不通過A,並且/或者不通過C把請求送到A,在同時它還可能處理A的請求。
任何針對不作為通道的匯聚可能為處理請求啟用一個內部緩存。緩存的效果是請求/響應鏈被縮短,條件是沿鏈的參與者之一具有一個緩存的響應作用於那個請求。下圖說明結果鏈,其條件是針對一個未被UA或A加緩存的請求,B有一個經過C來自O的一個前期響應的緩存拷貝。
圖2-3
在Internet上,HTTP通訊通常發生在TCP/IP連接之上。預設埠是TCP 80,但其它的埠也是可用的。但這並不預示著HTTP協議在Internet或其它網路的其它協議之上才能完成。HTTP只預示著一個可靠的傳輸。
以上簡要介紹了HTTP協議的宏觀運作方式,下面介紹一下HTTP協議的內部操作過程。
首先,簡單介紹基於HTTP協議的客戶/伺服器模式的信息交換過程,如圖2-4所示,它分四個過程,建立連接、發送請求信息、發送響應信息、關閉連接。
圖2-4
在WWW中,「客戶」與「伺服器」是一個相對的概念,只存在於一個特定的連接期間,即在某個連接中的客戶在另一個連接中可能作為伺服器。WWW伺服器運行時,一直在TCP80埠(WWW的預設埠)監聽,等待連接的出現。
下面,討論HTTP協議下客戶/伺服器模式中信息交換的實現。 1.建立連接 連接的建立是通過申請套接字(Socket)實現的。客戶打開一個套接字並把它約束在一個埠上,如果成功,就相當於建立了一個虛擬文件。以後就可以在該虛擬文件上寫數據並通過網路向外傳送。
2.發送請求
打開一個連接後,客戶機把請求消息送到伺服器的停留埠上,完成提出請求動作。
HTTP/1.0 請求消息的格式為:
請求消息=請求行(通用信息|請求頭|實體頭) CRLF[實體內容]
請求 行=方法 請求URL HTTP版本號 CRLF
方 法=GET|HEAD|POST|擴展方法
U R L=協議名稱+宿主名+目錄與文件名
請求行中的方法描述指定資源中應該執行的動作,常用的方法有GET、HEAD和POST。不同的請求對象對應GET的結果是不同的,對應關系如下:
對象 GET的結果
文件 文件的內容
程序 該程序的執行結果
資料庫查詢 查詢結果
HEAD——要求伺服器查找某對象的元信息,而不是對象本身。
POST——從客戶機向伺服器傳送數據,在要求伺服器和CGI做進一步處理時會用到POST方法。POST主要用於發送HTML文本中FORM的內容,讓CGI程序處理。
一個請求的例子為:
GET http://networking.zju.e.cn/zju/index.htm HTTP/1.0
頭信息又稱為元信息,即信息的信息,利用元信息可以實現有條件的請求或應答 。
請求頭——告訴伺服器怎樣解釋本次請求,主要包括用戶可以接受的數據類型、壓縮方法和語言等。
實體頭——實體信息類型、長度、壓縮方法、最後一次修改時間、數據有效期等。
實體——請求或應答對象本身。
3.發送響應
伺服器在處理完客戶的請求之後,要向客戶機發送響應消息。
HTTP/1.0的響應消息格式如下:
響應消息=狀態行(通用信息頭|響應頭|實體頭) CRLF 〔實體內容〕
狀 態 行=HTTP版本號 狀態碼 原因敘述
狀態碼表示響應類型
1×× 保留
2×× 表示請求成功地接收
3×× 為完成請求客戶需進一步細化請求
4×× 客戶錯誤
5×× 伺服器錯誤
響應頭的信息包括:服務程序名,通知客戶請求的URL需要認證,請求的資源何時能使用。
4.關閉連接
客戶和伺服器雙方都可以通過關閉套接字來結束TCP/IP對話
參考資料:http://www.80back.cn/html/2/0804/5580.html
DHCP指的是由伺服器控制一段IP地址范圍,客戶機登錄伺服器時就可以自動獲得伺服器分配的IP地址和子網掩碼。首先,DHCP伺服器必須是一台安裝有 Windows 2000 Server/Advanced Server系統的計算機;其次,擔任DHCP伺服器的計算機需要安裝TCP/IP協議,並為其設置靜態IP地址、子網掩碼、默認網關等內容。默認情況下,DHCP作為Windows 2000 Server的一個服務組件不會被系統自動安裝,必須把它添加進來:
1. 依次點擊「開始→設置→控制面板→添加/刪除程序→添加/刪除Windows組件」,打開相應的對話框。
2. 用滑鼠左鍵點擊選中對話框的「組件」列表框中的「網路服務」一項,單擊[詳細信息]按鈕,出現帶有具體內容的對話框。
3. 在對話框「網路服務的子組件」列表框中勾選「動態主機配置協議(DHCP)」,單擊[確定]按鈕,根據屏幕提示放入Windows 2000安裝光碟,復制所需要的程序。
4. 重新啟動計算機後,在「開始→程序→管理工具」下就會出現「DHCP」一項,說明DHCP服務安裝成功。
DHCP伺服器的授權
出於對網路安全管理的考慮,並不是在Windows 2000 Server中安裝了DHCP功能後就能直接使用,還必須進行授權操作,未經授權操作的伺服器無法提供DHCP服務。對DHCP伺服器授權操作的過程如下:
1. 依次點擊「開始→程序→管理工具→DHCP」,打開DHCP控制台窗口。
2. 在控制台窗口中,用滑鼠左鍵點擊選中伺服器名,然後單擊右鍵,在快捷菜單中選中「授權」,此時需要幾分鍾的等待時間。注意:如果系統長時間沒有反應,可以按F5鍵或選擇菜單工具中的「操作」下的「刷新」進行屏幕刷新,或先關閉DHCP控制台,在伺服器名上用滑鼠右鍵點擊。如果快捷菜單中的「授權」已經變為 「撤消授權」,則表示對DHCP伺服器授權成功。此時,最明顯的標記是伺服器名前面紅色向上的箭頭變成了綠色向下的箭頭。這樣,這台被授權的DHCP伺服器就有分配IP的權利了。
添加IP地址范圍
當DHCP伺服器被授權後,還需要對它設置IP地址范圍。通過給DHCP伺服器設置IP地址范圍後,當DHCP客戶機在向DHCP伺服器申請 IP地址時,DHCP伺服器就會從所設置的IP地址范圍中選擇一個還沒有被使用的IP地址進行動態分配。添加IP地址范圍的操作如下:
1. 點擊「開始→程序→管理工具→DHCP」,打開DHCP控制台窗口。
2. 選中DHCP伺服器名,在伺服器名上點擊滑鼠右鍵,在出現的快捷菜單中選擇「新建作用域」,在出現的窗口中單擊[下一步]按鈕,在出現的對話框中輸入相關信息,單擊[下一步]按鈕
3. 在圖1所示的窗口中,根據自己網路的實際情況,對各項進行設置,然後單擊[下一步]按鈕,出現如圖2所示的窗口。
4. 在圖2所示的窗口中,輸入需要排除的IP地址范圍。由於校園網路中有很多網路設備需要指定靜態IP地址(即固定的IP地址),如伺服器、交換機、路由器等,此時必須把這些已經分配的IP地址從DHCP伺服器的IP地址范圍中排除,否則會引起IP地址的沖突,導致網路故障。
5. 單擊[下一步]按鈕,在出現的「租約期限」窗口中可以設置IP地址租期的時間值。一般情況下,如果校園網路中的IP地址比較緊張的時候,可以把租期設置短一些,而IP地址比較寬松時,可以把租期設置長一些。設置完後,單擊[下一步]按鈕,出現「配置DHCP選項」窗口。
6. 在「配置DHCP選項」窗口中,如果選擇「是,我想現在配置這些選項」,此時可以對DNS伺服器、默認網關、WINS伺服器地址等內容進行設置;如果選擇「否,我想稍後配置這些選項」,可以在需要這些功能時再進行配置。此處,我們選擇前者,單擊[下一步]按鈕。
7. 在出現的窗口中,常常輸入網路中路由器的IP地址(即默認網關的IP地址)或是NAT伺服器(網路地址轉換伺服器)的IP地址,如WinRoute、 SyGate等。這樣,客戶機從DHCP伺服器那裡得到的IP信息中就包含了默認網關的設定了,從而可以接入Internet。
8. 單擊[下一步]按鈕,在此對話框中設置有關客戶機DNS域的名稱,同時輸入DNS伺服器的名稱和IP地址。,然後單擊[添加]按鈕進行確認。單擊[下一步]按鈕,在出現的窗口中進行WINS伺服器的相關設置,設置完後單擊[下一步]按鈕。
9. 在出現的窗口中,選擇「是,我想現在激活此作用域」後,單擊[下一步]按鈕,在出現的窗口中單擊[完成]按鈕,設置結束。此時,就可以在DHCP管理器中看到我們剛剛建好的作用域。
注意:如果您的校園網路是以工作組的形式存在的,可以在第6步的「配置DHCP選項」窗口中選擇「否,我想稍後配置這些選項」,此時設置過程跳過第7、8步。如果您的校園網路是以域的形式存在的,建議您的網路配置順序為:活動目錄的建立→WINS的建立→DNS的建立→DHCP的建立,這樣可以減少很多麻煩。
DHCP服務的測試
經過上述設置,DHCP服務已經正式啟動,我們需要在客戶機上進行測試。只需把客戶機的IP地址選項設為「自動獲取IP地址」,隨後重新啟動客戶機。在客戶機的「運行」對話框中鍵入「Ipconfig/all」,即可看到客戶機分配到的動態IP地址。
Ⅶ 如何搭建一個中轉伺服器
可以使用iptables或者nginx進行連接搭建。
Linux下埠轉發一般都使用iptables來實現,使用iptables可以很容易將TCP和UDP埠從防火牆轉發到內部主機上。但是如果需要將流量從專用地址轉發到不在您當前網路上的機器上,可嘗試另一個應用層埠轉發程序Rinetd。Rinetd短小、高效,配置起來比iptables也簡單很多。
如果你要配http、https轉發,要配ssl證書,那nginx大概是最合適的了。不過要注意nginx本身有一些限制,比方說一次上傳的數據大小。之前我沒注意這點,在主站配了又配,最後發現中轉的伺服器沒配置,秀逗了。另外新版的nginx不僅可以轉發http,也支持tcp流轉發了。
數據中轉站中安裝有數據中轉應用伺服器,由計劃任務或者其他喚醒程序啟動。
運行時注意的三步如下:
1、開啟源伺服器網路連接,連接源伺服器,約定下次通訊的方式(可選),獲取數據。
2、關閉與源伺服器網路的連接,開啟目標伺服器網路連接,向目標伺服器寫入數據。
3、關閉與目標伺服器網路的連接,進入緘默模式,等待下一次被喚醒。
Ⅷ 內容分發網路的技術原理
CDN的基本原理為反向代理,反向代理(Reverse Proxy)方式是指以代理伺服器來接受internet上的連接請求,然後將請求轉發給內部網路上的伺服器,並將從伺服器上得到的結果返回給internet上請求連接的客戶端,此時代理伺服器對外就表現為一個節點伺服器。通過部署更多的反向代理伺服器,來達到實現多節點CDN的效果。
在描述CDN的實現原理,讓我們先看傳統的未加緩存服務的訪問過程,以便了解CDN緩存訪問方式與未加緩存訪問方式的差別:
用戶提交域名→瀏覽器對域名進行解析→得到目的主機的IP地址→根據IP地址訪問發出請求→得到請求數據並回復
由上可見,用戶訪問未使用CDN緩存網站的過程為:
1)、用戶向瀏覽器提供要訪問的域名;
2)、瀏覽器調用域名解析函數庫對域名進行解析,以得到此域名對應的IP地址;
3)、瀏覽器使用所得到的IP地址,向域名的服務主機發出數據訪問請求;
4)、瀏覽器根據域名主機返回的數據顯示網頁的內容。
通過以上四個步驟,瀏覽器完成從用戶處接收用戶要訪問的域名到從域名服務主機處獲取數據的整個過程。CDN網路是在用戶和伺服器之間增加Cache層,如何將用戶的請求引導到Cache上獲得源伺服器的數據,主要是通過接管DNS實現,下面讓我們看看訪問使用CDN緩存後的網站的過程:
通過上圖,我們可以了解到,使用了CDN緩存後的網站的訪問過程變為:
1)、用戶向瀏覽器提供要訪問的域名;
2)、瀏覽器調用域名解析庫對域名進行解析,由於CDN對域名解析過程進行了調整,所以解析函數庫一般得到的是該域名對應的CNAME記錄,為了得到實際IP地址,瀏覽器需要再次對獲得的CNAME域名進行解析以得到實際的IP地址;在此過程中,使用的全局負載均衡DNS解析,如根據地理位置信息解析對應的IP地址,使得用戶能就近訪問。
3)、此次解析得到CDN緩存伺服器的IP地址,瀏覽器在得到實際的IP地址以後,向緩存伺服器發出訪問請求;
4)、緩存伺服器根據瀏覽器提供的要訪問的域名,通過Cache內部專用DNS解析得到此域名的實際IP地址,再由緩存伺服器向此實際IP地址提交訪問請求;
5)、緩存伺服器從實際IP地址得得到內容以後,一方面在本地進行保存,以備以後使用,另一方面把獲取的數據返回給客戶端,完成數據服務過程;
6)、客戶端得到由緩存伺服器返回的數據以後顯示出來並完成整個瀏覽的數據請求過程。
通過以上的分析我們可以得到,為了實現既要對普通用戶透明(即加入緩存以後用戶客戶端無需進行任何設置,直接使用被加速網站原有的域名即可訪問,又要在為指定的網站提供加速服務的同時降低對ICP的影響,只要修改整個訪問過程中的域名解析部分,以實現透明的加速服務,下面是CDN網路實現的具體操作過程。
1)、作為ICP,只需要把域名解釋權交給CDN運營商,其他方面不需要進行任何的修改;操作時,ICP修改自己域名的解析記錄,一般用cname方式指向CDN網路Cache伺服器的地址。
2)、作為CDN運營商,首先需要為ICP的域名提供公開的解析,為了實現sortlist,一般是把ICP的域名解釋結果指向一個CNAME記錄;
3)、當需要進行sortlist時,CDN運營商可以利用DNS對CNAME指向的域名解析過程進行特殊處理,使DNS伺服器在接收到客戶端請求時可以根據客戶端的IP地址,返回相同域名的不同IP地址;
4)、由於從cname獲得的IP地址,並且帶有hostname信息,請求到達Cache之後,Cache必須知道源伺服器的IP地址,所以在CDN運營商內部維護一個內部DNS伺服器,用於解釋用戶所訪問的域名的真實IP地址;
5)、在維護內部DNS伺服器時,還需要維護一台授權伺服器,控制哪些域名可以進行緩存,而哪些又不進行緩存,以免發生開放代理的情況。
Ⅸ cdn伺服器是什麼
CDN,全稱內容分發網路(ContentDeliveryNetwork),可以簡單地將其理解成一個離你很近的、可以從上面獲取到完整的原始數據的伺服器,它會定期和擁有原始內容的伺服器進行同步,保證用戶可以從上面獲取到最新的內容。
內容分發網路,是用於承載網站的內容分發以及調度等功能的,能讓用戶訪問網站的時候,快速得到信息,也降低了網站載入緩慢的速率,能提高用戶的訪問率。因為cdn伺服器能解決大量用戶訪問的問題,所以常常用於搭建大型門戶網站、商城網站、視頻網站等等。
CDN伺服器優勢
1、訪問加速優勢
為用戶提供快速的訪問效果是CDN伺服器的重要優勢之一。解決了遠距離的訪問、不同網路帶寬線路訪問造成的網路延遲情況。
2、防禦網路攻擊
CDN伺服器有隱藏源伺服器IP的作用,展現給用戶的都是屬於CDN節點IP,網路攻擊的時候,一般會攻擊這些節點伺服器,但不會對源伺服器造成傷害。因此,無論多大的攻擊,源伺服器始終能保持正常的訪問。
3、降低源伺服器帶寬
CDN伺服器降低了源伺服器帶寬的使用量。基於網站數據都分發到CDN節點,因此,源伺服器帶寬只需滿足數據資料傳輸到CDN節點即可,不用選擇大帶寬供大量用戶訪問,降低了源伺服器的壓力。
Ⅹ http權威指南第三章
重點:
http報文是在http應用程序之間發送的數據塊。這些數據塊以一些文本形式的元信息(meta-information)開頭,這些信息報文描述了報文的內容及含義,後面跟著可選數據部分。這些報文在客戶端、伺服器和代理之間流動。術語 流入 流出 上游 下游 都是用來描述報文方向的。
http使用流入(inbound)和流出(outbound)來描述事務處理(transation)的方向。客戶端發向伺服器為流入,伺服器發向客戶端稱為流出。
http會像河水一樣流動。不管是請求報文還是響應報文,所有的報文都會向下游(downstream)流動。所有報文發送者都在接受者的上游(upstream)。
http報文是簡單的格式化數據塊。每條報文都包含三個部分:對報文描述的起始行(start line),包含屬性的首部(header)塊,以及可選的,包含數據主體(body)部分。
起始行和首部就是由行分隔的ascll文本。每行以回車換行符結束。主體是一個可選的數據塊。與起始行不同的是,主體可以包含文本或二進制數據,也可以為空。
所有的http報文可以分為兩類:請求報文(request message)和響應報文(response message)請求報文會向web伺服器請求一個動作。響應報文會將請求的結果返回給客戶端。
請求報文格式
<method><request-url><version>
<headers>
<entity-body>
響應報文格式
<version><status><reason-phrase>
<headers>
<entity-body>
所有的http報文都以一個起始行作為開始。請求報文的起始行說明了要做些什麼,響應報文起始行說明發生了什麼。
1.請求行
請求報文請求伺服器對資源進行一些操作。請求報文的起始行,或者稱為請求行,包含了一個方法和一個請求url,這個方法描述了伺服器應該執行的操作,url描述了要對那個資源執行這個方法。請求行還包含http版本,在http1.0以前不要求請求行包含http版本號。
2.響應行
響應報文承載了狀態信息和操作產生的所有結果數據,將其返回給客戶端。響應報文的起始行,或者稱為響應行,包含類響應報文的http版本。數字狀態碼,以及描述操作狀態的文本形式的原因短語。
3.方法
請求的起始行以方法作為開始,方法用來告知伺服器要做些什麼。
4.狀態碼
狀態碼用來告訴客戶端發生了什麼,狀態碼位於起始行的行中。
5.原因短語
響應起始行的最後一個組件,為狀態碼提供了一個文本解釋。http沒有規定原因短語以何種方式出現。
6版本號
版本號說明了應用程序支持的最高版本,但http1.0在解釋包含http1.1的響應時,會認為這個響應是個1.1響應。
版本號不會被當做分數處理,而是比較每個數字,http/2.22就比http/2.3高,因為22比3大。
1.首部分類
2.首部延續行
將長的首部分為多行可以提高可讀性,多出來的每一行至少要有一個空格或製表符
http報文的第三部分是可選的實體主體部分。實體的主體部分是http報文的負荷,就是http要傳輸的內容。
http/0.9也由請求和響應組成,但請求中只包含方法和請求url,響應中只包含實體,它沒有版本信息,沒有狀態碼或原因短語,也沒有首部。
不是每個伺服器都實現了所有這些方法,如果一台伺服器要與http1.1兼容,只要實現get、head方法就可以了。
http定義了一組被稱為安全方法的方法。get和head都被認為是安全的方法,這就意味著使用get或head方法的http請求不會產生什麼動作,安全方法不一定什麼都不執行的(這將由web開發者決定)
get是最常用的方法。通常用於請求伺服器發送某個資源。
head與get方法很相似,但伺服器只返回首部。不會返回實體的主體部分。這就允許客戶端在未獲得實際資源的情況下對資源的首部進行檢查。
與get從伺服器讀取文檔相反,普通方法會向伺服器寫入文檔。有些發布系統允許用戶創建web頁面,並用普通直接安裝到伺服器上
put方法的語義就是讓伺服器用請求的主體部分來創建一個由所請求的url命名的新文檔,或者如果url已存在,就用主體來替代它
post起初是用來向伺服器輸入數據的。實際上用它來支持html的表單。
客戶端發起一個請求這個請求可能要穿過防火牆、代理、網關或其它一些程序。每個中間結點都有可能修改原始http請求。trace方法允許客戶端在最終請求發送給伺服器時看看它變成什麼樣子。
trace請求會在目的伺服器發起一個回環診斷。行程最後一站的伺服器會彈回一條trace響應,並在響應主體中攜帶它收到的原始請求報文。
options方法請求web伺服器告知其支持的功能。可以查詢伺服器通常支持那些方法。
delete就是請求伺服器刪除所請求的資源。但是客戶端應用無法保證刪除一定會被執行。用為http協議允許伺服器在不通知客戶端的情況下撤銷請求。
http被設計成欄位可擴展的,這樣新特性就不會使老軟體失效了。伺服器會為他所管理的資源實現http服務,這些方法為開發者提供了擴展http服務能力的手段。
並不是所有的方法都是正式規范中定義的,如果你定義了一個擴展方法,很可能大部分http應用程序都無法理解。同樣你的http應用程序也有可能遇到一些其它應用程序正在使用,而並不理解的方法。
多而雜,不抄了
有些首部提供了與報文相關的基本信息,被稱為通用首部。
通用信息性首部
通用緩存首部
http1.0引入了第一個允許http應用緩存對象本地副本的首部,這樣就不用總是從源伺服器獲取了。
請求首部是只在請求報文中有意義的首部。
請求的信息性首部
1.accept首部
accept將客戶端的喜好和能力告知伺服器的方式
2.條件請求首部
客戶端為請求添加限制。
3.安全請求首部
http本身支持一種簡單的機制,可以對請求進行質詢/響應認證。這種機制要求,在獲取資源之前,先對自身進行認證,這樣使事務稍微安全一些。
安全請求首部
4.請求代理首部
響應報文有自己的響應首部集。響應首部為客戶端提供了一些額外的信息。
1.協商首部
如果資源有多種便是方法,http1.1可以為客戶端和伺服器提供對資源進行協商的能力
2.安全響應首部
信息性首部
1.內容首部
2.實體緩存首部
通用的緩存首部說明了如何或什麼時候進行緩存。實體的緩存提供了與被緩存實體有關的信息。
實體緩存