http协议

一、http协议介绍

1. 互联网三大基石

  • HTML(HyperTextMarkupLanguage):超文本标记语言

  • HTTP(HyperTextTransferProtocol):超文本传输协议

  • URL(UniformResourceLocation):统一资源定位符

2. URL

通常我们在访问一个网站页面时,请求到的内容通称为"资源"。而”资源“这一概念非常宽泛,它可以是一份文档,一张图片,或所有其他你能够想到的格式。每个资源都由一个 URI 来进行标识。URL简称统一资源定位符,用来唯一地标识万维网中的某一个资源。URL由协议、主机名称、端口以及文件名几部分构成。深入理解 URL 的组成部分
一个标准的url格式如下:
protocol://host[:port][abs_path]?arg1=value1&arg2=value2

  • protocol: http或https,表示要通过哪个协议来定位网络资源;
  • host:表示合法的Internet主机域名或者IP地址;
  • port:指定一个端口号,为空则使用缺省端口(http是80,https是443);
  • abs_path:指定请求资源的路径
  • ? 之后的内容是请求参数,用于传递数据给服务器

3. HTML

超文本标记语言。超文本:文本信息、图片、声音、视频、超链接等。一个完整的Html页面可能会包含很多个URL的资源。(反之: 我们也可以理解一个HTML文件是由多个不同的URL资源拼接而成的。)

4.HTTP

HTTP是一个属于应用层的面向对象的超文本传输协议。是一种能够获取如 HTML 这样网络资源的通讯协议。它是在 Web 上进行数据交换的基础。简单理解:HTTP协议就是将用户请求的HTML页面从一台Web服务器传输到客户端浏览器的一种协议。规定了客户端和服务端数据的传输格式。HTTP的概述。由于其简捷、快速的方式,适用于分布式超媒体信息系统。它于1990年提出,经过几年的使用与发展,得到不断地完善和扩展。

  • 1991年推出HTTP/0.9

  • 1996年推出HTTP/1.0

  • 1999年推出HTTP/1.1

  • 2015年推出HTTP/2

    目前使用最广泛的还是HTTP/1.1版本

5. 三者关系

一个完整的 HTML 页面是由多个不同的 URL资源组成的;而 HTTP 协议主要是用来传输这种 HTML 页面的.。

二、HTTP工作流程

在这里插入图片描述
整个用户访问网站过程就是 DNS-TCP-HTTP 在这里插入图片描述

网站请求生命周期分析

1、客户端发送请求

  1. 在浏览器输入url,譬如www.baidu.com,浏览器会自动补全协议(http),变为http://www.baidu.com,现在部分网站都实现了HSTS机制,服务器自动从http协议重定向到https协议
  2. 在网页中点击超链接或javascript脚本进行url跳转,仅设置href=‘绝对路径’,浏览器会自动使用当前url的协议、host和port,譬如在https://tieba.baidu.com/index.html网页中,点击一个超链接 /f?kw=chinajoy, 会自动访问https://tieba.baidu.com/f?kw=chinajoy

2、路由转发

  1. IP查找:因特网内每个公有IP都是唯一的,域名相当于IP的别名,因为我们无法去记住一大堆无意义的IP地址,但如果用一堆有意义的字母组成,大家就能快速访问对应网站
  2. DNS解析:通过域名去查找IP,先从本地缓存查找,其中本地的hosts文件也绑定了对应IP,若在本机中无法查到,那么就会去请求本地区域的域名服务器(通常是对应的网络运营商如电信),这个通过网络设置中的LDNS去查找,如果还是没有找到的话,那么就去根域名服务器查找,这里有所有因特网上可访问的域名和IP对应信息(根域名服务器全球共13台),根域名会向顶级域名,二级域名等迭代查找。
  3. 路由转发:通过网卡、路由器、交换机等设备,实现两个IP地址之间的通信。用到的主要就是路由转发技术,根据路由表去转发报文,还有子网掩码、IP广播等等知识点

3、建立连接

​ 通过TCP协议的三次握手建立连接

4、传输报文

建立连接后,客户端会通过TCP依次、有序的发送一定大小的报文,其中包括了超时重传、阻塞窗口等等概念,用来保证数据包的完整、有序。

  • http协议使用的明文传输,所有内容都是直接可读的
  • https协议是基于SSL/TLS加密,而SSL/TLS是基于TCP协议的,也就是http协议报文包装成TCP报文进行的加密,使用https协议的话,如果本地没有证书和公钥,那么会从服务器获取证书并且进行验证,流程如下:
    -在这里插入图片描述

