源服务器是如何获取数据的
Ⅰ 认识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.实体缓存首部
通用的缓存首部说明了如何或什么时候进行缓存。实体的缓存提供了与被缓存实体有关的信息。
实体缓存