Web服务详解

一、域

1、域的分类

域名只是逻辑概念,并不代表计算机所在的物理地点。据2006年12月统计,现在顶级域名TLD(Top Level Domain)已有265个,分为三大类:

国家顶级域名nTLD:采用ISO3166的规定。如:cn代表中国,us代表美国,uk代表英国,等等。国家域名又常记为ccTLD(cc表示国家代码contry-code)。

通用顶级域名gTLD:最常见的通用顶级域名有7个,即:com(公司企业),net(网络服务机构),org(非营利组织),int(国际组织),gov(美国的政府部门),mil(美国的军事部门)。

基础结构域名(infrastructure domain):这种顶级域名只有一个,即arpa,用于反向域名解析,因此称为反向域名

2、域名服务器划分的类型

根域名服务器:最高层次的域名服务器,也是最重要的域名服务器。所有的根域名服务器都知道所有的顶级域名服务器的域名和IP地址。不管是哪一个本地域名服务器,若要对因特网上任何一个域名进行解析,只要自己无法解析,就首先求助根域名服务器。所以根域名服务器是最重要的域名服务器。假定所有的根域名服务器都瘫痪了,那么整个DNS系统就无法工作。需要注意的是,在很多情况下,根域名服务器并不直接把待查询的域名直接解析出IP地址,而是告诉本地域名服务器下一步应当找哪一个顶级域名服务器进行查询

顶级域名服务器:负责管理在该顶级域名服务器注册的二级域名。

权限域名服务器:负责一个“区”的域名服务器。

本地域名服务器:本地服务器不属于下图的域名服务器的层次结构,但是它对域名系统非常重要。当一个主机发出DNS查询请求时,这个查询请求报文就发送给本地域名服务器。

3、DNS 数据库中包含的资源记录 (RR)

A (host):即是A记录,也称为主机记录,是DNS名称到IP地址的映射,用于正向解析。

CNAME:CNAME记录,也是别名记录,用于定义A记录的别名

MX (mail exchange): 邮件交换器记录,用于告知邮件服务器进程将邮件发送到指定的另一台邮件服务器。(该服务器知道如何将邮件传送到最终目的地)。

PTR:是IP地址到DNS名称的映射,用于反向解析。

SOA:用于一个区域的开始,SOA记录后的所有信息均是用于控制这个区域的,每个区域数据库文件都必须包谷一个SOA记录,并且必须是其中的第一个资源记录,用以标识DNS服务器管理的起始位置,SOA说明能解析这个区域的dns服务器中哪个是主服务器。

4、DNS解析原理流程

假定想访问www.baidu.com。下面是的几个查询步骤:

  1. 主机先查询本地DNS缓存及hosts文件是否有域名对应IP地址,,如果有,就先调用这个IP地址映射,完成域名解析。
  2. 如果hosts与本地DNS解析器缓存都没有相应的网址映射关系,首先会找TCP/ip参数中设置的首选DNS服务器,在此我们叫它本地DNS服务器,此服务器收到查询时,如果要查询的域名,包含在本地配置区域资源中,则返回解析结果给客户机,完成域名解析,此解析具有权威性;如果要查询的域名,不由本地DNS服务器区域解析,但该服务器已缓存了此网址映射关系,则调用这个IP地址映射,完成域名解析,此解析不具有权威性。
  3. 如果本地DNS服务器本地区域文件与缓存解析都失效,则根据本地DNS服务器的设置(是否设置转发器)进行查询,如果未用转发模式,本地DNS就把请求发至13台根DNS,根DNS服务器收到请求后会判断这个域名(.com)是谁来授权管理,并会返回一个负责.com域名解析的顶级域名服务器的一个IP。
  4. 这台负责.com域的服务器收到请求后,如果自己无法解析,它就会找一个负责.baidu.com域名解析的权限DNS服务器地址给本地DNS服务器。
  5. 本地域名服务器然后向权限域名服务器dns.baidu.com进行查询。权限域名服务器dns.baidu.com告诉本地域名服务器所查询的域名的IP地址。本地域名服务器最后把查询结果告诉本地主机。完成访问过程。

从客户端到本地DNS服务器是属于递归查询,而DNS服务器之间就是的交互查询就是迭代查询。 

二、用户访问网站基本流程

访问网站流程: 

  1. 当用户在浏览器中输入网址后,根据上面的DNS解析原理获取网站的IP地址;
  2. 然后本地主机通过IP地址和端口与服务器端建立一个socket连接,(一般默认端口是80);
  3. 请求连接成功建立后,开始向web服务器发送请求获取文件,这个请求一般是GET或POST命令;
  4. 应答 web服务器收到这个请求,进行处理。从它的文档空间中搜索该文件,如果找到该文件,Web服务器把该文件内容传送给相应的Web浏览器;
  5. 当应答结束后,Web浏览器与Web服务器必须断开;

三、HTTP协议

1、HTTP协议简介

HTTP是Hyper Text Transfer Protocol(超文本传输协议)的缩写,它是互联网中最常用的一种网络协议,HTTP的重要应用就是WWW服务,HTTP协议的WWW服务应用的默认服务端口为80,信息是明文传输,HTTPS 则是具有安全性的ssl加密传输协议

WWW是环球信息网的缩写,(亦作“Web”、“WWW”、“W3”,英文全称为“World Wide Web”),中文名字为“万维网”,"环球网"等,常简称为Web。WWW可以让Web客户端(常用浏览器)访问浏览Web服务器上的页面。

2、HTTP协议版本

1. HTTP/1.0介绍

HTTP/1.0介绍是第一个得到广泛使用的HTTP版本。HTTP/1.0在HTTP/0.9的基础上增加了HTTP请求头、支持更多的请求方法,以及对多媒体对象的处理。HTTP/1.0使得包含生动图片的Web页面和交互式表格成为可能,这些页面和表格促使互联网为人们广泛得接收。HTTP/1.0规定浏览器与服务器只能保持短暂的连接,浏览器的每次请求都需要与服务端建立一个TCP连接,服务器完成请求处理后立即断开TCP连接,服务器不跟踪每个客户也不记录过去的请求。

2. HTTP/1.1介绍

HTTP/1.1重点是修复HTTP设计中的缺陷,从可扩展性,缓存处理,带宽优化,持久连接,HOST头,错误通知,消息传递,内容协商几个方面做了相关改进。HTTP是当前互联网主流的HTTP版本在连接方面,HTTP1.1支持持久连接,在一个TCP连接上可以传送多个HTTP请求和响应,减少了建立连接和关闭连接的消耗和有延迟。

在请求头方面,HTTP1.1增加更多的请求头和响应头信息,来增强HTTP功能。这使得WeB浏览器可以使用主机头名来明确表示要访问那个WEB站点,这样就可以使用WEB服务器在同一个IP地址和端口号上配置多个虚拟WEB站点。

HTTP1.1的持续连接,也需要增加新的请求头来帮助实现,例如,Connection请求头的值为Keep-alive时,客户端通知服务器返回本次请求结果后保持连接;Connection请求头的值为close时,客户端通知服务器返回本次请求结果后关闭连接;HTTP1.1还提供了与身份认证,状态管理和Cache缓存机制相关的请求头和响应头。

3. HTTP/1.1 与 HTTP/1.0 区别

有以下几个方面区别:

1. 可扩展性;

2. 缓存;

3. 带宽优化;

4. 长连接;

5. 消息传递;

6. Host头域;

7. 错误提示;

8. 内容协商

1)可扩展性

可扩展性的一个重要原则:如果HTTP的某个实现接收到了自身未定义的头域,将自动忽略它。

Ø  在消息中增加版本号,用于兼容性判断。注意,版本号只能用来判断逐段(hop-by-hop)的兼容性,而无法判断端到端(end-to-end)的兼容性。
例如,一台HTTP/1.1的源服务器从使用HTTP/1.1的Proxy那儿接收到一条转发的消息,实际上源服务器并不知道终端客户使用的是HTTP/1.0还是HTTP/1.1。因此,HTTP/1.1定义Via头域,用来记录消息转发的路径,它记录了整个路径上所有发送方使用的版本号。

