HTTP:全称 Hyper Text Transfer Protocol,超文本传输协议。位于OSI模型第七层,HTTP协议最初的目的就是提供一种发布和接收HTML(超文本标记语言)页面的方法。默认端口为80。
HTTP的重要应用之一的WWW服务,WWW全称为 World Wide Web,即万维网,用于web浏览器和web服务器之间的通信,即WWW应用或web应用。另外,一种加密的HTTP协议称为HTTPS协议,端口是443。当今,WWW服务、HTTP服务、HTTPS服务的概念经常混淆,通常都认为是一般的网站服务。
请求方法是指,用户在请求web服务器时,告诉服务器要执行具体的什么动作。
HTTP方法 | 动作描述 |
---|---|
GET | 客户端请求指定资源信息,服务器返回指定资源 |
POST | 将客户端的数据提交到服务器,例如:注册表单 |
PUT | 从客户端向服务器传送数据,取代指定的文档内容 |
HEAD | 只请求响应报文中的HTTP首部 |
DELETE | 请求服务器删除Request-URI所标识的资源 |
MOVE | 请求服务器将指定的页面移至另一个网络地址 |
HTTP状态码是web服务器用来响应HTTP请求状态的数字码
状态码 | 详细说明 |
---|---|
200 — OK | 成功的HTTP请求返回的标准状态码,代表服务器成功返回网页 |
301 — Moved Permanently | 永久跳转,代表所请求的网页将永久跳转到被设定的新的位置 |
403 — Forbidden | 禁止访问,代表请求是合法的,但是服务端因为预先设置的规则拒绝响应客户端的请求。 1. 没有首页文件,index.html、index.php等(并且没有开目录浏览功能) 2. 没有站点目录权限以及首页文件权限 |
404 — Not Found | 服务端找不到客户端请求的资源 |
500 — Internal Server Error | 内部服务器错误,一般为服务器的设置错误或服务端程序问题导致,比如SElinux等。 |
502 — Bad Gateway | 网关错误,一般是代理服务器请求后端服务时,后端服务不可用。 一般是反向代理服务器下面的节点出问题 |
503 — Service Unavailable | 服务不可用,可能是服务器超载或停机维护,或是反向代理服务器后没有可以提供服务的节点 |
504 — Gateway Timeout | 网关超时,一般是代理服务器请求后端服务时,后端服务没有在特定时间内完成响应。 一般是服务器过载导致没有在指定时间内返回数据给前端代理服务器 |
一般HTTP状态码会在响应头的第一行给出,Linux中可以通过以下命令查看:
1 | curl -I www.baidu.com 2>/dev/null | head -1 # -I 是查看响应头,此处需要将多余信息丢弃 |
HTTP报文分为请求报文和响应报文。
请求报文:HTTP客户端向服务端发送的报文;
响应报文:HTTP服务端向客户端发送的报文。
HTTP请求报文
报文格式 | 报文信息 |
---|---|
请求行 | 请求方法 URL 协议版本 |
请求头 | 字段名1:值1 字段名2:值2 …… |
空行 | 空白无内容 |
请求报文主体 | GET方法没有请求报文主体,POST方法才有 |
响应报文
报文格式 | 报文信息 |
---|---|
起始行 | 协议及版本号 数字状态码 状态信息 |
响应头部 | 字段名1:值1 字段名2:值2 …… |
空行 | 空白无内容 |
响应报文主体 | HTML网页 |
查看请求报文和响应报文的方法
1 | curl -v 域名 |
请求报文头部
1 | :authority:s2.51cto.com # 域名 |
响应报文头部
1 | HTTP/1.1 200 OK # 协议、状态码、状态信息 |
URL:Uniform Resource Location,统一资源定位符。通俗说就是网址,比如:https://twitter.com/explore
URI:Uniform Resource Identifier,统一资源标识符,比如网址、邮箱地址等。URL是URI的子集。
URL的组成
协议 | 分隔符号 | IP地址域名 | 分隔符号 | 资源目录地址 |
---|---|---|---|---|
http | :// | twitter.com | / | explore |
这里的IP不是指IP协议,而是指独立IP数:不同IP地址的计算机访问网站时被计算的总次数,独立IP数是衡量网站流量的一个重要指标。
记录独立IP的时间可为一天或一个月等,目前通用的标准是一天,即一天内,相同IP地址的客户端访问网站页面被计算为一次。
但是独立IP数的统计并不准确,因为在局域网内可能有很多内网IP,而出口只有一个。局域网内的很多IP访问,只统计为一个独立IP数。
对IP的统计方法:
分析所有web服务器的访问日志信息,对IP地址去重后计数,这是IT人员的基本计数手段。
1 | awk '{print $1}' access.log | sort | uniq | wc -l |
在网站的每一个页面结尾,嵌入JS等统计程序代码,用户只要加载网页,就会将IP传给统计IP的服务器,这种方法一般被第三方统计公司或企业内部开发日志分析程序时使用。比如:谷歌的统计,百度,腾讯的统计等
PV是指page view,通俗来说,一个页面的访问就是一个PV。一般来说一个用户可以对应几十个PV。大型的架构一般对应几百万日PV。
对PV的统计方法,比如可以通过对Nginx的访问日志access.log统计,其中的.html
,.shtml
,.php
等信息。
1 >egrep '(html|php|shtml)' access.log | awk '{print substr($4,2,11)}' | sort | uniq -c
注意,使用 uniq -c
命令前,先要进行 sort
排序,因为 uniq 去重的原理是比较相邻的行,然后除去第二行和该行的后续副本,因此在使用 uniq 命令之前,请使用 sort 命令使所有重复行相邻。
UV是指Unique Visitor,独立访客。UV更接近真实的个人。
对UV的统计方法:
UV是以客户端HTTP请求报文或者客户端Cookie等技术作为统计依据的,一天内相同的客户端访问同一个网站只计算一次UV。考虑到一台客户端电脑可能会有多人访问的情况,并不一定是独立的自然人访问,所以实际统计会有误差。也可以用「客户端 IP 地址」来近似统计 UV。
UV分组,统计每天的UV。这里同样是以客户端IP来近似统计的。
1 | awk '{print substr($4,2,11) " " $1}' access.log| sort | uniq | awk '{uv[$1]++;next}END{for (ip in uv) print ip, uv[ip]}' |
并发是指单位时间段的连接数或者用户数
统计当前网络连接数总量
1 >grep '^tcp' netatat.log | grep ESTABLISH | wc -l
统计每个状态的总量
1 >grep '^tcp' netstat.log | awk '{++S[$NF]}END{for(k in S)print S[k],k}' | sort -rnd