5.Nginx代理服务器处理,具体要看部署的是什么环境

6. URLConf路由匹配

7. 后续…

三 、HTTP请求报文详解

1. 请求报文格式

http请求报文:由三部分组成,分别是:请求行、请求头、请求体
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KaFIx8C1-1628515077870)(.\imgs\http_request.png)]
用fiddler抓包,登录百度请求报文如下

POST https://passport.baidu.com/v2/api/?login HTTP/1.1
Host: passport.baidu.com
Connection: keep-alive
Content-Length: 4794
Cache-Control: max-age=0
sec-ch-ua: "Chromium";v="92", " Not A;Brand";v="99", "Google Chrome";v="92"
sec-ch-ua-mobile: ?0
Upgrade-Insecure-Requests: 1
Origin: https://www.baidu.com
Content-Type: application/x-www-form-urlencoded
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.131 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Sec-Fetch-Site: same-site
Sec-Fetch-Mode: navigate
Sec-Fetch-User: ?1
Sec-Fetch-Dest: iframe
Referer: https://www.baidu.com/
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9
Cookie: BIDUPSID=EFBF3353B1DD5C2C3F41C1ECCCDF2E4D; PSTM=1624461531; .........

staticpage=https%3A%2F%2Fwww.baidu.com%2Fcache%2Fuser%2Fhtml%2Fv3Jump.html&charset=UTF-8&token=a61aff943106a7aca71b7d021f0df935&tpl=mn&subpro=&apiver=v3&tt=1628526378027&codestring=&safeflg=0&u=https%3A%2F%2Fwww.baidu.com%2F&isPhone=&detect=1&gid=50944EC-8600-45E1-ABCD3FBD34B90A86&quick_user=0&logintype=dialogLogin&logLoginType=pc_loginDialog&idc=&loginmerge=true&mkey=&splogin=rate&username=9999999999&password=h06BI6K8JaQWqSK84QsMz3UjxESLpCFP6x7EpjAcLkJj3HEHNe9LDbcTgrQlAM1WW%2Bnix4ifQTbf5gxe%2BQe3RAO1kU

2.请求method

必须为大写,现在一般只使用GET和POST,所有方法的说明如下:
在这里插入图片描述

3. 头部字段

请求头描述
Host主机ip地址或域名
User-Agent客户端相关信息,如操作系统、浏览器等信息
Accept指定客户端接收的数据类型,如: image/jpg, text/html, application/json
Accept-Charset客户端接收的字符集,如gb2312、iso-8859-1
Accept-Encoding客户端可接受的内容编码,如gzip
Accept-Language客户端可接受的语言如 zh-CN ,做国际化
Authorization客户端提供给服务端用户代理的权限认证信息(证书值)
Cookie客户端携带给服务端的cookie信息
Referer当前文档的URL,即从哪个链接过来的,防止盗链
Content-Type请求体内容类型,如 application/x-www-form-urlencoded表示form表单
Content-Length:请求数据长度3799
Cache-Control缓存机制,如Cache-Control: no-cache 不缓存
Pragma防止页面被缓存,和Cache-Control: no-cache 作用类似(http1.0)
Connection长链接,一次请求结束后先不四次挥手 Connection: keep-alive

4. 请求体

get请求一般请求体为空,参数随url一并带过去,post请求参数一般会放在请求体中,k1=value1&k2=value2…,以form表单的形式提交。

5. 请求Connection

Http请求中的长连接与短连接
http1.0 协议使用的是短连接:建立一次tcp的连接,发起一次http的请求,结束,tcp断开。
http1.1 协议使用的是长连接:建立一次tcp的连接,发起多次http的请求,结束,tcp断开。
HTTP协议版本参考
HTTP1.1与HTTP2.0版本速度对比
在这里插入图片描述

四、HTTP响应报文详解

1.响应报文格式

http响应:由三部分组成,响应行、响应头和响应体
在这里插入图片描述
登录百度响应报文如下