Ø  HTTP/1.1增加了OPTIONS方法,它允许客户端获取一个服务器支持的方法列表。

Ø  为了与未来的协议规范兼容,HTTP/1.1在请求消息中包含了Upgrade头域,通过该头域,客户端可以让服务器知道它能够支持的其它备用通信协议,服务器可以据此进行协议切换,使用备用协议与客户端进行通信。

2)缓存

在HTTP/1.0中,使用Expire头域来判断资源的fresh或stale,并使用条件请求(conditional request)来判断资源是否仍有效。例如,cache服务器通过If-Modified-Since头域向服务器验证资源的Last-Modefied头域是否有更新,源服务器可能返回304(Not Modified),则表明该对象仍有效;也可能返回200(OK)替换请求的Cache对象。

此外,HTTP/1.0中还定义了Pragma:no-cache头域,客户端使用该头域说明请求资源不能从cache中获取,而必须回源获取。

HTTP/1.1在1.0的基础上加入了一些cache的新特性,当缓存对象的Age超过Expire时变为stale对象,cache不需要直接抛弃stale对象,而是与源服务器进行重新激活(revalidation)。

HTTP/1.0中,If-Modified-Since头域使用的是绝对时间戳,精确到秒,但使用绝对时间会带来不同机器上的时钟同步问题。而HTTP/1.1中引入了一个ETag头域用于重激活机制,它的值entity tag可以用来唯一的描述一个资源。请求消息中可以使用If-None-Match头域来匹配资源的entitytag是否有变化。

为了使caching机制更加灵活,HTTP/1.1增加了Cache-Control头域(请求消息和响应消息都可使用),它支持一个可扩展的指令子集:例如max-age指令支持相对时间戳;private和no-store指令禁止对象被缓存;no-transform阻止Proxy进行任何改变响应的行为。

Cache使用关键字索引在磁盘中缓存的对象,在HTTP/1.0中使用资源的URL作为关键字。但可能存在不同的资源基于同一个URL的情况,要区别它们还需要客户端提供更多的信息,如Accept-Language和Accept-Charset头域。为了支持这种内容协商机制(content negotiation mechanism),HTTP/1.1在响应消息中引入了Vary头域,该头域列出了请求消息中需要包含哪些头域用于内容协商。

3)带宽优化

HTTP/1.0中,存在一些浪费带宽的现象,例如客户端只是需要某个对象的一部分,而服务器却将整个对象送过来了。例如,客户端只需要显示一个文档的部分内容,又比如下载大文件时需要支持断点续传功能,而不是在发生断连后不得不重新下载完整的包。

HTTP/1.1中在请求消息中引入了range头域,它允许只请求资源的某个部分。在响应消息中Content-Range头域声明了返回的这部分对象的偏移值和长度。如果服务器相应地返回了对象所请求范围的内容,则响应码为206(Partial Content),它可以防止Cache将响应误以为是完整的一个对象。

另外一种情况是请求消息中如果包含比较大的实体内容,但不确定服务器是否能够接收该请求(如是否有权限),此时若贸然发出带实体的请求,如果被拒绝也会浪费带宽。

HTTP/1.1加入了一个新的状态码100(Continue)。客户端事先发送一个只带头域的请求,如果服务器因为权限拒绝了请求,就回送响应码401(Unauthorized);如果服务器接收此请求就回送响应码100,客户端就可以继续发送带实体的完整请求了。注意,HTTP/1.0的客户端不支持100响应码。但可以让客户端在请求消息中加入Expect头域,并将它的值设置为100-continue。

节省带宽资源的一个非常有效的做法就是压缩要传送的数据。Content-Encoding是对消息进行端到端(end-to-end)的编码,它可能是资源在服务器上保存的固有格式(如jpeg图片格式);在请求消息中加入Accept-Encoding头域,它可以告诉服务器客户端能够解码的编码方式。

而Transfer-Encoding是逐段式(hop-by-hop)的编码,如Chunked编码。在请求消息中加入TE头域用来告诉服务器能够接收的transfer-coding方式,

4)长连接

HTTP 1.0规定浏览器与服务器只保持短暂的连接,浏览器的每次请求都需要与服务器建立一个TCP连接,服务器完成请求处理后立即断开TCP连接,服务器不跟踪每个客户也不记录过去的请求。此外,由于大多数网页的流量都比较小,一次TCP连接很少能通过slow-start区,不利于提高带宽利用率。

HTTP 1.1支持长连接(PersistentConnection)和请求的流水线(Pipelining)处理,在一个TCP连接上可以传送多个HTTP请求和响应,减少了建立和关闭连接的消耗和延迟。例如:一个包含有许多图像的网页文件的多个请求和应答可以在一个连接中传输,但每个单独的网页文件的请求和应答仍然需要使用各自的连接。

HTTP 1.1还允许客户端不用等待上一次请求结果返回,就可以发出下一次请求,但服务器端必须按照接收到客户端请求的先后顺序依次回送响应结果,以保证客户端能够区分出每次请求的响应内容,这样也显著地减少了整个下载过程所需要的时间。

在HTTP/1.0中,要建立长连接,可以在请求消息中包含Connection: Keep-Alive头域,如果服务器愿意维持这条连接,在响应消息中也会包含一个Connection: Keep-Alive的头域。同时,可以加入一些指令描述该长连接的属性,如max,timeout等。

事实上,Connection头域可以携带三种不同类型的符号:

1、一个包含若干个头域名的列表,声明仅限于一次hop连接的头域信息;

2、任意值,本次连接的非标准选项,如Keep-Alive等;

3、close值,表示消息传送完成之后关闭长连接;

客户端和源服务器之间的消息传递可能要经过很多中间节点的转发,这是一种逐跳传递(hop-by-hop)。HTTP/1.1相应地引入了hop-by-hop头域,这种头域仅作用于一次hop,而非整个传递路径。每一个中间节点(如Proxy,Gateway)接收到的消息中如果包含Connection头域,会查找Connection头域中的一个头域名列表,并在将消息转发给下一个节点之前先删除消息中这些头域。

通常,HTTP/1.0的Proxy不支持Connection头域,为了不让它们转发可能误导接收者的头域,协议规定所有出现在Connection头域中的头域名都将被忽略。

5)消息传递

HTTP消息中可以包含任意长度的实体,通常它们使用Content-Length来给出消息结束标志。但是,对于很多动态产生的响应,只能通过缓冲完整的消息来判断消息的大小,但这样做会加大延迟。如果不使用长连接,还可以通过连接关闭的信号来判定一个消息的结束。

HTTP/1.1中引入了Chunkedtransfer-coding来解决上面这个问题,发送方将消息分割成若干个任意大小的数据块,每个数据块在发送时都会附上块的长度,最后用一个零长度的块作为消息结束的标志。这种方法允许发送方只缓冲消息的一个片段,避免缓冲整个消息带来的过载。

在HTTP/1.0中,有一个Content-MD5的头域,要计算这个头域需要发送方缓冲完整个消息后才能进行。而HTTP/1.1中,采用chunked分块传递的消息在最后一个块(零长度)结束之后会再传递一个拖尾(trailer),它包含一个或多个头域,这些头域是发送方在传递完所有块之后再计算出值的。发送方会在消息中包含一个Trailer头域告诉接收方这个拖尾的存在。

6)Host头域

在HTTP1.0中认为每台服务器都绑定一个唯一的IP地址,因此,请求消息中的URL并没有传递主机名(hostname)。但随着虚拟主机技术的发展,在一台物理服务器上可以存在多个虚拟主机(Multi-homed Web Servers),并且它们共享一个IP地址。

HTTP1.1的请求消息和响应消息都应支持Host头域,且请求消息中如果没有Host头域会报告一个错误(400 Bad Request)。此外,服务器应该接受以绝对路径标记的资源请求。

7)错误提示

