http协议原理
1、 用户访问网站基本流程:
第一步:客户端用户从浏览器里输入www.baidu.com网站地址,回车后,系统首先会查系统本地的DNS缓存及hosts文件信息,查找是否存在www.baidu.com域名对应的Ip解析记录,如果有就直接获取IP地址,然后去访问这个IP地址对应域名www.baidu.com的服务器,一般第一次请求时,DNS缓存是没有解析记录的,而hosts多在内部临时测试时使用。
第二步:如果客户端本地hosts及DNS缓存及hosts文件没有www.baidu.com域名对应的解析记录,那么,系统会把浏览器的解析请求发送给客户端本地设置的DNS服务器地址
(通常称此DNS为LDNS,即Local DNS)解析,如果LDNS服务器的本地缓存有对应的解析记录就会直接返回IP地址给客户端,如果没有,则LDNS会负责继续请求其它的DNS服务器。
第三步:LDNS会从DNS系统的(.)开始请求www.baidu.com域名的解析,针对各个层级的DNS服务器系统进行一系列的查找,最终会查找到baidu.com域名对应的授权DNS服务器,而这个授权DNS服务器正是企业购买域名时用于管理域名解析的服务器,这个授权服务器会有www.baidu.com对应的IP解析记录,如果此时没有,就表示企业的域名管理人员没有为www.baidu.com域名做解析设置,即网站还没架设好。
第四步:baidu.com域名的授权DNS服务器会把www.baidu.com对应的最终IP解析记录发给LDNS。
第五步:LDNS把收到的来自授权DNS服务器www.baidu.com对应的IP解析记录发给客户端浏览器,并且再LDNS把本地域名和IP的对应解析缓存起来,以便下一次更快的返回相同解析请求的记录,这些缓存记录在指定的时间(DNS TTL值控制)内不会过期。
第六步:客户端浏览器获取到了www.etiantian.org的对应IP地址,接下来,浏览器会请求获得的IP地址对应的网站服务器,网站服务器接收到客户端的请求并响应处理(此处的处理可能是数百台集群的服务器系统,也可能是一台云主机),将客户请求的内容返回给客户端浏览器,至此,一次访问浏览网页的完整过程就完成了。
2、DNS系统解析基本流程
DNS,全称Domain Name System/Serve,它在一个网站运行中起来了至关重要的作
用,它的主要作用是负责把网站域名解析为对应的IP地址,例如:把www.baidu.com解析
为对应的IP地址记录如1.1.1.1,这个从域名到IP的解析过程,称作A记录,即Address
Record。
DNS系统除了负责这个最重要的A记录解析外,还有很多的功能。例如:
设置CNAME别名记录,这个别名解析功能常被CDN加速服务商应用。
设置MX邮件记录,这个MX记录功能,在购买或搭建邮件服务时会被用到。
设置PTR记录,反向解析,即把IP地址解析为对应的域名,和A记录的解析相反,邮件服务等业务中会用到。
DNS 系统的架构类似于一颗倒挂着的树(和Linux系统目录结构类似),它的顶点也是根
("."),只不过这个根是用点(.)来表示的,不是目录的根斜线(/)。
2、DNS解析原理流程
DNS解析流程说明
DNS的解析流程实际上就是从用户在客户端浏览器中输入网站地址并按回车开始的,一直持续到获取域名对应的IP,整个过程可分为如下几个步骤。
第一步:客户端用户从浏览器里输入www.baidu.com网站地址后回车,系统首先会查找系统本地的DNS缓存及hosts文件信息,确定是否存在www.baidu.com域名对应的IP解析记录,如果有就直接获取到IP地址,然后去访问这个IP地址对应的www.baidu.com域名的服务器,一般第一次请求时,DNS缓存是没有解析记录的,而hosts多为内部临时测试使用。
第二步:如果客户端DNS缓存及本地hosts文件没有www.baidu.com域名对应的解析记录,那么,系统会把浏览器的解析请求发送给在客户端本地设置的DNS服务器地址(通常称此DNS为LDNS,即:Local DNS)解析,如果LDNS服务器的本地缓存有对应的解析记录就会直接返回IP地址给客户端:如果没有,则LDNS会负责继续请求其他的DNS服务器。
第三步:LDNS会从DNS系统的(.)根开始请求www.baidu.com域名的解析,根DNS服务器在全球一共有13台,根服务器下面是没有www.baidu.com域名解析记录的,但是根下面有www.baidu.com对应的顶级域.org的解析记录,因此,根会把.org对应的DNS服务器地址返回给LDNS。
第四步:LDNS获取到.org对应的DNS服务器地址后,就会去.org服务器请求 www.baidu.com域名的解析,而.org服务器下面也没有www.baidu.com域名对应的解析记录,但是有baidu.com域名的解析记录,因此,.org服务器会把baidu.com对应的DNS服务器地址返回给LDNS
第五步:同理,LDNS获取到baidu.com对应的DNS服务器地址后,就会去baidu.org服务器请求www.baidu.com域名的解析,baidu.com域名对应的DNS服务器是该域名的授权
DNS服务器,这个DNS服务器正是企业购买域名时管理解析所在的服务器(也可能是自建的授权DNS服务器),这个服务器会有www.baidu.com对应的IP解析记录,如果此时没有,就表示企业的域名人员没有为www.baidu.com域名做解析,即网站还没架设好。
第六步:baidu.com域名DNS服务器会把www.baidu.com对应的IP解析记录发给LDNS
第七步:LDNS把收到的来自授权DNS服务器www.baidu.com对应的IP解析记录发给客户端浏览器,并且LDNS会把本地域名和IP的对应解析记录缓存起来,以便下一次更快的返回相同解析请求的记录。至此,整个DNS的解析流程就完成了。
3、Http协议
HTTP协议,全称HyperText Transfer Protocol,中文名为超文本传输协议,是互联网中最常用的一种网络协议。HTTP的重要应用之一是WWW服务。设计HTTP协议最初目的就是提供一种发布和接收HTML(一种页面标记语言)页面的方法(请求返回)。
HTTP协议是互联网上常用的通信协议之一。它有很多的应用,但最流行的就是用于Web 浏览器和Web服务器之间的通信,即WWW应用或称Web应用。
WWW,全称World Wide Web,常称为Web,中文译为“万维网”。它是目前互联网上最受用户欢迎的信息服务形式。HTTP协议的WWW服务应用的默认端口为80(端口的概念),另外的一个加密的WWW服务应用https的默认端口为443,主要用于网银,支付等和钱相关的业务。当今,HTTP服务,WWW服务,Web服务三者的概念已经混淆了,都是指当下最常见的网站服务应用。
常见的HTTP请求方法
HTTP状态码
HTTP状态码(HTTP Status Code)是用来表示Web服务器响应http请求状态的数字代码。每当Web客户端向Web服务器发送一个HTTP请求时,Web服务器都会返回一个状态响应代码。这个状态码是一个三位数字代码,作用是告知Web客户端此次的请求是否成功,或者是否要采取其他的动作方式。
生产场景常见的状态吗及其对应的作用
状态代码 详细描述说明
200~OK 服务器成功返回网页,这是成功的http请求,返回的标准状态码
301-Moved 永久跳转,所有请求的网页将永久跳转到被设定的新的位置,例如:从
Permanently baidu.com跳转到www.baidu.com
302 临时的跳转
304 触发了缓存,也是成功的访问网页
403 禁止访问,这个请求是合法的,但是服务器端因为匹配了预先设置的规则而 Forbidden 拒绝响应客户端的请求,此类问题一般为服务器或服务权限配置不当所致。
404-Not 服务器找不到客户端请求的指定页面,可能是客户端请求了服务器上不存在
Found 的资源导致
500-Internal 内部服务器错误,服务器遇到了意料不到的情况,不能完成客户的请求。这
Server Error 是一个较为笼统地报错,一般为服务器的设置或者内部程序问题导致。例如
SElinux开启,而又没有为http设置规则许可,客户端访问就是500
502-Bad 坏的网关,一般是代理服务器请求后端服务时,后端服务不可用或没有完成
Gateway 响应网关服务器。一般为反向代理服务器下面的节点出问题导致。
503-Service 服务当前不可用,可能因为服务器超载或停机维护导致,或者是反向代理服
Unavailable 务器后面没有可以提供服务的节点
504- 网关超时,一般是网关代理服务器请求后端服务时,后端服务没有在特定的 Gateway 时间内完成处理请求,一般是服务器过载导致没有在指定的时间内返回数据
Timeout 给前端代理服务器。
HTTP响应报文由报头和报文主体组成。
报头用来说明服务器响应客户端请求的状况,一般为协议及版本号,数字状态码,状态情况。
报文主体是装载的要返回给客户端的数据。
HTTP协议属于OSI模型中的第七层应用层协议,HTTP协议的重要应用就是WWW服务应用,下面就以WWW服务应用为例介绍HTTP协议的通信原理了,HTTP协议进行通信时,需要有客户端(即终端用户)和服务端(即Web服务器),在Web客户端向Web服务器发送请求报文之前,先要通过TCP/IP协议在Web客户端和服务器之间建立一个TCP/IP连接。整个http协议请求的工作流程如下:
1) 终端客户在Web浏览器地址栏输入访问地址http://www.baidu.com
2) Web浏览器请求DNS服务器把域名www.baidu.com转换成Web服务器的IP地址,此处的解析过程就是DNS解析的原理流程,前面已经讲过了,此处不再叙述。
3) Web浏览器将端口号(默认80)从访问地址(URL)中解析出来。
4) Web浏览器通过解析后的IP地址及端口号于Web服务器之间建立一条TCP连接
5) 建立TCP连接后,Web浏览器向Web服务器发送一条HTTP请求报文,请求报文内容格式及信息细节前面已经讲过了,此处不在叙述。
6) Web服务器响应并读取浏览器的请求信息,然后返回一条HTTP响应报文,响应报文内容格式及信息细节前文也已经讲过了,此处不在叙述。
7) Web服务器关闭http连接,关闭TCP连接,Web浏览器显示访问的网站内容到屏幕。
URL,全称Uniform Resource Location,中文翻译为统一资源定位符,也被称为网页地址
网址如同在网络上的门牌,它是因特网上标准的资源唯一地址。通俗地说,URL是
Internet上用来描述信息资源的字符串,主要用在各种WWW客户端和服务器程序上。采用
URL可以用一种统一的格式来描述各种信息资源,包括文件,服务器的地址和目录等。严格的说,每个URL都是一个URI,它标识一个互联网资源,并指定对其进行操作或取得该资源的方法。
URL的格式由下列三部分组成:
第一部分是协议,例如:http
第二部分是主机资源服务器IP地址或域名(端口号),例如:www.baidu.com
第三部分是主机资源的具体地址,如目录和文件名等,例如:/index.html
URI,全称Uniform Resource Identifier,中文翻译为统一资源标识符,是一个用于标识某一互联网资源名称的字符串。这个字符串在世界范围内唯一标识并定位某一个信息资源。
静态网页资源静态网页资源介绍
在网站设计中,纯粹HTML格式的网页(可以包含图片,视频,JS(前端功能实
现),CSS(样式)等)通常被称为“静态网页”,早期的网站大多都是静态的。静态网页是相对于动态网页而言的,是指没有后台数据库,不含程序(如php,jsp,asp)和可交互的网页。
静态网页资源特点
静态网页资源的特点是,开发者编写的是什么,它显示的就是什么,一旦编写完成,就不会有任何改变。静态网页的维护和更新相对比较麻烦,每个不同的网页都需要单独编辑更新,静态网页一般适用于更新较少的宣传展示型网站(例如:酒,家具,饲料等的宣传网
静态网页资源有几个重要的特征:
每个网页都有一个固定的URL地址,且URL一般以.html,.html,shtml等常见形式为后缀,而且地址中不含邮问号“?”或“&”等特殊符号。
网页内容一经发布到网站服务器上,无论是否有用户访问,每个网页的内容都是保存在网站服务器文件系统上的,也就是说,静态网页是实实在在保存在服务器上的文件实体,每个网页都是一个独立的文件。
网页内容是固定不变的,因此,容易被搜索引擎收录(容易被用户找到)(优点)
网页没有数据库支持,在网站制作和维护方面工作量较大,因此当网站信息量很大时完全依靠静态网页制作的方式比较困难(缺点)
网页的交互性较差,在程序功能实现方面有较大的限制(缺点)
网页程序在用户浏览器端解析,如IE浏览器,程序解析效率很高,由于服务端不进行解析,并且不需要读取数据库,因此服务器端可以接受更多的并发访问。当客户端向服务器请求数据时,服务器直接把数据从磁盘文件系统上返回(不做任何解析),待客户端拿到数据后,在浏览器端解析展现出来(优点)
静态网页语言
常见的静态网页语言有html,js,css,xml,shtml等。
静态网页的核心特点,如下:
1) 程序在客户浏览器端解析,不读取后端数据库,因此性能和效率很高。
2) 因为后端没有数据库支持,所以和用户的交互性较差,功能实现也很少。
有关静态网页的架构思想
在高并发,高访问量的场景下做架构优化,涉及的关键环节就是把动态网页转成静态网页,而不直接请求数据库和动态服务器,并且可以把静态内容推送到前端缓存(或CDN)中提供服务,这样就可以提升用户体验,节约服务器和维护成本。
动态网页资源介绍
所谓的动态网页是与静态网页相对而言的,也就是说,动态网页的URL后缀不
是.htm,.html,.shtml,.xml,.js,.css等静态网页的常见后缀扩展名形式,而是
以.asp,.aspx,.php,.js,.do,.cgi等形式作为后缀的,并且一般在动态网页网址中会有标志性的符号--“?,&”,此外,在大多数情况下后端都需要有数据库支持等。
动态网页资源特点
1) 网页扩展名后缀常见为:.asp,.aspx,.php,.jsp,.do,cgi等
2) 网页一般以数据库技术为基础,大大降低了网站维护的工作量
3) 采用动态网页技术的网站可以实现更多的功能,如用户注册,用户登录,在线调查,投票,用户管理,订单管理,发博文等等
4) 动态网页并不是独立存在于服务器上的网页文件,当用户请求服务器上的动态程序时,服务器解析这些程序并可能读取数据库返回一个完整的网动态网页中的“?”在搜索引擎的收录方面存在一定问题,搜索引擎一般不会从一个网站的数据库中访问全部网页,或者出于技术等方面的考虑,搜索蜘蛛一般不会去抓去网址
中“?”后面的内容,因此在企业通过搜索引擎进行推广时,需要针对采用动态网页的网站做一定的技术处理(伪静态技术),以便适应搜索因穷的抓取要求。
5) 程序在服务器端解析,这相当于顾客点餐,饭店厨师做饭做菜,耗时长,效率低。由于程序在服务端解析,因此,会消耗大量的CPU和内存,I/O等资源,并且多数还要读取数据库等
服务,因此,其访问效率远不如静态网页,在服务端解析动态程序的服务常见的有PHP引擎,Java容器(tomcat,resin,jboss,weblogic)
有关动态网页的架构思想
一般来说,静态网页的性能效率是动态网页的10~30倍。且动态网站效率很差,并发能力也很低,在高并发场景中,应尽可能转换成静态网页提供服务。动态转静态几乎是所有高并发网站必备的架构方案思路,也是高级架构师的职责所在。
此外,动态转静态也要根据业务需求设计,例如,对于更新频繁的网站如果设计不好就可能会产生数据不一致的情况,即用户看到的数据不是网站最新的内容,而是静态的内容。
由于静态网页程序在客户端解析,大大降低了服务器端的访问压力,因此解析效率更高,在实际高并发网站架构中,可以考虑把用户请求的数据解析后存成静态文件放于磁盘中或放于内存中,来降低动态服务器的压力,节约企业成本,提升用户体验。
5、网站流量度量术语
并发ip数就是处于TCP三次握手后的established的状态的一个时间段内的平均值。
独立ip这里指独立ip数。独立ip数是指不同的ip地址的计算机访问网站是被计算的总次数,这比真实的访问人数多。独立ip数是衡量网站流量的一个重要指标。需要先进行日志切割,然后去成功访问的ip,然后进行去重。
PV(访问量)即Page View,中文翻译为页面浏览,即页面浏览器或点击量,不管客户端是不是相同,也不管IP是不是相同,用户每次访问一个网站页面都会被计算一个PV。
PV的具体度量方法就是从客户浏览器发出一个对Web服务器的请求(Request),Web服务器接到这个请求后,将该请求对应的一个网页(Page)发送给浏览器,就产生一个PV。
这里有一个问题,就是只要这个请求发送给了浏览器,无论这个页面是否完全打开(或下载完成),那么都是会被计数为1个PV(服务器日志),一般为了防止用户快速刷PV,很多网站把PV的统计程序放在页面的最下面。
用PV衡量网站时,PV数反映的是浏览某网站的页面数量,每刷新一次页面也算一次。因
此,可以说PV数与来访用户的数量成正比,但PV数并不是真正的页面来访者数量,而是网站被访问的页面数量,因为一个来访者可能产生多个PV。
PV(Page View)是网站被访问的页面数量的一个指标,但不能直接知道有多少人访问了这个网站。一个来访者访问网站,可能产生若干PV数,但是独立IP数就只有1个,因此,如果对比一个网站的独立IP数和PV数,不难看出,PV数一定会大于等于独立IP数的。
UV(独立访客)即Unique Visitor,同一台客户端(PC或移动端)访问网站被计算为一个访客。一天(00:00-24:00)内相同的客户端访问同一个网站只计算一次UV。UV一般是以客户端Cookie等技术作为统计依据的,实际统计会有误差。考虑到一台客户端电脑可能会有多人使用的情况,因此,UV(独立访客)实际上并不一定是独立的自然人访问。
先来看对IP的度量: 分析所有Web服务器的访问日志信息,对IP地址段去重后计数,这是IT人员的基本计算手段
在网站的每一个(所有)页面结尾,嵌入JS等统计程序代码,待用户加载网页后,IP即传给统计IP的服务器,这种方法一般被第三方统计公司或企业内部开发日志分析程序时使用
用第三方大家比较信任的统计工具例如:谷歌的统计(GA)。
IP的统计方法简单,易用,因此,成为了多数网站衡量网站流量的重要指标之一。
对PV的度量如下: 分析Web服务的访问日志(需要排除js,css及各种图片的日志信息),只计算
HTML,PHP等页面数量。
在网站的每一个页面结尾,嵌入JS等统计程序代码,待用户加载网页后,访问数量即传给统计PV的服务器,这种方法一般被第三方统计公司或在企业内部开发日志分析程序时使用。
用第三方大家比较信任的统计工具例如:谷歌的统计(GA)
PV的统计方法也很简单,易用,因此,也是多数网站衡量网站流量的重要指标之一。
对于UV的度量如下: 通过客户端HTTP请求报文分析
一个客户端会多次请求网站服务器,每次HTTP请求都会携带客户端自身的大量信息,比如:IP地址,请求发出时间,浏览器版本,操作系统版本等等。网站服务器对这些请求进行分析,如果这些请求满足一些共同特征,比如来自同一个IP地址,且浏览器版本和操作系统版本相同,请求时间又相近等,那么就可以认为这些是来自于同一个客户端,那么多个页面访问也只算一个UV。共同特征的定义是由服务器方决定的。通常,用IP地址+其他特征共同来定义的情况较多。但此种度量方法无法解决以下问题,例
如:多个人的电脑软硬件经常雷同,并且是一个公司或者学校的人;多个人共用一个电脑的情况。
通过cookie鉴别
当客户端第一次访问某个网站服务器的时候,网站服务器会给这个客户端的电脑发出一个cookie,通常放在这个客户端电脑的C盘当中。在这个cookie中会分配一个独一无二的编号,这其中会记录一些访问服务器的信息,如访问时间,访问了哪些页面,等等。当你下次再访问这个服务器的时候,服务器就可以直接从你的电脑中找到上一次放进去的Cookie文件,并且对其进行一些更新,但那个独一无二的编号是不会变的。如果在一定时间内,服务器发现2个来访者对应的是一个编号,那么自然可以认为它来源于同一个来访者了,于是就计算1个UV。
使用Cookie的方法要比分析客户端HTTP请求头部信息分析更精确些。但也存在一些问题,比如:有的客户端为保证更高级别的安全,关闭了Cookie的功能;或者是有些客户端设置了在退出页面时自动删除Cookie,亦或你经常自己去手动删除Cookie,那么这个方法就不那么精确了。
因此,以上两个方法都只能得到近似的UV,而不是绝对精确。
UV的度量相对IP和PV来说,不但麻烦,而且要开发比较复杂的程序系统才能得到期望的结果,因此,在Linux运维领域大家提及的较少,一般企业市场及运营人员可能会关注网站的UV。
并发:网站服务器在单位时间内能够处理的最大连接数。
(1) QPS(Query Per Second)每秒查询率
每秒查询率QPS是用于衡量一个特定的查询服务器在规定时间内所处理流量多少的标准。运维工作中,DNS系统以及数据库等服务的查询性能经常用每秒查询率来衡量。
(2) IOPS(Input/Output Operations Per Second)
IOPS即每秒进行读写(I/O)操作的次数,多用于数据库等场合,衡量随机访问的性能。存储端的IOPS性能和主机端的I/O是不同的,IOPS是指存储每秒可接受多少次主机发出的访问,主机的一次I/O需要多次访问存储才可以完成。例如,主机写入一个最小的数据块,也要经过“发送写入请求,写入数据,收到写入确认”等三个步骤,也就是3个存储访问。
如何测试磁盘的存储性能?
1.连续的读写向磁盘中写入大的文件
dd if=/dev/zero of=/tmp/test01.bin bs=1K count=10000
浙公网安备 33010602011771号