HTTP/1.1 200 OK
Access-Control-Expose-Headers: Trace-ID
Cache-Control: public
Connection: keep-alive
Content-Security-Policy-Report-Only: object-src 'none'; script-src 'self' 'unsafe-inline' 'unsafe-eval' 'report-sample' wappass.baidu.com:* passport.baidu.com:*  wappass.bdimg.com:* passport.bdimg.com:* ppui-static-wap.cdn.bcebos.com:* ppui-static-pc.cdn.bcebos.com:* hm.baidu.com:* fe.bdimg.com:* msg.baidu.com:* pdc.baidu.com:* img.baidu.com:* openapi.baidu.com:* res.wx.qq.com:* qqq.gtimg.cn:* s.bdstatic.com:* ufosdk.baidu.com:* qapm.baidu.com:* libs.baidu.com:* ext.baidu.com:* apps.baidu.com:* s3.pstatp.com:* tb2.bdstatic.com:* b.bdstatic.com:* msg.baidu.com:* www.baidu.com:* po.srf.baidu.com:* pan.baidu.com:* play.baidu.com:* tb1.bdstatic.com:* dup.baidustatic.com:* static.tieba.baidu.com:* gss2.bdstatic.com:* blob: baiduboxapp: bootupbaiduhd: ; report-uri https://report-uri.baidu.com/report?app=passport;
Content-Type: text/html
Date: Mon, 09 Aug 2021 16:26:16 GMT
Expires: 0
Last-Modified: Mon, 09 Aug 2021 16:26:16 16AugGMT
P3p: CP=" OTI DSP COR IVA OUR IND COM "
Pragma: public
Referrer-Policy: no-referrer-when-downgrade, strict-origin-when-cross-origin
Server: BWS
Set-Cookie: logTraceID=ea2a43a15c6befcdc58c1bf6ae9cc9c830c8edd3b4dd736a2a; expires=Tue, 10-Aug-2021 16:26:16 GMT; path=/; domain=passport.baidu.com
Strict-Transport-Security: max-age=31536000
Trace-Id: A0812F01
Tracecode: 15768140410404001290081000
Traceid: 1628526376252891213811655629086689513480
Vary: Accept-Encoding
Content-Length: 1009

<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head>
<body>
<script type="text/javascript" nonce="zwugn5FXsFrL7hnu">


	var href = decodeURIComponent("https:\/\/www.baidu.com\/cache\/user\/html\/v3Jump.html")+"?"

var accounts = '&accounts='

href += "err_no=4&callback=parent.bd__pcbs__r7wy9z&codeString=&isslide=&userName=9999999999&phoneNumber=&mail=&hao123Param=&u=https://www.baidu.com/&tpl=mn&secstate=&gotourl=&authtoken=&loginproxy=&resetpwd=&vcodetype=&lstr=&ltoken=&bckv=&bcsync=&bcchecksum=&code=&bdToken=&realnameswitch=&setpwdswitch=&bctime=&bdstoken=&authsid=&jumpset=&appealurl=&realnameverifyemail=0&traceid=A0812F01&realnameauthsid=&bind_mobile_token=&upgrade_mobile_token=&upgrade_mobile=&guide_upgrade_mobile=&scscene=&scnewuser=&secauthsid=&secbdstoken=&authid=&errno=&access_token=&expires_in=" + accounts;

if(window.location){
    window.location.replace(href);
}else{
   document.location.replace(href);
}
</script>
</body>
</html>

2.响应头

响应头描述
ServerHTTP服务器的软件信息
Data响应报文时间
Expires指定缓存过期时间
Set-Cookie向客户端设置Cookie
Last-Modified资源最后修改时间
Content-Type响应类型和字符集,如,Content-Type:text/html;charset=utf-8
Content-Length响应内容长度
Keep-Alive:timeout=5, max=100 长连接的超时时间
Connectionkeep-alive表示长连接,服务器端可设置时间
Location指明重定向的新URL位置,如304
ETag首部字段 ETag 能告知客户端实体标识。服务器会为每份资源分配对应的 ETag

值。资源改变,Etag值也会变

3.响应体

可以是html文件,也可以是json字符串,具体看用户访问的是什么资源。

4. 响应状态码

HTTP 状态码由三个十进制数字组成,第一个十进制数字定义了状态码的类型,后两个数字没有分类的作用。HTTP 状态码共分为以下 5 种类型:

类别描述
1xxInformation(信息状态码)接受的请求正在处理
2xxSuccess(成功状态码)请求正常处理完毕
3xxRedirection(重定向状态码)需要进行附加操作以完成请求
4xxClient Error(客户端错误状态码)服务器无法处理请求
5xxServer Error(服务端错误状态码)服务器处理请求出错

以下是常见状态码详细说明