HTTP/1.0中只定义了16个状态响应码,对错误或警告的提示不够具体。HTTP/1.1引入了一个Warning头域,增加对错误或警告信息的描述。

此外,在HTTP/1.1中新增了24个状态响应码,如409(Conflict)表示请求的资源与资源的当前状态发生冲突;410(Gone)表示服务器上的某个资源被永久性的删除。

8)内容协商

为了满足互联网使用不同母语和字符集的用户,一些网络资源有不同的语言版本(如中文版、英文版)。HTTP/1.0定义了内容协商(contentnegotiation)的概念,也就是说客户端可以告诉服务器自己可以接收以何种语言(或字符集)表示的资源。例如如果服务器不能明确客户端需要何种类型的资源,会返回300(Multiple Choices),并包含一个列表,用来声明该资源的不同可用版本,然后客户端在请求消息中包含Accept-Language和Accept-Charset头域指定需要的版本。

就像有些人会说几门外语,但每种外语的流利程度并不相同。类似地,网络资源也可以有不同的表达形式,比如有母语版和各种翻译版本。HTTP引入了一个品质因子(quality values)的概念来表示不同版本的可用性,它的取值从0.0到1.0。例如一个母语是英语的人也能讲法语、甚至还学了点丹麦语,那么他的浏览器可用作如下配置:Accept-Language: en, fr;q=0.5, da;q=0.1。这时,服务器会优先选取品质因子高的值对应的资源版本作为响应。

3、HTTP请求方法

GET:GET可以说是最常见的了,它本质就是发送一个请求来取得服务器上的某一资源。资源通过一组HTTP头和呈现数据(如HTML文本,或者图片或者视频等)返回给客户端。GET请求中,永远不会包含呈现数据

HEAD:HEAD和GET本质是一样的,区别在于HEAD不含有呈现数据,而仅仅是HTTP头信息。有的人可能觉得这个方法没什么用,其实不是这样的。想象一个业务情景:欲判断某个资源是否存在,我们通常使用GET,但这里用HEAD则意义更加明确。

PUT:这个方法比较少见。HTML表单也不支持这个。本质上来讲, PUT和POST极为相似,都是向服务器发送数据,但它们之间有一个重要区别,PUT通常指定了资源的存放位置,而POST则没有,POST的数据存放位置由服务器自己决定。举个例子:如一个用于提交博文的URL,/addBlog。如果用PUT,则提交的URL会是像这样的”/addBlog/abc123”,其中abc123就是这个博文的地址。而如果用POST,则这个地址会在提交后由服务器告知客户端。目前大部分博客都是这样的。显然,PUT和POST用途是不一样的。具体用哪个还取决于当前的业务场景。

DELETE:删除某一个资源。基本上这个也很少见,不过还是有一些地方比如amazon的S3云服务里面就用的这个方法来删除资源。

POST:向服务器提交数据。这个方法用途广泛,几乎目前所有的提交操作都是靠这个完成。

OPTIONS:这个方法很有趣,但极少使用。它用于获取当前URL所支持的方法。若请求成功,则它会在HTTP头中包含一个名为“Allow”的头,值是所支持的方法,如“GET, POST”。

4、HTTP状态码

HTTP状态码(HTTP Status Code)是用以表示网页服务器HTTP响应状态的3位数字代码。所有状态码的第一个数字代表了响应的五种状态之一:

1xx:消息。代表请求已被接受,需要继续处理。

2xx:成功。这一类型的状态码,代表请求已成功被服务器接收、理解、并接受。

3xx:重定向。这类状态码代表需要客户端采取进一步的操作才能完成请求。通常,这些状态码用来重定向,后续的请求地址(重定向目标)在本次响应的 Location 域中指明。

4xx:请求错误。这类的状态码代表了客户端看起来可能发生了错误,妨碍了服务器的处理。除非响应的是一个 HEAD 请求,否则服务器就应该返回一个解释当前错误状况的实体,以及这是临时的还是永久性的状况。这些状态码适用于任何请求方法。浏览器应当向用户显示任何包含在此类错误响应中的实体内容。

5xx:服务器错误。这类状态码代表了服务器在处理请求的过程中有错误或者异常状态发生,也有可能是服务器意识到以当前的软硬件资源无法完成对请求的处理。除非这是一个HEAD 请求,否则服务器应当包含一个解释当前错误状态以及这个状况是临时的还是永久的解释信息实体。浏览器应当向用户展示任何在当前响应中被包含的实体。

1. HTTP状态码详解

1)1xx-信息提示

这些状态代码表示临时的响应。客户端在收到常规响应之前,应准备接收一个或多个1xx响应。

  • 100-继续。
  • 101-切换协议。

2)2xx-成功

这类状态代码表明服务器成功地接受了客户端请求。

  • 200-确定。客户端请求已成功。
  • 201-已创建。
  • 202-已接受。
  • 203-非权威性信息。
  • 204-无内容。
  • 205-重置内容。
  • 206-部分内容。

3)3xx-重定向

客户端浏览器必须采取更多操作来实现请求。例如,浏览器可能不得不请求服务器上的不同的页面,或通过代理服务器重复该请求。

  • 301-对象已永久移走,即永久重定向。
  • 302-对象已临时移动。
  • 304-未修改。
  • 307-临时重定向。

4)4xx-客户端错误

发生错误,客户端似乎有问题。例如,客户端请求不存在的页面,客户端未提供有效的身份验证信息。400-错误的请求。

① 401-访问被拒绝

IIS定义了许多不同的401错误,它们指明更为具体的错误原因。这些具体的错误代码在浏览器中显示,但不在IIS日志中显示:

401.1 - 未经授权:访问由于凭据无效被拒绝。

401.2-服务器配置导致登录失败。

401.3-由于ACL对资源的限制而未获得授权。

401.4-筛选器授权失败。

401.5-ISAPI/CGI应用程序授权失败。

401.7–访问被Web服务器上的URL授权策略拒绝。这个错误代码为IIS6.0所专用。

② 403-禁止访问

IIS定义了许多不同的403错误,它们指明更为具体的错误原因:

403.1-执行访问被禁止。

403.2-读访问被禁止。

403.3-写访问被禁止。

403.4-要求SSL。

403.5-要求SSL128。

403.6-IP地址被拒绝。

403.7-要求客户端证书。

403.8-站点访问被拒绝。

403.9-用户数过多。

403.10-配置无效。

403.11-密码更改。

403.12-拒绝访问映射表。

403.13-客户端证书被吊销。

403.14-拒绝目录列表。

403.15-超出客户端访问许可。

403.16-客户端证书不受信任或无效。

403.17-客户端证书已过期或尚未生效。

403.18-在当前的应用程序池中不能执行所请求的URL。这个错误代码为IIS6.0所专用。

403.19-不能为这个应用程序池中的客户端执行CGI。这个错误代码为IIS6.0所专用。

403.20-Passport登录失败。这个错误代码为IIS6.0所专用。

③ 404-未找到

404.0-(无)–没有找到文件或目录。

404.1-无法在所请求的端口上访问Web站点。

404.2-Web服务扩展锁定策略阻止本请求。

404.3-MIME映射策略阻止本请求。

405-用来访问本页面的HTTP谓词不被允许(方法不被允许)

406-客户端浏览器不接受所请求页面的MIME类型。

407-要求进行代理身份验证。

412-前提条件失败。

413–请求实体太大。

414-请求URI太长。

415–不支持的媒体类型。

416–所请求的范围无法满足。

417–执行失败。

423–锁定的错误。

5xx-服务器错误

服务器由于遇到错误而不能完成该请求。

① 500-内部服务器错误

500.12-应用程序正忙于在Web服务器上重新启动。

500.13-Web服务器太忙。

500.15-不允许直接请求Global.asa。

500.16–UNC授权凭据不正确。这个错误代码为IIS6.0所专用。

500.18–URL授权存储不能打开。这个错误代码为IIS6.0所专用。

500.100-内部ASP错误。

② 501-页眉值指定了未实现的配置

③ 502-Web服务器用作网关或代理服务器时收到了无效响应

