1 http协议
1.1 http协议简介
HyperText Transfer Protocol,超文本传输协议,重要应用之一就是WWW服务
WWW,全称World Wide Web,万维网
http协议的WWW服务应用默认端口:80
加密的WWW服务应用https默认端口:443
http协议版本:http1.0 http1.1 http2.0
1.2 http请求方法
根据HTTP标准,HTTP请求可以使用多种请求方法。
HTTP1.0定义了三种请求方法: GET, POST 和 HEAD方法。
HTTP1.1新增了五种请求方法:OPTIONS, PUT, DELETE, TRACE 和 CONNECT 方法。
序号 | 方法 | 作用描述 |
1 | GET | 请求指定的资源信息,服务器返回指定资源 |
2 | HEAD | 类似于get请求,不过只返回http首部,用于获得报头 |
3 | POST | 向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST请求可能会导致新的资源的建立和/或已有资源的修改。 |
4 | PUT | 从客户端向服务器传送的数据取代指定的文档的内容。 |
5 | DELETE | 请求服务器删除指定的页面。 |
6 | CONNECT | HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。 |
7 | OPTIONS | 允许客户端查看服务器的性能。 |
8 | TRACE | 回显服务器收到的请求,主要用于测试或诊断。 |
9 | MOVE | 请求服务器将指定的页面移至另一个网络地址 |
1.3 http状态码
当浏览者访问一个网页时,浏览者的浏览器会向网页所在服务器发出请求。当浏览器接收并显示网页前,此网页所在的服务器会返回一个包含HTTP状态码的信息头(server header)用以响应浏览器的请求。
HTTP状态码的英文为HTTP Status Code。
下面是常见的HTTP状态码:
200 - 请求成功
301 - 资源(网页等)被永久转移到其它URL
404 - 请求的资源(网页等)不存在
500 - 内部服务器错误
http状态码分类
HTTP状态码由三个十进制数字组成,第一个十进制数字定义了状态码的类型,后两个数字没有分类的作用。HTTP状态码共分为5种类型:
分类 | 描述 |
1** | 信息,服务器收到请求,需要请求者继续执行操作 |
2** | 成功,操作被成功接收并处理 |
3** | 已经移动的文件,重定向,需要进一步操作以完成请求 |
4** | 客户端错误,请求包含语法错误或无法完成请求 |
5** | 服务器错误,服务器在处理请求的过程中发生了错误 |
常见的http状态码列表
状态代码 | 详细描述 |
200 OK | 服务器成功返回页面,成功的http请求返回的标准状态码 |
301 Moved Permanently | 永久跳转,所请求的网页将永久跳转到被设定的新位置,例如:baidu.com跳转到www.baidu.com |
403 Forbidden | 禁止访问,虽然这个请求是合法的,但是服务器端因为匹配了预先设置的规则而拒绝相应客户端的请求,此类问题一般为服务器或服务权限配置不当所致 |
404 Not Found | 服务器找不到客户端请求的指定页面,可能是客户端请求了服务器上不存在的资源所致 |
500 Internal Server Error | 内部服务器错误,服务器遇到了意料不到的情况,不能完成客户的请求。这是一个较为笼统的报错,一般为服务器的设置或内部程序问题导致。例如:Selinux开启,而又没有为http设置规则许可,客户端访问就是500 |
502 Bad Gateway | 坏的网关,一般是代理服务器请求后端服务时,后端服务不可用或没有完成响应网关服务器。这通常为反向代理服务器下面的节点出问题所致 |
503 Service Unavailable | 服务当前不可用,可能是服务器超载或停机维护导致的,或者是反向代理服务器后面没有可以提供服务的节点 |
504 Gateway Time-out | 网关超时,一般是网关代理服务器请求后端服务时,后端服务没有在特定的时间内完成处理请求。多数是服务器过载导致没有在指定的时间内返回数据给前端代理服务器 |
http状态码的命令行查看
curl命令查看
[root@nfs-server ~]# curl -I www.airocov.com
HTTP/1.1 200 OK
Date: Mon, 17 Jul 2017 13:05:41 GMT
Server: Apache/2.4.7 (Ubuntu)
1.4 http报文(请求报文和响应报文)
HTTP请求报文(request message)
一个HTTP请求报文由请求行(request line)、请求头部(header)、空行和请求数据4个部分组成,下图给出了请求报文的一般格式。
<request-line>
<headers>
<blank line>
[<request-body>
1.请求行
请求行由请求方法字段、URL字段和HTTP协议版本字段3个字段组成,它们用空格分隔。例如,GET /index.html HTTP/1.1。
HTTP协议的请求方法有GET、POST、HEAD、PUT、DELETE、OPTIONS、TRACE、CONNECT。
而常见的有如下几种:
1).GET
最常见的一种请求方式,当客户端要从服务器中读取文档时,当点击网页上的链接或者通过在浏览器的地址栏输入网址来浏览网页的,使用的都是GET方式。GET方法要求服务器将URL定位的资源放在响应报文的数据部分,回送给客户端。使用GET方法时,请求参数和对应的值附加在URL后面,利用一个问号(“?”)代表URL的结尾与请求参数的开始,传递参数长度受限制。例如,/index.jsp?id=100&op=bind,这样通过GET方式传递的数据直接表示在地址中,所以我们可以把请求结果以链接的形式发送给好友。以用google搜索domety为例,Request格式如下:
复制代码
GET /search?hl=zh-CN&source=hp&q=domety&aq=f&oq= HTTP/1.1
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint,
application/msword, application/x-silverlight, application/x-shockwave-flash, */*
Referer: <a href="http://www.google.cn/">http://www.google.cn/</a>
Accept-Language: zh-cn
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727; TheWorld)
Host: <a href="http://www.google.cn">www.google.cn</a>
Connection: Keep-Alive
Cookie: PREF=ID=80a06da87be9ae3c:U=f7167333e2c3b714:NW=1:TM=1261551909:LM=1261551917:S=ybYcq2wpfefs4V9g;
NID=31=ojj8d-IygaEtSxLgaJmqSjVhCspkviJrB6omjamNrSm8lZhKy_yMfO2M4QMRKcH1g0iQv9u-2hfBW7bUFwVh7pGaRUb0RnHcJU37y-
FxlRugatx63JLv7CWMD6UB_O_r
复制代码
可以看到,GET方式的请求一般不包含”请求内容”部分,请求数据以地址的形式表现在请求行。地址链接如下:
<a href="http://www.google.cn/search?hl=zh-CN&source=hp&q=domety&aq=f&oq=">http://www.google.cn/search?hl=zh-CN&source=hp
&q=domety&aq=f&oq=</a>
地址中”?”之后的部分就是通过GET发送的请求数据,我们可以在地址栏中清楚的看到,各个数据之间用”&”符号隔开。显然,这种方式不适合传送私密数据。另外,由于不同的浏览器对地址的字符限制也有所不同,一般最多只能识别1024个字符,所以如果需要传送大量数据的时候,也不适合使用GET方式。
2).POST
对于上面提到的不适合使用GET方式的情况,可以考虑使用POST方式,因为使用POST方法可以允许客户端给服务器提供信息较多。POST方法将请求参数封装在HTTP请求数据中,以名称/值的形式出现,可以传输大量数据,这样POST方式对传送的数据大小没有限制,而且也不会显示在URL中。还以上面的搜索domety为例,如果使用POST方式的话,格式如下:
复制代码
POST /search HTTP/1.1
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint,
application/msword, application/x-silverlight, application/x-shockwave-flash, */*
Referer: <a href="http://www.google.cn/">http://www.google.cn/</a>
Accept-Language: zh-cn
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727; TheWorld)
Host: <a href="http://www.google.cn">www.google.cn</a>
Connection: Keep-Alive
Cookie: PREF=ID=80a06da87be9ae3c:U=f7167333e2c3b714:NW=1:TM=1261551909:LM=1261551917:S=ybYcq2wpfefs4V9g;
NID=31=ojj8d-IygaEtSxLgaJmqSjVhCspkviJrB6omjamNrSm8lZhKy_yMfO2M4QMRKcH1g0iQv9u-2hfBW7bUFwVh7pGaRUb0RnHcJU37y-
FxlRugatx63JLv7CWMD6UB_O_r
hl=zh-CN&source=hp&q=domety
复制代码
可以看到,POST方式请求行中不包含数据字符串,这些数据保存在”请求内容”部分,各数据之间也是使用”&”符号隔开。POST方式大多用于页面的表单中。因为POST也能完成GET的功能,因此多数人在设计表单的时候一律都使用POST方式,其实这是一个误区。GET方式也有自己的特点和优势,我们应该根据不同的情况来选择是使用GET还是使用POST。
3).HEAD
HEAD就像GET,只不过服务端接受到HEAD请求后只返回响应头,而不会发送响应内容。当我们只需要查看某个页面的状态的时候,使用HEAD是非常高效的,因为在传输的过程中省去了页面内容。
2.请求头部
请求头部由关键字/值对组成,每行一对,关键字和值用英文冒号“:”分隔。请求头部通知服务器有关于客户端请求的信息,典型的请求头有:
User-Agent:产生请求的浏览器类型。
Accept:客户端可识别的内容类型列表。
Host:请求的主机名,允许多个域名同处一个IP地址,即虚拟主机。
3.空行
最后一个请求头之后是一个空行,发送回车符和换行符,通知服务器以下不会再有请求头部的信息了。
4.请求报文主体(请求数据)
请求数据不在GET方法中使用,而是在POST方法中使用。POST方法适用于需要客户填写表单的场合。与请求数据相关的最常使用的请求头是Content-Type和Content-Length。
HTTP响应报文(response message)
HTTP响应也由三个部分组成,分别是:起始行、响应头部、响应报文主体。
如下所示,HTTP响应的格式与请求的格式十分类似:
<status-line>
<headers>
<blank line>
[<response-body>
1.起始行
响应报文的起始行也叫状态行,用来说明服务器响应客户端请求的状况。一般为协议版本号、数字状态码、状态情况。例如:HTTP/1.1 200 OK
2.响应头部
和请求报文类似,起始行的后面一般有若干个头部字段。每个头部字段都包含一个名字和一个值,两者之间用冒号分隔。头部结尾也是以一个空行结束的。常见的头部信息有:
HTTP/1.1 200 OK
Date: Sat, 31 Dec 2005 23:59:59 GMT
Content-Type: text/html;charset=ISO-8859-1
Content-Length: 122
3.空行
最后一个响应头部信息之后是一个空行,通过发送回车符和换行符,通知客户端空行下文无头部信息了
4.响应报文主体
响应报文主体中装载了要返回给客户端的数据。这些数据可以是文本,也可以是二进制的。实例:
<html>
<head>
<title>Wrox Homepage</title>
</head>
<body>
<!-- body goes here -->
</body>
</html>
下面给出一个HTTP响应报文例子
HTTP/1.1 200 OK
Date: Sat, 31 Dec 2005 23:59:59 GMT
Content-Type: text/html;charset=ISO-8859-1
Content-Length: 122
<html>
<head>
<title>Wrox Homepage</title>
</head>
<body>
<!-- body goes here -->
</body>
</html>
1.5 http协议原理
整个HTTP协议请求的工作流程:
1)终端客户在web浏览器地址栏输入访问地址http://www.etiantian.org/index.htnl
2)web浏览器请求DNS服务器把域名www.etiantian.org转换成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浏览器显示访问的网站内容到屏幕上
2 http资源
2.1 媒体类型
当web服务器响应HTTP请求时,会为每一个HTTP对象数据加一个MIME类型,当web浏览器获取到服务器返回的对象时,会去查看相关的MIME类型,并进行相应处理。
MIME类型存在于HTTP响应报文的响应头部信息里,常见的MIME类型:略
查看Nginx支持的媒体类型:
[root@lnmp02 ~]# less /application/nginx/conf/mime.types
types {
text/html html htm shtml;
text/css css;
text/xml xml;
image/gif gif;
image/jpeg jpeg jpg;
application/javascript js;
application/atom+xml atom;
application/rss+xml rss;
…省略…
2.2 URL介绍
URL,全称为Uniform Resource Location,统一资源定位符,也称为网址
URL的格式由三部分组成:
1、协议,例如:http
2、主机资源服务器IP地址或域名(端口),例如:www.etiantian.org
3、主机资源的具体地址,如目录和文件名等,例如:etiantian/index.html
第一部分和第二部分用“://”分隔,第二部分和第三部分用“/”分隔
2.3 URI介绍
Uniform Resource Identifier,统一资源标识符,是一个用于标识某一互联网资源名称的字符串。
URL是URI命名机制的一个子集
2.4 静态网页资源
纯粹HTML格式的网页(图片,视频,JS,CSS)通常被成为静态网页
静态网页是相对于动态网页而言的,没有后台数据库,不含程序,不可交互
静态网页语言:HTML、JS、CSS、XML、SHTML等
静态网页的核心特点:
1)程序在客户浏览器端解析,不读取后端数据库,因此性能和效率很高
2)因为后端没有数据库支持,所以和用户的交互性较差,功能实现也很少
2.5 动态网页资源
URL后缀多半是.asp、.aspx、.php、.do、.cgi等,并且一般都含有标志性的符号——“?,&”,大多数情况下后端都需要有数据库支持
动态网页资源特点:
1)扩展名后缀常见为:asp、.aspx、.php、.do、.cgi等
2)网页一般以数据库技术为基础,大大降低了网站维护的工作量
3)采用动态网页技术的网站可以实现更多功能,例如注册,登录,发博文等
4)动态网页并不是独立存在于服务器上的网页文件,服务器通过读取数据库来返回一个完整的网页
5)动态网页中的“?”在搜索引擎收录方面存在一定的问题
2.6 伪静态网页
通过某些技术(如rewrite)把动态网页URL地址伪装成静态网页URL地址
伪静态网页小结:
1、利用rewrite技术将动态网页伪装成静态网页
2、便于搜索引擎收录,提升用户访问量及用户体验
3、访问性能没有提升,并且转换成伪静态会消耗资源,因此性能会下降
4、尽可能地将动态网页转换成真正的静态网页
5、并发量不是很大或动态更新过于频繁,用rewrite实现伪静态也是不错的
6、伪静态网页的实现过程,一般由产品运营提出需求,开发和运维共同实现
3 网站流量度量术语
3.1 IP
指的是独立IP数,也就是说忽略了局域网
3.2 PV
PV(访问量)Page View,页面浏览。
页面浏览量,不管客户端是不是相同,也不管IP是不是相同,用户只要访问网站页面就会被计算PV,一次计一个PV。
3.3 UV
UV(独立访客)Unique Visitor
同一个客户端访问网站被计为一个访客。一天内相同的客户端访问同一个网站只计一次UV
3.4 企业对IP、PV、UV的度量
对IP的度量
1、分析web服务器的访问日志信息,对IP地址端去重后计数
2、在页面结尾,嵌入JS等统计程序代码,用户加载页面后,IP即传给统计IP的服务器。
3、第三方统计工具,例如:谷歌的统计GA
对PV的度量
1、分析web服务的访问日志,只计算HTML、PHP等页面数量
2、嵌入JS等统计程序代码
3、第三方统计工具,例如:谷歌的统计GA
对UV的度量
1、通过客户端HTTP请求报文分析
2、通过Cookie鉴别
4 WWW服务软件介绍
4.1 当前互联网主流Web服务说明
当前互联网主流web服务软件
Apache
Nginx:Nginx的分支Tengine
Lighttpd
常用来提供动态服务的软件
PHP(FastCGI)
Tomcat
Resin
IIS
4.2 静态服务软件和动态服务软件
WWW静态服务软件:Apache、Nginx
WWW动态服务软件:Resin、Tomcat、PHP
PHP在配合Apache解析动态程序时,他用的是mod_php5.so模块;
在配合Nginx解析动态程序时,常用FastCGI守护进程模式提供服务