状态码描述
200表示成功客户端成功接收到了服务端返回的数据,这是最常见的状态码
206客户端发完请求后,服务端只是返回了部分数据,就会出现该状态码,例如当下载一个很大的文件时,在没有下载完成前就会出现该状态码
301永久重定向(redirect) http–>https
302临时重定向(redirect)
304未修改。客户端请求的文档已在其缓存中,文档自缓存以来尚未被修改过。客户端使用文档的缓存副本,而不从服务器下载文档。
400客户端请求语法错误,服务端无法理解
401服务端开启了用户认证,而客户端没有提供正确的验证信息
403服务端不允许客户端访问,或者没有找到默认返回页面(默认所有的web服务器返回的页面都是index.html、也可以调整默认返回页面app.html)
404客户端请求的资源不存在 (路径写错了;服务端真的没有;)
413客户端向服务端上传一个比较大的文件,并且文件大小超过了服务端的限制 1MB
500服务端出现了内部错误,需要进行人为排查故障 (链接数据库类服务异常,会出现500错误)
502服务器充当代理角色时,后端被代理的服务器不可用或者没有正常回应
503服务当前不可用,由于超载或系统维护,服务器暂时的无法处理客户端请求
504服务器充当代理角色时,后端的服务端没有按时返回数据,超时了

详细请参考:状态码完整版

五、Http相关术语

1 .PV(page view )

PV 即页面浏览量或点击量,是衡量一个网站或网页用户访问量。具体的说,PV 值就是所有访问者在 24 小时(0 点到 24 点)内看了某个网站多少个页面或某个网页多少次。PV 也指页面刷新的次数,每一次页面刷新,就算做一次 PV 流量。度量方法就是从浏览器发出一个对网络服务器的请求(Request),网络服务器接到这个请求后,会将该请求对应的一个网页(Page)发送给浏览器,从而产生了一个 PV。那么在这里只要是这个请求发送给了浏览器,无论这个页面是否完全打开(下载完成),那么都是应当计为 1 个 PV。

2. UV(unique visitor )

UV(Unique Visitor)独立访客,统计1天内访问某站点的用户数(以cookie为依据);访问网站的一台电脑客户端为一个访客。可以理解成访问某网站的电脑的数量。网站判断来访电脑的身份是通过来访电脑的cookies实现的。如果更换了IP后但不清除cookies,再访问相同网站,该网站的统计中UV数是不变的。如果用户不保存cookies访问、清除了cookies或者更换设备访问,计数会加1。00:00-24:00内相同的客户端多次访问只计为1个访客

3. IP

IP即独立公网IP数,是指1天内多少个独立的IP浏览了页面,比如你在家通过拨号上网访问某个网站,此时网站会记录你的公网IP地址。那如果你在公司和很多同事同时访问一个网站,那该网站会记录多少个公网IP呢? (看公司有多少个出口公网地址)

4.并发

并发:指的是同时,我们可以理解为一段时间内(比如10秒),网站支持同时访问的人数,假设10s并发值如果为500时,一天能达到多少PV? 500 * 6 * 60 * 24 = 4320000

5. 扩展延伸

1.请计算如下题的 IP、PV、UV、并发
假设公司有一座大厦,大厦有100人,每个人有一台电脑和一部手机,上网都是通过NAT转换,每个人刷新网站10次,请问对应的 pv,uv,ip,并发分别是多少。

PV:页面浏览量 100人 * 2设备 * 10次刷新 = 2000pv
UV:独立的客户 100人 * 2设备 = 200UV
IP:独立公网IP 100人--> NAT = 1个独立IP
并发:单位时间内100人同时请求网站,100

2.上家公司的IP、PV,UV是多少?(运营)

小说网站 1分钟并发 5000*60*24=720w (屌丝、通常一看一天)
教育网站 1分钟并发 10000*60*24=1440w (努力青年、通常周末量大)
金融网站 1分钟并发 500*1440= 72w (有钱人、所以量不大、但交易额度高)
电商网站 1分钟并发
游戏网站 ------在线用户、日活跃数、月活跃数
需要注意的是: 这仅仅是参考值,因为不同的业务他们的pv都不一样。

3.上家公司的IP、PV、UV是如何统计的?

方式一:使用awk提取IP,sort排序、uniq统计去重统计IP
方式二:第三方统计工具进行pv统计,比如:piwik、腾讯分析、百度统计、开发自研统计平台。
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值