502.1-CGI应用程序超时。

502.2-CGI应用程序出错。

④ 503-服务不可用

这个错误代码为IIS6.0所专用。

⑤ 504-网关超时

⑥ 505-HTTP版本不受支持

2.  生产环境常见的HTTP状态码列表

200 - OK,服务器成功返回网页。

- Standard response for successful HTTP requests.

301 - Moved Permanently(永久跳转),请求的网页已永久跳转到新位置。

- This and all future requests should be directed to the given.

403 - Forbidden(禁止访问),服务器拒绝请求。

- forbidden request (matches a deny filter) => HTTP 403
- The request was a legal request, but the server is refusing to respond to it.

404 - Not Found,服务器找不到请求的页面。

- The requested resource could not be found but may be available again in the future.

500 - Internal Server Error(内部服务器错误)。

- internal error in haproxy => HTTP 500
- A generic error message, given when no more specific message is suitable.

502 - Bad Gateway(坏的网关),一般是网关服务器请求后端服务时,后端服务没有按照http协议正确返回结果。一般为代理服务器下面的节点出现问题导致。

- the server returned an invalid or incomplete response => HTTP 502
- The server was acting as a gateway or proxy and received an invalid response from the upstream server.

503 - Service Unavailable(服务当前不可用),可能因为超载或停机维护。

- no server was available to handle the request => HTTP 503
- The server is currently unavailable (because it is overloaded or down for maintenance).

504 - Gateway Timeout(网关超时),一般是网关服务器请求后端服务时,后端服务没有在特定的时间内完成服务。一般是服务器过载超时。

- the server failed to reply in time => HTTP 504
- The server was acting as a gateway or proxy and did not receive a timely response from the upstream server.

可以通过curl命令附带相关参数查看,例如:

curl -I -s -w %{http_code} -o /dev.null www.buidu.com

3. 常见 Web 错误

HTTP 错误 400  

400 请求出错。  

由于语法格式有误,服务器无法理解此请求。不作修改,客户程序就无法重复此请求。  

HTTP 错误 401  

  • 401.1 未授权:登录失败。  

此错误表明传输给服务器的证书与登录服务器所需的证书不匹配。  

请与 Web 服务器的管理员联系,以确认您是否具有访问所请求资源的权限。

  • 401.2 未授权:服务器的配置导致登录失败。  

此错误表明传输给服务器的证书与登录服务器所需的证书不匹配。此错误通常由未发送正确的 WWW 验证表头字段所致。  

请与 Web 服务器的管理员联系,以确认您是否具有访问所请求资源的权限。

  • 401.3 未授权:由于资源中的 ACL 而未授权。  

此错误表明客户所传输的证书没有对服务器中特定资源的访问权限。此资源可能是客户机中的地址行所列出的网页或文件,也可能是处理客户机中的地址行所列出的文件所需服务器上的其他文件。  

请记录试图访问的完整地址,并与 Web 服务器的管理员联系以确认您是否具有访问所请求资源的权限。  

  • 401.4 未授权:授权服务被筛选程序拒绝。  

此错误表明 Web 服务器已经安装了筛选程序,用以验证连接到服务器的用户。此筛选程序拒绝连接到此服务器的真品证书的访问。  

请记录试图访问的完整地址,并与 Web 服务器的管理员联系以确认您是否具有访问所请求资源的权限。  

  • 401.5 未授权:ISAPI/CGI 应用程序的授权失败。  

此错误表明试图使用的 Web服务器中的地址已经安装了 ISAPI 或 CGI程序,在继续之前用以验证用户的证书。此程序拒绝用来连接到服务器的真品证书的访问。  

请记录试图访问的完整地址,并与 Web服务器的管理员联系以确认您是否具有访问所请求资源的权限  

HTTP 错误 403  

  • 403.1 禁止:禁止执行访问。

如果从并不允许执行程序的目录中执行 CGI、ISAPI或其他执行程序就可能引起此错误。  

  • 403.2 禁止:禁止读取访问。  

如果没有可用的默认网页或未启用此目录的目录浏览,或者试图显示驻留在只标记为执行或脚本权限的目录中的HTML 页时就会导致此错误。  

  • 403.3 禁止:禁止写访问。  

如果试图上载或修改不允许写访问的目录中的文件,就会导致此问题。  

  • 403.4 禁止:需要 SSL。  

此错误表明试图访问的网页受安全套接字层(SSL)的保护。要查看,必须在试图访问的地址前输入https:// 以启用 SSL。  

  • 403.5 禁止:需要 SSL 128。  

此错误消息表明您试图访问的资源受 128位的安全套接字层(SSL)保护。要查看此资源,需要有支持此SSL 层的浏览器。  

请确认浏览器是否支持 128 位 SSL安全性。如果支持,就与 Web服务器的管理员联系,并报告问题。  

  • 403.6 禁止:拒绝 IP 地址。  

如果服务器含有不允许访问此站点的 IP地址列表,并且您正使用的 IP地址在此列表中,就会导致此问题。  

  • 403.7 禁止:需要用户证书。  

当试图访问的资源要求浏览器具有服务器可识别的用户安全套接字层(SSL)证书时就会导致此问题。可用来验证您是否为此资源的合法用户。  

请与 Web服务器的管理员联系以获取有效的用户证书。  

  • 403.8 禁止:禁止站点访问。  

如果 Web服务器不为请求提供服务,或您没有连接到此站点的权限时,就会导致此问题。  

  • 403.9 禁止访问:所连接的用户太多。  

如果 Web太忙并且由于流量过大而无法处理您的请求时就会导致此问题。请稍后再次连接。

  • 403.10 禁止访问:配置无效。  

此时 Web 服务器的配置存在问题。  

  • 403.11 禁止访问:密码已更改。  

在身份验证的过程中如果用户输入错误的密码,就会导致此错误。请刷新网页并重试。  

  • 403.12 禁止访问:映射程序拒绝访问。 

拒绝用户证书试图访问此 Web 站点。  

请与站点管理员联系以建立用户证书权限。如果必要,也可以更改用户证书并重试。  

HTTP 错误 404  

404 找不到。  

Web 服务器找不到您所请求的文件或脚本。请检查URL 以确保路径正确。

HTTP 错误 405  

405 不允许此方法。  

对于请求所标识的资源,不允许使用请求行中所指定的方法。请确保为所请求的资源设置了正确的 MIME 类型。  

HTTP 错误 406  

406 不可接受。  

根据此请求中所发送的“接受”标题,此请求所标识的资源只能生成内容特征为“不可接受”的响应实体。

HTTP 错误 407  

407 需要代理身份验证。  

在可为此请求提供服务之前,您必须验证此代理服务器。请登录到代理服务器,然后重试。

HTTP 错误 412  

412 前提条件失败。  

在服务器上测试前提条件时,部分请求标题字段中所给定的前提条件估计为FALSE。客户机将前提条件放置在当前资源 metainformation(标题字段数据)中,以防止所请求的方法被误用到其他资源。  

HTTP 错误 414  

414 Request-URI 太长。  

Request-URL太长,服务器拒绝服务此请求。仅在下列条件下才有可能发生此条件:  

客户机错误地将 POST 请求转换为具有较长的查询信息的 GET 请求。  

客户机遇到了重定向问题(例如,指向自身的后缀的重定向前缀)。  

服务器正遭受试图利用某些服务器(将固定长度的缓冲区用于读取或执行 Request-URI)中的安全性漏洞的客户干扰。  

HTTP 错误 500  

500 服务器的内部错误。  

Web 服务器不能执行此请求。请稍后重试此请求。  

HTTP 错误 501  

501 未实现。

Web 服务器不支持实现此请求所需的功能。请检查URL 中的错误,如果问题依然存在,请与 Web服务器的管理员联系。  

HTTP 错误 502  

502 网关出错  。

当用作网关或代理时,服务器将从试图实现此请求时所访问的upstream 服务器中接收无效的响应。

4. FTP状态码

1xx-肯定的初步答复

