HTTP协议
HTTP协议,全称HyperText Transfer Protocol即超文本传输协议,是互联网中最常用的一种网络协议。HTTP协议是互联网上的通信协议方案之一。它有很多的应用, 但最流行的就是用于web浏览器和web服务器之间的通信应用,即www应用或web应用。HTTP协议位于OSI模型中第7层应用层。
HTTP协议的WWW服务应用的默认服务端口为80,另一个加密的www服务应用(https)的默认服务端口为443,用于网银、支付等和资金交易相关的业务。
HTTP方法 | 作用描述 |
GET | 客户端请求指定资源信息,服务器返回指定资源。 |
HEAD | 只请求响应报文中的HTTP首部 |
POST | 将客户端的数据提交到服务器,例如:注册表单 |
PUT | 从客户端向服务器传送的数据替代指定的文档内容 |
DELETE | 请求服务器删除指定的资源 |
MOVE | 请求服务器将指定的页面移至另一个网络地址 |
HTTP状态码
HTTP状态码(HTTP Status Code)是用来表示web服务器响应http请求状态的数字代码。状态码是一个三位数字代码,作业是告知web客户端此次的请求是否成功,或者是采取其它的动作方式。
状态码范围 | 作用描述 |
100-199 | 指定客户端应响应的某些动作 |
200-299 | 表示请求成功 |
300-399 | 已经移动的文件并且常被包含在定位头信息中指定新的地址信息。 |
400-499 | 客户端错误 |
500-599 | 服务器错误 |
常见的状态码及对应的作用
200 - OK:服务器成功返回网页,成功的http请求,返回的标准状态码。
301 - Moved Permanently:永久跳转,所有请求的网页将永久跳转到被设定的新位置。
404 - Forbidden:禁止访问,这个请求是合法的,但是服务端因为匹配了预先设置的规则而拒绝响应客户端的请求,此类问题一般为服务器权限配置不当所致。
500 - Internal Server Error:内部服务器错误,服务器遇到了意料不到的情况,不能完成客户端请求,一般是服务器的设置或者内部程序问题所致。例如:SElinux开启,而又没有为http设置规则许可。
502 - Bad Gateway:网关问题,一般是代理服务器请求后端服务时,后端服务不可用或者没有完成响应网关服务器。一般为代理服务器下面的节点出问题所致。
503 - Service Unavailable:服务当前不可用,可能因为服务器超载或停机维护导致,或者是代理服务器后面没有可以提供服务的节点。
504 - Gateway Timeout:网关超时,一般是网关代理服务器请求后端服务时,后端服务没有在特定的时间内完成处理请求,一般是服务器过载导致没有在指定的时间内返回数据给代理服务器。
- [root@backup ~]# curl -I -s -w %{http_code} -o /dev/null www.baidu.com
- 200 #状态码200
HTTP报文
HTTP报文中有很多行内容,不同行的字段都是一些ASCII码串,各个字段的长度也是不同的。HTTP报文有两种,一种是从web客户端往web服务器的HTTP报文,称为请求报文(Request Message)。另外一种是 从web服务器发往web客户端的报文,称为响应报文(Response Message),HTTP请求和相应报文的格式类似。
HTTP请求报文
HTTP请求报文由请求行、请求头部(header)、空行和请求报文主体几个部分组成。
请求行:请求方法URL协议版本,例如:GET /index.html HTTP/1.1。
请求头:
字段名1:值1
字段名2:值2
……
例如:
Accept:image/gif,image/jpeg
Accept -Language:zh-cn
……
空行:空白无内容
请求报文主体:GET方法没有请求报文主体,POST方法才有。
请求行
请求行是请求报文的第一行,用来说明客户端想要做什么。内容由请求方法字段、URL字段和HTTP协议版本字段共3个字段组成,它们之间用空格分隔。例如:GET /index.html HTTP/1.1。
请求头部
请求头部由关键字/值组成,每行一对,关键字和值用英文冒号":"分隔。请求头部的作用是客户端把请求的相关信息告诉给服务器。
请求头信息 | 说明 |
Accept:image/gif,image/jpeg | 媒体类型 |
Accept -Language:zh-cn | 语言类型 |
Accept –Encoding:gzip,deflate | 支持压缩 |
User -Agent:Mozilla/4.0(compatible;MSIE 6.0;Windows NT;…) | 客户端类型 |
Host:<a href="http://www.baidu.com">www.baidu.com</a> | 主机名 |
与请求报文相关的最常用的请求头是Content-Type和Content-Length。
空行
最后一个请求头部信息之后是一个空行,发送回车符和换行符,通知web服务器空行以下不会有请求头部的信息了。
请求报文主体
请求报文主体中包括了要发送给web服务器的数据信息。请求报文主体不会应用于HTTP的GET命令方法,而是应用于POST方法。POST方法适用于需要客户填写表单的场合。
HTTP相应报文
HTTP相应报文由起始行、响应头部(header)、空行和响应报文主体几个部分组成,与HTTP请求报文格式类似。
HTTP协议原理
HTTP协议属于OSI模型中的第七层应用层协议,HTTP协议的重要应用就是WWW服务应用。以WWW服务应用为例,HTTP协议进行通信时,需要有客户端即终端用户和服务端即web服务器,当web客户端向web服务器发送请求报文之前,先要通过TCP/IP协议在web客户端和服务器之间建立一个TCP/IP连接。整个http协议请求的工作流程原理如下:
1、终端客户在web浏览器地址栏输入访问地址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浏览器显示访问的网站内容到屏幕。
动态web服务请求流程:
客户端发送请求àhttpd得到请求àhttpd解析请求的格式(html、css)à请求响应php解析àphp解析程序执行完毕àdb(数据库),返回结果(html)给httpdàhttpd把数据返回给客户端(可能是压缩过的)à浏览器接到返回结果(解压)。
静态网页资源的重要特征
1、每个页面都有一个固定的URL地址,且URL一般以.html、.htm、.shtml等常见形式为后缀,并且地址中不含有问号"?"或"&"等特殊符号。
2、网页内容一经发布到网站服务器上,无论是否有用户访问,每个网页的内容都是保存在网站服务器文件系统上的,也就是说,静态网页是实实在在保存在服务器上的文件实体,每个网页都是一个单独的文件。
3、网页内容相对固定的,因此,容易被搜索引擎收录。
4、网页没有数据库的支持,在网站制作和维护方面工作量较大,因此当网站信息量很大时完全依靠静态网页制作的方式比较困难。
5、网页的交互性较差,在程序功能实现方面有较大的限制。
6、网页程序在用户浏览器端解析,如IE浏览器,这样程序解析效率更高,由于服务器端不进行解析,并且不需要读取数据库,因此可接收更多的并发访问。当客户端向服务器请求数据时,服务器直接把数据从磁盘上返回(不做任何解析),当客户端拿到数据后,在浏览器端解析展示出来。
有关静态网页架构思想
高并发高访问量的场景,做架构优化,关键的环节,就是把动态网页转成静态网页,不直接请求数据库和动态服务器,并且可以把静态内容推送到前端缓存中提供服务,可以提升用户体验,节约服务器和维护成本。
动态网页资源特点
1、网页扩展名常见为asp、aspx、php、jsp、do、cgi等。
2、网页一般以数据库技术为基础,大大降低了网站维护的工作量。
3、采用动态网页技术的网站可以实现更多的功能,如用户注册、用户登录、在线调查、投票、用户管理、订单管理、发博文等等。
4、动态网页并不是独立存在于服务器上的一个个网页文件(php/jsp),当用户请求服务器上的动态程序时,服务器解析程序并读取数据库返回一个完整的网页内容。
5、动态网页中的"?"对搜索引擎的收录存在一定的问题,搜索引擎一般不会从一个网站的数据库中访问全部网页,或者处于技术方面的考虑,搜索蜘蛛一般不会去抓取网站中"?"后面的内容,因此采用动态网页的网站在进行搜索引擎推广时需要做一定的技术处理(伪静态技术)才能适应搜索引擎的抓取的要求。
6、程序在服务器端解析,服务端如:php引擎、java容器(tomcat、resin、jboss、weblogic),由于程序在服务端解析,因此,会消耗大量的CPU和内存等资源,并且多数还要读取数据库等服务,因此,访问效率不如静态网页。
有关动态网页架构思想
1、一般来说,静态网页的效果是动态网页的10-30倍。
2、动态网页效率很差,并发能力也很低,高并发场景中,应尽可能转换成静态网页提供服务。
3、动态转静态也要根据业务需求设计,例如,对于更新频繁的网站会产生数据不一致的情况,即用户看到的数据不会是最新的内容。
4、动态转静态,高并发网站必备的架构方案,是高级架构师的职责所在。
伪静态网页特点
从网站的URL地址看,伪静态表面上看起来是静态内容(如地址结尾带html),这是通过rewite规则来实现的URL地址重写。改写后的URL地址规范、美观,有利于搜索引擎抓取,以及用户访问体验加强。伪静态网页还是动态网页,从性能上考虑,伪静态功能不但没有提示网站性能,反而会降低网站的性能。
生产web架构优化
由于静态网页程序在客户端解析,大大降低了服务端的访问压力,因此解析效率更高,在实际高并发网站架构中,可以考虑把用户请求的数据解析后存成静态文件存放于磁盘中或放于内存中来降低动态服务器的压力,节约企业成本,提示用户体验。
门户新闻业务
新闻网站的特点是一旦发布完成,几乎不会再改动网页内容。因此,对于新闻的业务内容静态化相对比较简单:
第一步:程序支持发布内容直接转成静态。
第二步:运营编辑人员发布新闻网页后,后台程序立刻将动态网页生成静态文件。
第三步:运维人员通过触发把生成的静态网页发布到事先搭建好的公司缓存集群服务器上,或者把静态内容同步到全国所有CDN服务器节点上,然后,再提供给用户访问浏览。
视频网站业务
优酷视频,用户上传视频,需要经历转码-审核的过程,大概1-2小时,转码-审核-推送(同步到全国所有CDN服务器节点)。
其他
blog、bbs、sns、微博社区业务、电商(淘宝、京东)
异步方式,消息中间件、消息队列。
网站流量度量术语
IP(独立IP):即Internet Protocol,这里指独立IP数,独立IP数是指不同IP地址的计算机访问网站的被计算的总次数。独立IP数是衡量网站流量的一个重要指标。一般一天内(00:00-24:00)内相同IP地址的客户端访问网站页面只被计算为一次。
PV(访问量):即Page View,页面浏览量或点击量,不管客户端是不是相同,也不管IP是不是相同。用户每次访问一个网站页面都会被计算一个PV。
UV(独立访客):即Unique Visitor,同一台客户端(PC或移动端)访问网站被计算为一个访客。UV一般是以客户端Cookie等技术作为统计数据的,实际统计会有误差。
常见企业网站排名及PV/IP访问量
网站 | 独立IP/日 | PV数/日 | 网站并发级别 | 机器数量 |
582000 | 1338600 | 10000 | 50台 | |
1734000 | 13872000 | 10000-30000 | 几百台 | |
1398000 | 22927200 | 10000-30000 | 几百台 | |
30180000 | 166593600 | 几十万 | 千台 | |
46620000 | 489510000 | 几十万-几百万 | 万台 | |
6108000 | 98949600 | 数万 | 千台 | |
10320000 | 79154400 | 十万 | 千台 | |
930000 | 7254000 | 10000-30000 | 百台 |
web服务
常用来提供静态web服务的软件
1、apache:中小型web服务的主流,web服务器中的老大哥。
2、nginx:大型网站web服务主流。nginx的分支tengine目前也在飞速发展。
3、lighttpd:社区不活跃,静态解析效率很高。
常用来提供动态服务的软件
1、php(fastcgi):大中小型网站都会使用,动态网页语言php程序的解析容器。
2、tomcat:中小型企业动态web服务主流,互联网java容器主流(jsp、do)。
3、resin:大型动态web服务主流,互联网java容器主流(jsp、do)。
4、IIS:微软的windows下的web服务软件(asp、aspx)。