Day47-http和www基础2
- 1.Linux下实践观察HTTP协议通信过程
- 1.1 DNS解析过程
- 1.2 tcp三次握手
- 1.3 发起HTTP请求报文阶段
- 1.4 请求报文阶段
- 1.5 响应报文部分
- 1.6 分析URL,DNS解析
- 1.7 HTTPS连接建立的过程
- 1.8 请求报文阶段
- 1.8.1 referer
- 1.8.2 如何解决防盗链?
- 2. HTTP资源
- 2.1 MIME类型
- 2.2 URL
- 2.3 URI
- 2.4 网站流量度量术语
- 2.4.1 IP(Internet Protocol)
- 2.4.2 PV(Page View)
- 2.4.3 UV(独立访客)
- 2.5 企业网站对IP、PV、UV的度量
- 2.5.1 IP度量
- 2.5.2 PV度量
- 2.5.3 UV度量
- 3. 网站并发连接:吞吐量
- 3.1 同时最大访问数量
- 3.2 如何测定自己网站的并发能力?
- 3.3 例如:某网站的并发是5000
- 3.4 扩展教学
1.Linux下实践观察HTTP协议通信过程
读者可以使用Linux下工具curl、wget、tcpdump(wireshark)、fiddler等工具根据原理实践查看通信的过程。这里以curl为例讲解如下:
[root@m01 scripts]# curl -v www.baidu.com #<==使用-v参数或者wget命令—debug参数。
* About to connect() to www.baidu.com port 80 (#0)
* Trying 220.181.111.37...
* Connected to www.baidu.com (220.181.111.37) port 80 (#0)
> GET / HTTP/1.1 #<==请求行信息。
> User-Agent: curl/7.29.0 #<==以下两行为请求头部信息。
> Host: www.baidu.com
> Accept: */*
> #<==空行。
< HTTP/1.1 200 OK #<==响应起始行信息。
< Server: bfe/1.0.8.18 #<==以下若干行为响应头部信息,这部分内容可以很多。
< Date: Wed, 15 May 2019 08:41:35 GMT
< Content-Type: text/html
< Content-Length: 2381
< Last-Modified: Mon, 23 Jan 2017 13:27:36 GMT
< Connection: Keep-Alive
< ETag: "588604c8-94d"
< Cache-Control: private, no-cache, no-store, proxy-revalidate, no-transform
< Pragma: no-cache
< Set-Cookie: BDORZ=27315; max-age=86400; domain=.baidu.com; path=/
< Accept-Ranges: bytes
< #<==空行。
<!DOCTYPE html> #<==响应报文主体。
<!--STATUS OK--><html> <head><meta http-equiv=content-type content=text/html;charset=utf-8><meta http-equiv=X-UA-Compatible content=IE=Edge><meta content=always name=referrer><link rel=stylesheet type=text/css href=http://s1.bdstatic.com/r/www/cache/bdorz/baidu.min.css><title>百度一下,你就知道</title></head> <body link=#0000cc>…省略若干行…<a href=http://www.baidu.com/duty/>使用百度前必读</a> <a href=http://jianyi.baidu.com/ class=cp-feedback>意见反馈</a> 京ICP证030173号 <img src=//www.baidu.com/img/gs.gif> </p> </div> </div> </div> </body> </html>
* Connection #0 to host www.baidu.com left intact
[root@web01 ~]# wget --debug www.jd.com
DEBUG output created by Wget 1.14 on linux-gnu.
URI encoding = “UTF-8”
Converted file name 'index.html' (UTF-8) -> 'index.html' (UTF-8)
Converted file name 'index.html' (UTF-8) -> 'index.html' (UTF-8)
--2021-07-08 15:09:53-- http://www.jd.com/
1.1 DNS解析过程
正在解析主机 www.jd.com (www.jd.com)... 60.9.5.3
Caching www.jd.com => 60.9.5.3
1.2 tcp三次握手
正在连接 www.jd.com (www.jd.com)|60.9.5.3|:80... 已连接。
Created socket 3.
Releasing 0x0000000000f22c70 (new refcount 1).
1.3 发起HTTP请求报文阶段
1.4 请求报文阶段
---request begin---
GET / HTTP/1.1
User-Agent: Wget/1.14 (linux-gnu)
Accept: */*
Host: www.jd.com
Connection: Keep-Alive
---request end---
1.5 响应报文部分
已发出 HTTP 请求,正在等待回应…
---response begin---
HTTP/1.1 302 Moved Temporarily
Server: nginx
Date: Thu, 08 Jul 2021 07:09:53 GMT
Content-Type: text/html
Content-Length: 138
Connection: keep-alive
Location: https://www.jd.com/
Access-Control-Allow-Origin: *
Timing-Allow-Origin: *
X-Trace: 302-1625728193408-0-0-0-0-0
Strict-Transport-Security: max-age=3600
---response end---
302 Moved Temporarily
Registered socket 3 for persistent reuse.
位置:https://www.jd.com/ [跟随至新的 URL]
Skipping 138 bytes of body: [<html>
<head><title>302 Found</title></head>
<body>
<center><h1>302 Found</h1></center>
<hr><center>nginx</center>
</body>
</html>
] done.
1.6 分析URL,DNS解析
URI content encoding = None
Converted file name 'index.html' (UTF-8) -> 'index.html' (UTF-8)
Converted file name 'index.html' (UTF-8) -> 'index.html' (UTF-8)
--2021-07-08 15:09:53-- https://www.jd.com/
Found www.jd.com in host_name_addresses_map (0xf22c70)
正在连接 www.jd.com (www.jd.com)|60.9.5.3|:443... 已连接。
1.7 HTTPS连接建立的过程
Created socket 4.
Releasing 0x0000000000f22c70 (new refcount 1).
Initiating SSL handshake.
Handshake successful; connected socket 4 to SSL handle 0x000000000100b8b0
certificate:
subject: /C=CN/ST=beijing/L=beijing/O=BEIJING JINGDONG SHANGKE INFORMATION TECHNOLOGY CO., LTD./CN=*.jd.com
issuer: /C=BE/O=GlobalSign nv-sa/CN=GlobalSign RSA OV SSL CA 2018
X509 certificate successfully verified and matches host www.jd.com
1.8 请求报文阶段
---request begin---
GET / HTTP/1.1
User-Agent: Wget/1.14 (linux-gnu)
Accept: */*
Host: www.jd.com
Connection: Keep-Alive
---request end---
已发出 HTTP 请求,正在等待回应...
---response begin---
HTTP/1.1 200 OK
Server: nginx
Date: Thu, 08 Jul 2021 07:09:53 GMT
Content-Type: text/html; charset=utf-8
Content-Length: 125476
Connection: keep-alive
Vary: Accept-Encoding
Vary: Accept-Encoding
init-worker-firstscreen: off
init-worker-pageconfig: on
Expires: Thu, 08 Jul 2021 07:10:19 GMT
Cache-Control: max-age=30
ser: 133.227
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
X-Frame-Options: SAMEORIGIN
Age: 4
Via: http/1.1 ORI-CLOUD-JN2-MIX-17 (jcs [cRs f ]), http/1.1 HB-UNI-3-MIX-20 (jcs [cRs f ])
Access-Control-Allow-Origin: *
Timing-Allow-Origin: *
X-Trace: 200-1625728189381-0-0-0-2-2;200-1625728189424-0-0-0-95-95;200-1625728193426-0-0-0-1-1
Strict-Transport-Security: max-age=3600
---response end---
200 OK
Disabling further reuse of socket 3.
Closed fd 3
Registered socket 4 for persistent reuse.
URI content encoding = “utf-8”
长度:125476 (123K) [text/html]
正在保存至: “index.html”
100%[=======================================================================================================>] 125,476 --.-K/s 用时 0.03s
2021-07-08 15:09:53 (4.60 MB/s) - 已保存 “index.html” [125476/125476])
要求录一个,发到B站。
日PV1一个亿架构。
1)浏览器缓存80%,2000万
2)CDN缓存98%,还剩2%*2000万=40万,CDN缓存条件,静态资源(图片,文件(html,css,js)、视频)。
3)搭建撑住40万PV架构。
请求头部分字段:
:authority: mercury.jd.com #域名
:method: GET #请求方法
:path: /log.gif?t=exp_log. #路径
:scheme: https #https请求
accept: image/avif,image/webp #请求资源类型。
accept-encoding: gzip, deflate, br #是否压缩,gzip压缩。web服务优化的核心*****。
accept-language: zh-CN,zh;q=0.9 #语言,可以根据请求语言给你放回想要的页面。
cache-control: no-cache #是否缓存控制。Web服务优化的核心*****。
cookie: cud=4e56799c797eb92844f232 #客户端会话,session(服务器端)*****
扩展作业:cookie和session是啥,然后什么区别?
pragma: no-cache
referer: https://www.jd.com/ #referer 1)防盗链。2)统计广告效果。
user-agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36
#客户机资源信息,PC还是手机,还是平板。APP访问专为手机准备。手机打开浏览器。
#后台内容不变。前端,PC服务器和wap服务器。 Web优化核心。
Host: www.jd.com #主机头携带域名,nginx配置多虚拟主机。www.jd.com,a.jd.com,b.jd.com 对应三个站点目录.
#如果没有携带主机头,服务器会把第一个虚拟主机的内容返回给客户端。
#限制ip直接访问。把nginx第一个虚拟主机留空或做限制访问。
Connection: Keep-Alive #长链接。
1.8.1 referer
1.防盗链(实现防盗链)
1)www.oldboy.com/老男孩77-www.jpg
2)www.abc.com
[www课程讲解] ===>www.oldboy.com/老男孩77-www.mp4
xxx xxxx
1.8.2 如何解决防盗链?
nginx日志
/www.oldboy.com/老男孩77-www.jpg referer:www.abc.com
nginx配置:
凡是referer地址不是*.oldboy.com *.douyin *.toutiao.com,给他一个特定图片(禁止盗链)。
案例:平时CDN带宽200M,突然间1个小时增到1G,awk分析CDN日志,
1)访问地址.jpg 访问次数 大小 访问大小*访问次数(降序)
2)做防盗链。
2.统计付费广告价值
http响应头header
HTTP/1.1 200 OK ##协议 状态码 状态信息。
Server: nginx ##Web服务信息及版本,把版本取消了。***** oldboy/9.9
Date: Thu, 08 Jul 2021 07:09:53 GMT
Content-Type: text/html; charset=utf-8 #请求类型
Content-Length: 125476 #长度
Connection: keep-alive #长连接
Vary: Accept-Encoding #Vary: Accept-Encoding 指定缓存服务器是否压缩
Expires: Thu, 08 Jul 2021 07:10:19 GMT #缓存时间
Cache-Control: max-age=30 #缓存
指定“Vary: Accept-Encoding”标头,用一句话来说明它的意义,就是“告诉代理服务器缓存两种版本的资源:压缩和非压缩,这有助于避免一些公共代理不能正确地检测Content-Encoding标头的问题。”不过我想很多人都不理解这句话是什么意思,所以需要更详细的解释。请移步到:标头“Vary:Accept-Encoding”指定方法及其重要性分析
标头“Vary:Accept-Encoding”的指定方法
Nginx
gzip_vary on
2. HTTP资源
2.1 MIME类型
Web服务器会把通过Web传输的每个对象都打上名为MIME类型(MIME type)的数据格式标签。
2.2 URL
全称Uniform Resource Location,中文翻译为统一资源定位符
网址就是URL
http://img30.360buyimg.com/popWareDetail/jfs/t1/151567/5/19741/177525/60546726E28b0461e/b3bb88a14e8e5262.jpg
2.3 URI
全称Uniform Resource Identifier,中文翻译为统一资源标识符
URL是URI命名机制的一个子集
URI标识的更多,例如还有邮箱地址
http :// www.etiantian.org/oldboy/index.html
http :// www.oldboyedu.com/video/index.html
2.4 网站流量度量术语
2.4.1 IP(Internet Protocol)
IP(独立IP)即Internet Protocol,这里指【独立IP数】,独立IP数是指不同IP地址的计算机访问网站时被计算的总次数。独立IP数是衡量网站流量的一个重要指标。
一般一天内(00:00-24:00),相同IP地址的客户端访问网站页面只被计算为一次,记录独立IP的时间可为一天或一个月,目前通用的标准为“一天”。
100个学生,100个局域网,老男孩教育出口1个外网IP。独立IP算1个。
1300人,6个IP(随机),单IP连接数大200,封掉。。。
服务器端口有限的4000 65535
日独立IP100万。手机+电脑
2.4.2 PV(Page View)
一个页面就是一个PV ,58网站,一个一天平均PV,1ip对应20次页面。
日PV一个亿架构。500万IP,排名前60.
日PV 10万。
100个学生,访问百度,一个人打开3个页面。
IP是1,PV 100*3=300
2.4.3 UV(独立访客)
更接近真实的个人。一个手机,多数情况电脑一个人用。
UV(Unique Visitor)
UV(独立访客)即Unique Visitor,同一台客户端(PC或移动端)访问网站被计算为一个访客。
一天(00:00-24:00)内相同的客户端访问同一个网站只计算一次UV。
UV一般是以客户端Cookie等技术作为统计依据的,实际统计会有误差。
考虑到一台客户端电脑可能会有多人使用的情况,因此,UV(独立访客)实际上并不一定是独立的自然人访问。
2.5 企业网站对IP、PV、UV的度量
2.5.1 IP度量
1.分析所有Web服务器的访问日志信息,对IP地址段去重后计数,这是IT人员的基本计算手段。
2.在网站的每一个(所有)页面结尾,嵌入JS等统计程序代码,待用户加载网页后,IP即传给统计IP的服务器,这种方法一般被第三方统计公司或企业内部开发日志分析程序时使用。
用第三方大家比较信任的统计工具例如:谷歌的统计(GA),百度,腾讯统计(注册用户,申请一段JS代码)。
IP的统计方法简单、易用,因此,成为了多数网站衡量网站流量的重要指标之一。
2.5.2 PV度量
运维人员统计PV,wc -l access.log粗略的把日志内的行数当做PV数了。
为什么不准确?
PV统计:
1…html
2.oldboy.php?id=1
oldboy.php?id=2
3个PV。
ELK,HDOOP
淘宝每秒日志1G级别。
1)日志格式时候,不需要就不要记录了。
2)日志放入内存,定期放入磁盘。==》大数据平台分析。
2.在网站的每一个(所有)页面结尾,嵌入JS等统计程序代码,待用户加载网页后,IP即传给统计IP的服务器,这种方法一般被第三方统计公司或企业内部开发日志分析程序时使用。
用第三方大家比较信任的统计工具例如:谷歌的统计(GA),百度,腾讯统计(注册用户,申请一段JS代码)。
IP的统计方法简单、易用,因此,成为了多数网站衡量网站流量的重要指标之一。
2.5.3 UV度量
嵌入JS等统计程序代码代码统计。
3. 网站并发连接:吞吐量
3.1 同时最大访问数量
并发:单位时间段的连接数或者用户数。
1秒钟 网站连接数
10秒钟 网站连接数
统计当前网络连接数总量
[root@web01 html]# grep "^tcp" netstat.log |grep ESTABLISHED|wc -l
101
[root@web01 html]# grep "^tcp" netstat.log |awk '{++S[$NF]}END{for(k in S)print S[k],k}'|sort -rn
105 TIME_WAIT
101 ESTABLISHED
55 FIN_WAIT2
7 FIN_WAIT1
5 SYN_RECV
5 LISTEN
3 LAST_ACK
1 CLOSING
3.2 如何测定自己网站的并发能力?
压力测试,tcpcopy,http_load,loadrunner,webbanch
思想:网站上线的时候如果不做压测带来的问题。
5台服务器上线了。
压测时候,获得最大值,一边压测一边优化瓶颈的服务器,获得并发链接最大值。
压测的过程和结果,写成专业的报告,发给领导。
3.3 例如:某网站的并发是5000
意味着:单位时间内(理解为1秒或数秒内),正在处理的连接数,正在建立的连接数。加起来一共是5000个。
下面是老外对网站并发数计算公式及参考说明:
Request Per Second+Simultaneous Browser connections+Thinking Time=Concurrent User
其中:
- Concurrent User表示网站并发用户总数。
- Request Per Second [RPS]表示每秒请求数(吞吐量)。
- Simultaneous Browser connections [SBC] 表示并发浏览连接数。
- Thinking Time表示平均用户思考时间。
工作场景:统计并发数的基本方法
1、统计当下时刻的linux的网络连接数并发,
netstat -an|grep -i " est "|wc -l
2、nginx web层active status。
3.4 扩展教学
1)测试磁盘存储性能方法
连续的向磁盘中进行读写大文件的测试方法
dd if=/dev/zero of=/tmp/test01.bin bs=1k count=10000
随机读取
#fio软件安装下载(需要借助epel源)
链接: http://blog.csdn.net/hshl1214/article/details/49762149
链接: http://www.cnblogs.com/lpfuture/p/6054882.html
2)工作场景统计并发数的基本方法
统计当下时刻的Linux的网络连接数并发
# netstat -an|grep -i “est”|wc -l
# ss -ant|grep -ic est
网站页面统计方法
Nginx web层active status
无数据,不说话
链接: https://alexa.chinaz.com/