这些状态代码指示一项操作已经成功开始,但客户端希望在继续操作新命令前得到另一个答复。

  • 110重新启动标记答复。
  • 120服务已就绪,在nnn分钟后开始。
  • 125数据连接已打开,正在开始传输。
  • 150文件状态正常,准备打开数据连接。

2xx-肯定的完成答复

一项操作已经成功完成。客户端可以执行新命令。200命令确定。

  • 202未执行命令,站点上的命令过多。
  • 211系统状态,或系统帮助答复。
  • 212目录状态。
  • 213文件状态。
  • 214帮助消息。
  • 215NAME系统类型,其中,NAME是AssignedNumbers文档中所列的正式系统名称。
  • 220服务就绪,可以执行新用户的请求。
  • 221服务关闭控制连接。如果适当,请注销。
  • 225数据连接打开,没有进行中的传输。
  • 226关闭数据连接。请求的文件操作已成功(例如,传输文件或放弃文件)。
  • 227进入被动模式(h1,h2,h3,h4,p1,p2)。
  • 230用户已登录,继续进行。
  • 250请求的文件操作正确,已完成。
  • 257已创建“PATHNAME”。

3xx-肯定的中间答复

该命令已成功,但服务器需要更多来自客户端的信息以完成对请求的处理。

  • 331用户名正确,需要密码。
  • 332需要登录帐户。
  • 350请求的文件操作正在等待进一步的信息。

4xx-瞬态否定的完成答复

该命令不成功,但错误是暂时的。如果客户端重试命令,可能会执行成功。421服务不可用,正在关闭控制连接。如果服务确定它必须关闭,将向任何命令发送这一应答。

  • 425无法打开数据连接。
  • 426Connectionclosed;transferaborted.
  • 450未执行请求的文件操作。文件不可用(例如,文件繁忙)。
  • 451请求的操作异常终止:正在处理本地错误。
  • 452未执行请求的操作。系统存储空间不够。

5xx-永久性否定的完成答复

该命令不成功,错误是永久性的。如果客户端重试命令,将再次出现同样的错误。500语法错误,命令无法识别。这可能包括诸如命令行太长之类的错误。

  • 501在参数中有语法错误。
  • 502未执行命令。
  • 503错误的命令序列。
  • 504未执行该参数的命令。
  • 530未登录。
  • 532存储文件需要帐户。
  • 550未执行请求的操作。文件不可用(例如,未找到文件,没有访问权限)。
  • 551请求的操作异常终止:未知的页面类型。
  • 552请求的文件操作异常终止:超出存储分配(对于当前目录或数据集)。
  • 553未执行请求的操作。不允许的文件名。

5. 常见的FTP状态代码及其原因

150 - FTP使用两个端口:21用于发送命令,20用于发送数据。状态代码150表示服务器准备在端口20上打开新连接,发送一些数据。

226 - 命令在端口20上打开数据连接以执行操作,如传输文件。该操作成功完成,数据连接已关闭。

230 - 客户端发送正确的密码后,显示该状态代码。它表示用户已成功登录。

331 - 客户端发送用户名后,显示该状态代码。无论所提供的用户名是否为系统中的有效帐户,都将显示该状态代码。

426 - 命令打开数据连接以执行操作,但该操作已被取消,数据连接已关闭。

530 - 该状态代码表示用户无法登录,因为用户名和密码组合无效。如果使用某个用户帐户登录,可能键入错误的用户名或密码,也可能选择只允许匿名访问。如果使用匿名帐户登录,IIS的配置可能拒绝匿名访问。

550 - 命令未被执行,因为指定的文件不可用。例如,要GET的文件并不存在,或试图将文件PUT到您没有写入权限的目录。

5、http报文

HTTP报文是面向文本的,报文中的每一个字段都是一些ASCII码串,各个字段的长度是不确定的。HTTP有两类报文:一种是从web客户端发往web服务端的请求报文,而另一个是从web服务器端发往web客户端的响应报文。

1)HTTP请求报文

一个HTTP请求报文由请求行(request line)、请求头部(header)、空行和请求数据4个部分组成

1. 请求行:由请求方法字段、URL字段和HTTP协议版本字段3个字段组成,它们用空格分隔。例如,GET /index.html HTTP/1.1。

2. 请求头部:由关键字/值对组成,每行一对,关键字和值用英文冒号“:”分隔。请求头部通知服务器有关于客户端请求的信息,典型的请求头有:

User-Agent:产生请求的浏览器类型。

Accept:客户端可识别的内容类型列表。

Host:请求的主机名,允许多个域名同处一个IP地址,即虚拟主机

3. 空行:发送回车符和换行符,通知服务器以下不再有请求头。

4. 请求数据:不在GET方法中使用,而是在POST方法中使用。POST方法适用于需要客户填写表单的场合,与请求数据相关的最常使用的请求头是Content-Type和Content-Length。

2)HTTP响应报文

一个HTTP响应报文由响应起始行(request line)、响应头部(header)、空行和响应数据4个部分组成。

HTTP响应报文的每部分格式基本同HTTP请求报文,响应起始行由协议版本号、数字状态码、状态信息组成。

6、HTTP通信基本原理请求及响应报文画图剖析

7、http协议请求的工作流程原理步骤

1. 终端客户端在web浏览器地址栏输入访问地址http://www.etiantian.org/index.html

2. web浏览器请求DNS服务器把域名http://www.etiantian.org解析成web服务器的IP地址,此处的解析过程就是DNS解析的原理流程,这里不再累述。

3. web浏览器通过解析后的IP地址及端口号与web服务器之间建立一条TCP连接

4. 建立连接后,web浏览器向web服务器发送一条HTTP报文请求,请求报文内容格式及信息细节这里不再累述

5. web服务器读取浏览器的请求信息,并返回一条HTTP响应报文,响应报文内容格式及信息细节这里不再累述

6. 客户端接收服务器所返回的信息通过浏览器显示在用户的显示屏上,然后客户机与服务器断开http连接,断开TCP连接。

如果在以上过程中的某一步出现错误,那么产生错误的信息将返回到客户端,有显示屏输出。对于用户来说,这些过程是由HTTP自己完成的,用户只要用鼠标点击,等待信息显示就可以了。

上述就是HTTP协议通信原理过程,整个通信原理的重要知识点有:

  • 用户访问网站的流程
  • DNS解析流程细节
  • 建立TCP连接发送HTTP报文的过程
  • HTTP请求报文的细节
  • HTTP响应报文的细节
  • web服务器请求后端集群存储的细节

四、HTTP资源

1、媒体(MIME)类型

MIME(Multipurpose Internet Mail Extensions)多用途互联网邮件扩展类型。是设定某种扩展名的文件用一种应用程序来打开的方式类型,当该扩展名文件被访问的时候,浏览器会自动使用指定应用程序来打开。多用于指定一些客户端自定义的文件名,以及一些媒体文件打开方式。

当Web服务器响应HTTP请求时,会为每一个HTTP对象数据加一个MIME类型。当浏览器获取到服务器返回到的对象时,会去查看相关的MIME类型,进行相应处理。

MIME类型存在于HTTP响应报文的响应头部信息里,它是一种文本标记,表示一种主要的对象类型和一个特定的子类型,中间由一条斜杠来分隔。下表为生产场景最常见的MIME类型。

可以从www重要服务软件Nginx的配置文件conf目录下,查看其支持的媒体(MIME)类型。 

2、URL介绍

URL : 统一资源定位符 (Uniform Resource Locator, URL),也被称为网页地址。

URL由三部分组成:资源类型、存放资源的主机域名、资源文件名。

URL的一般语法格式为:protocol :// hostname[:port] / path / [;parameters][?query]#fragment

  • protocol(协议):file、ftp、https、mailto、MMS等。
  • hostname(主机名):是指存放资源的服务器的域名系统(DNS) 主机名或 IP 地址
  • port(端口号):各种传输协议都有默认的端口号,如http的默认端口为80。如果输入时省略,则使用默认端口号。
  • path(路径):由零或多个“/”符号隔开的字符串,一般用来表示主机上的一个目录或文件地址
  • parameters(参数):这是用于指定特殊参数的可选项。
  • query(查询):可选,用于给动态网页(如使用CGI、ISAPI、PHP/JSP/ASP、NET等技术制作的网页)传递参数,可有多个参数,用“&”符号隔开,每个参数的名和值用“=”符号隔开。
  • fragment(信息片断):字符串,用于指定网络资源中的片断。例如一个网页中有多个名词解释,可使用fragment直接定位到某一名词解释。

3、URI介绍

URI,是uniform resource identifier,统一资源标识符,用来唯一的标识一个资源,而URL是uniform resource locator,统一资源定位器,它是一种具体的URI,即URL可以用来标识一个资源,而且还指明了如何locate这个资源。而URN,uniform resource name,统一资源命名,是通过名字来标识资源,比如mailto:[email protected]。也就是说,URI是以一种抽象的,高层次概念定义统一资源标识,而URL和URN则是具体的资源标识的方式。URL和URN都是一种URI,一个URI实例可以代表绝对的,也可以是相对的,只要它符合URI的语法规则。而URL类则不仅符合语义,还包含了定位该资源的信息,因此它不能是相对的,schema必须被指定。

URL是URI的子集。

4、静态网页资源

静态页面的最大的优点是速度快,可以跨平台,跨服务器,在早期网站建设大多都是静态页面制作的,静态的网址就是以.htm、.html等为后缀的,在这种静态网站上也可以由动态效果,像滚动字幕,GIF格式的动画,或是FLASH,这些视觉上的动态效果并不就是动态页面,他们是截然不同的概念,静态网页是实实在在保存在服务器上的文件,每个网页都是一个独立的文件等。

所谓静态网页就是说网页文件中没有程序,只有HTML代码,一般以.html或.htm为后缀名的网页,静态网站内容不会在制作完成后发生变化,每次更改网站上面的内容都要人工修改代码,然后再上传到服务器上,在不更改的情况下任何人访问都显示的一样的内容。

运行于客户端的程序、网页、插件、组件,属于静态网页,例如 html 页、Flash、JavaScript、VBScript等等,它们是永远不变的。

以静态网页为主的网站最大的困难在于对网页的管理,在这种框架里,网页框架和网页中的内容混杂在一起,很大程度地加大了内容管理的难度。为了减轻这种管理的成本,发展出了一系列的技术,在笔者的理解中,甚至连css本身,原本也是针对这种乱七八糟的网页维护而设计的,目的就是把网页表达的框架和内容本身抽象分离出来

静态网页的特点:

  • 静态网页每个网页都有一个固定的URL,且网页URL以.htm、.html、.shtml等常见形式为后缀,而不含有“?”;
  • 网页内容一经发布到网站服务器上,无论是否有用户访问,每个静态网页的内容都是保存在网站服务器上的,也就是说,静态网页是实实在在保存在服务器上的文件,每个网页都是一个独立的文件;
  • 静态网页的内容相对稳定,因此容易被搜索引擎检索
  • 静态网页没有数据库的支持,在网站制作和维护方面工作量较大,因此当网站信息量很大时完全依靠静态网页制作方式比较困难;
  • 静态网页的交互性交叉,在功能方面有较大的限制。

优势与劣势:

优势:

1. 对搜索引擎友好,被收录的质量高;

2. 访问速度快;

3. 资源(cpu 等)占用少;

劣势:

1. 对于大型门户,或者社区来说,不断的修改将会产生大量I/O,会导致磁盘出现碎片甚至出现磁盘坏道。相当恐怖一个隐患。用户信息一旦没有了就没戏玩了;

2. 储存空间占用会多一些;

有关静态网页架构思想:

高并发高访问量的场景,做架构优化,关键的节点:就是把动态网页转成静态网页,不直接请求数据库和动态服务器,并且可以把静态内容推送到前段缓存中提供服务可以提供用户体验,节约服务器和维护成本

5、动态网页的基本概述

动态网页是以.asp、.jsp、.php、.perl、.cgi等形式为后缀,并且在动态网页网址中有一个标志性的符号——“?”或&符。动态网页与网页上的各种动画、滚动字幕等视觉上的“动态效果”没有直接关系,动态网页也可以是纯文字内容的,也可以是包含各种动画的内容,这些只是网页具体内容的表现形式,无论网页是否具有动态效果,采用动态网站技术生成的网页都称为动态网页.动态网站也可以采用静动结合的原则,适合采用动态网页的地方用动态网页,如果必要使用静态网页,则可以考虑用静态网页的方法来实现,在同一个网站上,动态网页内容和静态网页内容同时存在也是很常见的事情。

动态网页特色:

  • 交互性:即网页会根据用户的要求和选择而动态改变和响应。例如访问者在网页填写表单信息并提交,服务器经过处理将信息自动存储到后台数据库中,并打开相应提示页面。
  • 自动更新:即无需手动操作,便会自动生成新的页面,可以大大节省工作量。例如,在论坛中发布信息,后台服务器将自动生成新的网页。
  • 随机性:即当不问的时间、不问的人访问同一网址时会产生不同的页面效果。例如,登录界面自动循环功能。
  • 动态网页中的“?”对搜索引擎检索存在一定的问题,搜索引擎一般不可能从一个网站的数据库中访问全部网页,或者出于技术方面的考虑,搜索蜘蛛不去抓取网址中“?”后面的内容,因此采用动态网页的网站在进行搜索引擎推广时需要做一定的技术处理才能适应搜索引擎的要求
  • 程序在服务端解析,服务端如:php引擎,Java容器(tomcat,resin,jboss),耗时长,效率低,会消耗大量的CPU和内存等资源并且多数还要读取数据库等服务,因此,效率远不如静态网页

动态网页架构思想:

  • 一般来说,静态网页的效率是动态网页的10-30倍。
  • 动态网站效率很差,并发能力也很低,高并发场景中,尽可能换成静态网页提供服务。
  • 动态转静态也要根据业务需求设计。例如,对于更新频繁的网站会产生数据不一致的情况,即用户看到的内容不会是最新的内容。
  • 动态转静态,高并发网站必备的架构方案,是高级架构师的职责所在。

优势与劣势:

优势:

1. 相对于静态,它的劣势也就是动态的优势所在——占用空间少,对硬盘友好。

劣势:

1. 对搜索引擎不友好。搜索引擎会不收录带问号的网址?因为搜索引擎怕由于问号而进入死循环。

2. 高并发时资源占用较多。

注意事项:

静态网页和动态网页各有特点,网站采用动态网页还是静态网页主要取决于网站的功能需求和网站内容的多少,如果网站功能比较简单,内容更新量不是很大,采用纯静态网页的方式会更简单,如果网站功能复杂的话最好采用动态网页技术来实现

6、伪静态网页

伪静态即是网站本身是动态网页如.php、.asp、.aspx等格式动态网页有时这类动态网页还跟“?”加参数来读取数据库内不同资料。很典型的案例即是discuz论坛系统,后台就有一个设置伪静态功能,开启伪静态后,动态网页即被转换重写成静态网页类型页面,通过浏览器访问地址和真的静态页面没区别。前提服务器支持伪静态重写URL Rewrite功能。

1、使用ISAPI_Rewrite进行动态链接重写HTML静态网址。ISAPI_Rewrite是一个dll组件,re_write是iis里的一个模块。这个筛选器实现是通过正则表达式,将动态网页网址映射成为静态网址。如可将news.asp?id=95通过re_write将其转换成news/95.html。映射的正则表达式在httpd.ini文件里进行设置。

举个小小例:处理数据翻页,那么写法是:

More_<%=Page%>_<%=type%>.html 

注:page是翻页页数,type是数据类型,表现形式:More_1_95.html。

如果翻下一页,则为:More_2_95.html。继续下一页的循环,则是: More_3_95.html,以此类推, 不过你需要在httpd.ini文件中增加以下代码:

RewriteRule /More_(\d+)_(\d+)\.html /jsp/more\.asp\?page=$1&type=$2 [N,I]字串

如果你的动态程序有多个参数需要传递,那么就增加多个(\d+)即可,如下:

RewriteRule /More_(\d+)_(\d+)_(\d+)\.html /asp/more\.asp\?page=$1&type=$2&type2=$3 [N,I]

优点:在程序上基本不需做什么变化。麻烦:要实现这个需要对iis进行控制,所以当你租用别人的服务器时,则需要先跟服务商联系。(当然这个是对asp而言,asp.net就不用——直接将dll程序集放到程序中的bin再适当的配置即可实现)

2、IIS的404错误处理机制:通过自定义错误,转向我们准备好的处理页。不过这种可拓展性有待研究,对程序处理的统筹要求也高,不大适合实际应用的样子。

首先,设置站点属性-自定意错误,找到HTTP错误404,然后编辑属性->消息类型选中URL->URL填入“/index.asp”,或您的错误处理页面。

比如用户访问http://tech.todo.net.cn/12345.html 时(12345为文章在数据库的ID)。由于些页面不存在,所以触发了404错误,转向了index.asp。

在index.asp里加:

CurrDomain=Request.ServerVariables("HTTP_HOST") '当前访问域名
CurrURL=Replace(Request.ServerVariables("QUERY_STRING"),"404;http://"&CurrDomain&":80","") '当前访问URL

此时的CurrURL应该是:12345.html。

这样,就得到用户正在试图访问的页面.然后提取里边的文章ID(应该为:12345),用正则这里就不多说了。

然后到数据库里提取出文章内容,输出到页面里,就OK了. 

结论:伪静态太适合用在普通的企业网站上了——既不要求高并发,但同时又很在乎seo(搜索引擎优化),而且也要求后台可动态更新。——当然实现直接生成静态页也行,因为这种不像社区那种修改量那么大。因为伪静态网页还是动态网页,从性能上考虑,伪静态功能不但没有提升网站性能,反而会降低网站的性能。

伪静态网页的实现过程,一般是由运营产品提出需求,开发和运维共同实现。

7、生产Web架构优化实战方案

由于静态网页程序在客户端解析,大大降低了服务器端的访问压力,因此解析效率更高,在实际高并发网站架构中,我们可以把用户请求的数据解析后存成静态文件放于磁盘中或防于内存中,来降低服务器的压力,节约企业成本,提升用户体验。

高并发网站架构从动态转静态不用业务产品实现的例子:

1. 门户新闻业务

新闻网站的特点是一旦发布完成,几乎不会再改动网页内容。因此对于新闻的业务内容静态化相对比较简单。

第一步:程序发布内容直接转成静态;

第二部:运营编辑人员发布新闻网页后,后台程序立刻将动态网页生成静态文件;

第三部:运维人员通过发布出发把生成的静态网页发布到实现搭建好的公司缓存集群服务器上,或者把静态内容同步到购买的全国所有CDN服务器节点上,然后,在提供给用户提供访问浏览;

2. 视频网站业务(一旦发布完成,几乎不会再改动)

优酷视频网,用户上传视频,需要经历审核-转码的过程,大概1-2个小时,审核-转码-推送(同步到购买的全国所有CDN服务器节点)。

注意:blog/bbs/sns/微博社区业务/电商(淘宝,京东)(用户发布完成,可能会随时更新)。

异步方式,消息中间件、消息队列。

8、HTTPS协议

https协议建立流程:

1. 客户端发起请求(携带秘钥算法套件);

2. 服务器端收到后查看算法套件如果支持则选出一种加密算法和hash算法,并返回(加密算法、hash算法、公钥);

3. 客户端验证证书合法性;生成随机密码;返回信息:【公钥加密(随机密码)+ 加密算法(握手消息+随机数密码) + hash算法(握手消息)】;

4. 服务端:私钥解密出随机数密码;握手消息密文+随机数密码-->解密出握手消息;计算握手消息hash值并对比;

5. 利用随机密码通信;

五、网站流量度量术语

1、IP-Internet Protocal

IP(独立IP):即Internet Protocal,这里指独立IP数,独立IP数是指不同IP地址的计算机访问网站的被计算的总次数。一般00:00-24:00内相同IP地址只被计算一次,记录独立IP的时间可为一天活一个月。目前通用的标准为“一天”。

2、PV-Page View

PV(访问量):即Page View,页面浏览量或点击量,不管客户端是不是相同,也不管IP是否相同,用户每访问一个网站页面都会被计算一个PV。PV的具体度量方法就是从客户端浏览器发出一个对web服务器的请求,web服务器连接到这个请求后,将该请求对应的一个网页发给浏览器,就产生了一个PV,一般为了防止用户快速刷PV,很多网站把PV的统计程序放在页面的最下面。

3、UV-Unique Vistor

UV(独立访客):即Unique Vistor,同一台客户端访问网站被计算为一个访客。一天00:00-24:00内相同的客户端访问同一个网站只被计算一次UV。UV一般是以客户端Cookie等技术作为统计依据的世纪同机会有误差。

4、企业网站对PV/IP/UV的度量

1)IP的度量

  • 分析所有Web服务器的访问日志,对IP地址段去重后计数,这是IT人员的基本计算手段
  • 在网站的每一个页面结尾嵌入js等统计程序代码,当用户加载网页后,IP即传给统计IP的服务器,这种方法一般被第三方统计公司或者企业内部开发日志分析程序时使用
  • 用第三方大家比较信任的统计工具例如:谷歌的统计(GA)

IP的统计方法简单、易用,因此成为了多数网站衡量网站流量的重要指标之一。

2)PV的度量

  • 分析web服务器的访问日志(需要排除js,css等各种图片的日志信息),只计算HTML,PHP等页面URL
  • 在网站的每一个页面结尾,嵌入js等统计程序代码,当用户加载网页后,IP即传给统计IP的服务器,这种方法一般被第三方统计公司或者企业内部开发日志分析程序时使用
  • 用第三方大家比较信任的统计工具例如:谷歌的统计(GA)

PV的统计方法也简单、易用,因此成为了多数网站衡量网站流量的重要指标之一。

3)UV的度量

  • 通过客户端HTTP请求报文分析

一个客户端会多次请求网站服务器,每次HTTP请求都会携带客户端自身的大量信息,比如:IP地址,请求发出时间,浏览器版本,操作系统版本等等,网站服务器对这些请求进行分析,如果这些请求满足一些共同特征,比如来自同一个IP地址,且浏览器版本,操作系统版本相同,请求时间又相近等等,如果满足这一系列定义,那么就可以认为这些请求是来自同一个客户端,那么多个页面访问也只能算一个UV。共同特征的定义是由服务器方决定的。通常用IP地址+其他特征共同定义的情况较多。

此种度量方法无法度量以下问题:

1. 多人共用一台电脑的情况。

2. 多个人的电脑软硬件经常雷同,并且是一个公司或者学校的人。

  • 通过Cookie鉴别

当客户端第一次访问某个网站服务器的时候,网站服务器会给这个客户端的电脑发出一个Cookie,通常放在这个客户端的C盘当中。在这个Cookie中会分配一个独一无二的编号,这其中会记录一些访问服务器的信息,如访问时间,访问了哪些页面等等。当你下次再访问这个服务器的时候,服务器就可以直接从你的电脑中找到上一次放进去的Cookie文件,并且对其及进行一些更新,但那个独一无二的编号是不会变的。如果在一定时间内,服务器发现有两个来访者对应的是一个编号,那么我们自然可以认为这个来源于同一个来访者了,就计算1个UV。

使用Cookie的方法要比分析客户端HTTP请求头部信息更精确些。但也存在一些问题,比如:有的客户端为保证客户端更高级别的安全,关闭了Cookie功能;或者有些客户端设置了在退出页面时自动删除Cookie,亦或你经常自己动手清理Cookie,那么这个方法就不精确了。

5、其他网站常见术语

  • 最高IP :  指选择时间段范围内,某日访问IP最多的数值。
  • 最高PV:指选择时间段范围内,某日访问量最高的数值。
  • 日均流量:指选择时间范围内,平均每日流量。 (日均流量=总访问量/总天数)
  • 人均访问量:指选择时间范围内,每个访客访问网站的PV数。(计算公式:人均访问量=访问量/唯一访客数)。
  • 访问过程:每个访问者从进入您的网站开始访问,一直到最后离开您的网站,整个过程中发生的一切点击访问行为,称为一次访问过程。
  • 访问入口:每次访问过程中,用户进入的第一个页面为访问入口页面。
  • 访问出口:每次访问过程中,用户结束访问,离开前点击的最后一个页面为访问出口页面。
  • 平均停留时间:所有访客的访问过程,访问持续时间的平均值。
  • 平均访问页数:所有访客的访问过程,连续访问页面数的平均值。
  • 贡献用户数:每个访问来源带来的独立访客数,即UV数;
  • 贡献IP数:每个访问来源带来的独立IP数。
  • 贡献PV数:每个访问来源带来的访客的一切后续访问行为所产生的PV数。

6、并发连接

下面有是网络上的一些说法:

  • 网站服务器每秒能够接受的最大用户请求数
  • 网站服务器每秒能够响应的最大用户请求数
  • 网站服务器在单位时间能够处理的最大连接数

对于网站服务器来说,所谓的并发就是单位时间内服务器能够处理的最大连接数。

其他服务并发连接:

1. QPS每秒查询率(Query Per Second)

每秒查询率QPS是对一个特定的查询服务器在规定的时间内所处理流量多少的衡量标准,运维工作中,DNS系统以及数据库等服务的查询性能经常用每秒查询率来衡量。

2. IOPS(Input/Output Operations Per Second)

即每秒进行读写(I/O)操作的次数,多用于数据库等场合,衡量随机访问的性能。

7、常见企业网站排名及PV/IP访问量

提示:以上数据来自第三方alexa排名_alexa世界排名 - Alexa网站查询网站数据,仅供参考,不同的统计程序差别也很大,有一定误差,实际访问量要比此表大。

具体的误差和chinaz.com的统计方法有关,后面的最大并发以及机器数量级别为作者根据访问量及业务类型估算而来。

总结:

30万左右IP(都使用CDN),百万左右PV,并发2000左右,服务器数量10台左右。

百万左右IP(都使用CDN),七百万左右PV,并发20000左右,服务器数量80台左右。

六、WWW服务

1、www软件全球使用排行参考

数据来源:Usage Statistics and Market Share of Web Servers, September 2022 

通过上述趋势变化,不难发现,Apache虽然份额最大,但是有逐年下降趋势,而这个后起之秀Nginx上升趋势显著,另外,Nginx的分支Tengine也从看不见身影,逐渐占有一定份额了。

2、web服务说明

常用来提供静态Web服务的软件:

  • apache 中小型静态web服务的主流,web服务器中的老大哥
  • nginx 大型新兴网站静态web服务主流,web服务器中的初生牛犊
  • lighttpd 静态web服务不温不火,逐渐被淘汰的意味,社区不活跃,静态解析效率很高

常用来提供动态服务的软件:

  • IIS(Internet information services) 微软的WEB服务器(asp,aspx)
  • tomcat #中小型企业动态web服务主流,互联网java容器主流(jsp,do)
  • resin #大型动态web服务主流,互联网java容器主流(jsp,do)
  • php(fcgi) #大中小网站,php程序的解析容器

注意: 

配合apache、php不是守护进程,而是mod_php5.so(module)

配合nginx,lighttpd,php守护进程模式,FCGI模式。

① www静态程序服务软件apache

  •  apache version

1.3 系列;2.0 系列;2.2 系列;2.4 系列,目前主流2.2 系列,正在向2.4 系列过度阶段。建议读者当下使用2.2 系列。

apache官网:Welcome to The Apache Software Foundation!

② www静态程序服务软件nginx

Nginx版本只有一个系列,但是版本更新很快,官网:nginx news

③ www动态程序服务软件resin

Resin官方号称是世界上最快的Web服务,是大型动态Web服务主流,互联网java程序的解析容器,目前企业使用较多的是3.1系列,正在向4.0过渡

resin官方地址:

Resin Pro Download | Caucho

http://caucho.com/resin-3.1/doc/

https://caucho.com/resin/doc/install-apache/

④ www动态程序服务软件tomcat

Tomcat一直是中小型企业动态Web服务的主流,常用来作为解析java程序。

Tomcat官网地址:

Apache Tomcat® - Which Version Do I Want?

Apache Tomcat® - Welcome!

⑤ www动态程序服务软件PHP

PHP软件是大中小型网站程序前台页面开发的首选,存世开源软件众多,也是中小企业网站开发的首选,它是动态网页语言php程序的解释器。PHP的版本系统、列有5.2,5.3,5.4,5.5,5.6,其中最经典的版本为5.2系列。

php提供解析的方式,配合Apache解析动态程序,是mod_php5.so(module)模块的方式,配合nginx解析动态程序,常用Fastcgi守护进程模式提供服务。

官方网站:

PHP: Hypertext Preprocessor

七、Nginx与Apache对比

1、apache 相对于nginx 的优点

  • rewrite ,比nginx 的rewrite 强大
  • 动态页面,nginx处理动态请求是鸡肋,一般动态请求要apache去做,nginx只适合静态和反向。
  • 模块超多,基本想到的都可以找到
  • 少bug ,nginx 的bug 相对较多超稳定

2、nginx相对于apache的优点

  • 轻量级,同样起web 服务,比apache占用更少的内存及资源,支持更多的并发连接,体现更高的效率,这点使 Nginx 尤其受到虚拟主机提供商的欢迎。在高连接并发的情况下,Nginx是Apache服务器不错的替代品: Nginx在美国是做虚拟主机生意的老板们经常选择的软件平台之一. 能够支持高达 50,000 个并发连接数的响应, 这归功于Nginx为我们选择了 epoll and kqueue 作为开发模型.
  • 抗并发,nginx 处理请求是异步非阻塞的,而apache 则是阻塞型的,在高并发下nginx 能保持低资源低消耗高性能
  • 高度模块化的设计,编写模块相对简单
  • 社区活跃,各种高性能模块出品迅速啊
  • Nginx本身就是一个反向代理服务器
  • 负载均衡能力突出,Nginx 既可以在内部直接支持 Rails 和 PHP 程序对外进行服务, 也可以支持作为 HTTP代理 服务器对外进行服务. Nginx采用C进行编写, 不论是系统资源开销还是CPU使用效率都比 Perlbal 要好很多.

核心区别:apache是同步多进程模型,一个连接对应一个进程;nginx是异步的,多个连接(万级别)可以对应一个进程。

一般来说,需要性能的web 服务,用nginx 。如果不需要性能只求稳定,那就apache 吧。后者的各种功能模块实现得比前者,例如ssl 的模块就比前者好,可配置项多。

这里要注意一点,epoll(freebsd 上是 kqueue )网络IO 模型是nginx 处理性能高的根本理由,但并不是所有的情况下都是epoll 大获全胜的,如果本身提供静态服务的就只有寥寥几个文件,apache 的select 模型或许比epoll 更高性能。

3、select

Socket数量限制:该模式可操作的Socket数由FD_SETSIZE决定,内核默认32*32=1024。

操作限制:通过遍历FD_SETSIZE个Socket来完成调度,不管哪个Socket是活跃的,都遍历一遍(这就是apache慢的原因)。

4、epoll

Socket数量无限制:操作无限制:基于内核提供的反射模式,有活跃Socket时,内核访问该Socket的callback,不需要遍历轮询(这当然是nginx快的原因啦)。

原理部分小编觉得读者知道这些就够了,起码当别人问起你选择上述二者之一的理由你已经够应付啦,当然小编还给你推荐一种折中的方案,nginx做前端,apache做后端啦。

select和epoll对比如下:

猜你喜欢

转载自blog.csdn.net/qq_35029061/article/details/126762027