MIME-多用途互联网邮件扩展
- 历史
不是来自于http的服务,而是来自邮件的协议,互联网最早的应用来自邮件服务,需
求也慢慢的衍生出MIME技术
- 功能:识别不同的资源并展示,浏览器就会调用相关的组件来调用
- 格式:major(主要编号)/minor(较小编号)
类似dev下主要编号标识设备类型,次要编号标识是这个设备类型的第几个
- 范例-对应文件/etc/mime.types
minimal安装下有的不存在/etc/mime.types文件
yum provides /etc/mime.types 查看哪个包提供这个文件的,然后安装包
cat /etc/mime.types
# 这个只是一部分
文件类型/调用浏览器什么组件解析 文件后缀
PS:js: text/javascript已经过时了,现在用application/javascript解析
text/css css
text/csv csv
text/directory
text/dns soa zone
text/encaprtp
# text/ecmascript obsoleted by application/ecmascript
text/enriched
text/fwdred
text/grammar-ref-list
text/html html htm
- 执行细节
浏览器收到回应信息后,会查看这个文件,之后选择调用什么组件去解释
服务器上文件后缀必须要先识别出来
比如后缀是sh的文件,如果浏览器在mime.types文件里找不到对应的解析组件,就会
表现为不识别,直接下载
如果要增加一些新的功能,不同类型的资源,全部都要写到mime.type的里,学到ngi
nx的时候就会知道了
URI/URL
-
URI-统一资源标识,分为URL和URN
-
URN 统一资源命名
URN不表明地址因为,这个资源可能分布在互联网的各个角落
URN的典型代表:P2P(BT下载软件用的就是P2P)下载使用的磁力链接是URN的一种实现
magnet:?xt=urn:btit:66063823823
BT下载资源,可能从互联网上的很多台主机获取,而不仅仅从服务器下载,你下载了
,下一个下载的可能从你这下载
可以多线程同时做,从互联网的各个角落下载,减轻了服务器的压力提高了下载速度
- URL 统一资源定位,用于描述某服务器某特定资源位置
URL组成
<scheme>://<user>:<password>@<host>:<port>/<path>;<params>?<query>#<frag>
<scheme>:方案,访问服务器以获取资源时要使用哪种协议
<user>:用户,某些方案访问资源时需要用户名
<password>:密码,用户对应的密码,中间用:隔开
<Host>:主机,资源宿主服务器的主机名或ip地址
<port>:端口,资源宿主服务器正在监听的端口号,很多方案有默认端口号
<path>:路径,服务器资源的本地名,由一个/将其与之前的URL组件分隔
<params>:参数,指定输入的参数,参数为名/值对,多个参数,用;分隔
# 用的最多的就是查询
# 实际上就是在数据库里搜索
<query>:查询,传递参数给程序,如数据库,用?分隔,多个查询用&分隔
# 比如https://list.jd.com/list.html?cat=1713,13613&go=0语句
# 实际上相当于分发给数据库加了一个while cat=1713,13613&go=0语句
# 片段,就是一个网页里有很多的资源
# 如何很快的定位到,加片段
<frag>:片段,一小片或一部分资源的名字,此组件在客户端使用,用#分隔
# 比如https://wiki.ubuntu.org.cn/Apache#K 实际上跳到K开头的资源
URL实例
https://john.deo@www.example.com:123/forum/questions/?tag=networking&order
=newest#top
# 运维确保公司业务的稳定运行
# 统计用户量多少了,是不是需要增加服务器了
# 一些公司就是根据网站访问情况来判断业绩如何的
# 如何量化出来
# 可以通过很多指标
网站访问量
- 网站访问量统计的重要指标 IP(独立-ip访问量)
一天来自相同客户机ip地址只计算一次,记录原昵称客户机IP地址的计算机访问网站
的次数,,是衡量网站流量的重要指标
# 局域网内访问的时候,用的是同一个ip地址,所以通过ip去判断访问量是不准确的
- PV(页面访问量)
即page view,页面浏览量或点击量,用户每次刷新即被计算一次,PV反应的时浏览
某网站的页面数,PV与来访者的数量成正比,PV并不是页面的来访者数量,而是网站
被访问的页面数量
- UV(独立访客-用户访问量)
Unique Vistitor,访问网站的一台电脑为一个访客,一天内相同的客户端只被计算
一次,可以理解成访问某网站的电脑的数量,网站判断来访电脑的身份时通过cookie
实现的,如果更换了IP后但是不清楚cookice,再访问相同网站,该网站的统计中UV数不变
# 同一浏览器,打开同一网站的不同页面,是一个UV
# 不同浏览器打开同一网站,是浏览器数UV
# 不同电脑,不同浏览器打开同一网站,是电脑书*浏览器数UV
- 范例:网站访问统计
甲乙丙三人在同一台电脑通过ADSL上网的电脑上,分别访问www.jd.com,并且每人各
浏览了2个页面,那么网站的流量统计是
IP 1 PV 6 UV 1
如果三人都是ADSL重新拨号后,各浏览2各页面
IP 3 PV 6 UV 1
# 现在ADSL拨号上网已经over了,ADSL拨号上网特点,每次重拨号,IP都会改变
# 有很多第三方统计的插件,百度等
# www.alexa.cn 全球的网站访问量都有个统计
# 有个网站排行榜
# 公司网站上线以后,有个专门的岗位seo搜索优化的,希望一搜就能搜到,第一页
# 不花高额的宣传费用也能搜到
# 世界排名第一的网站google
# 日均16亿UV,33PV
# 第二个youtube
# 网站要用到一些工具,可以查看站长之家
3.网站访问量
- QPS:每秒请求数
PV,QPS和并发连接数换算公式QPS=PV*页面衍生链接次数/统计时间(86400=1D)
# 实际上PV可以看成打开页面次数,页面打开量
# 页面衍生的链接次数
# 页面打开后按F12,每一个行就是一个文件,多少个请求就加载多少个资源
# 每加载一个资源就要发起一次http请求
# 比如一天访问量1000万PV,但是这个1000万PV衍生出来的就很多了,比如一个页面
100个资源,那要1000万乘100才能算出请求数
- 并发连接数=QPS*http平均响应时间
一个http请求返回的时间,如果比较快,下完就断开了,如果响应时间比较长,就会
造成并发连接数比较多
- 峰值时间
每天80%访问集中在20%的时间里,这20%时间为峰值时间
# 比如说购物,中午和晚上更多,晚上就很少了,上班晚上累
峰值时间每秒请求数(QPS)=(总PV数*页面衍生链接次数*80%)/(每天秒数*20%)
HTTP请求机制
- 一次http事务包括
+ http请求
+ http响应
- web资源
web source ,一个网页由多个资源(文件)构成,打开一个页面,通常会有多个资源
展示出来,但是每个资源都是单独请求,所以一个“web页面”通常不是单个资源,而
是一组资源的集合
- 资源类型
+ 静态资源:无需服务端做出额外处理
文件后缀:html,txt,jpg,js,css,mp3,avi
+ 动态资源:服务端执行程序,返回执行大的结果
文件后缀:php,jsp,asp
- HTTP连接请求
用户-浏览器输入www.taobao.com
连接请求给服务器,只有一个
服务器-返回你访问的页面
index.html(一般首页默认叫这个)
# 这个页面可能包含大大小小很多资源静态和动态的上百个小文件
客户端:根据index.html的资源记录,逐步的对客户端发起请求,每个资源都代表一个http请求
# 上百个小文件怎么下载下来,逻辑是什么
- 串行和并行连接

一个一个下,每次下载都要建立tcp三次握手,如果要下载四个小文件,要发起连接
,服务器回应,建立连接,发起http请求,下载,之后tcp4次挥手,这样的话非常慢
,而且每个资源都是按照一定的次序,一个资源下载完,后续的资源就不下了,卡那边了
PS:效率不高,容易故障
并行
只建立tcp一次三次握手,下载主页面后,检测资源,之后同时握手,而不是串行,
可以做到上百个资源同时下载
PS:缺点:有100个资源,就要建立100次的三次握手,建立三次握手本身就要花时间,
比如说修一条大马路,就跑一辆车,跑完了就拆,为什么不修一条大马路,等跑完了
再拆,这样更节约资源
- 串行,持久连接和管道

串行持久连接
建立好tcp三次握手后,不四次挥手,而是在三次握手的基础上,发起http请求,把
所有资源下完了,再四次挥手
PS:优点:复用连接
PS:缺点:内部仍然是串行的,效率上没有彻底提高
就像修了一条单车道的高速公路
管道化(并行)持久连接
相当于修了多车道的高速公路
只建立一次握手
- 提高Http连接性能
+ 并行连接:通过多条TCP连接发起并发的HTTP请求
+ 持久连接:keep-live,重用TCP连接,以消除连接和关闭的延时,以事务数量和时
间来决定是否关闭连接
+ 管道化连接:通过共享TCP连接发起并发HTTP请求
+ 复用连接:交替传送请求和响应报文(实验阶段)
HTTP协议版本
HTTP/0.9
1991年,原型版本,只有一个命令get,get/index.html.服务器只能回应HTML格式字
符串,不能回应别的格式
# c端只能获取get
HTTP/1.0
1996.5,支持cache,MIME(多媒体),method
每个TCP连接只能发送一个请求去,发送数据完毕,连接就关闭,如果还要请求其他
资源,就必须再新建一个连接,引入了POST,HEAD命令
# POST-上传:上传用户名密码等资源
# GET-下载
# HEAD-查看http的头信息
# chrome右键检查,network,随便点一个资源,headers,有两个头,请求和响应的头
头信息是ASCII码,后面数据可以为任何格式,服务器回应时会告诉客户端,数据是
什么格式,即Content-Type字段的作用,这些数据类型总称为MIME-多用途互联网邮
件扩展,每个值包括一级类型和二级类型,预定义的类型,也可自定义类型,常见Co
ntent-Type值:text/xml image/jpeg audio/mp3
HTTP/1.1
1997.1,引入持久连接-nersistene connection
即tcp默认不关闭,可以被多个请求复用,不用声明Connect:keep-live。对于同一个
域名,大多数浏览器允许同时建立6个持久连接,引入了管道机制,即在同一个TCP连
接里,客户端可以同时发送多个请求,进一步改进了HTTP协议的效率
同一个TCP连接里,所有的数据通信是按次序进行的。服务器只能顺序处理,回应慢
,造成"队头堵塞"(Head-of-line blocking)
为避免上述问题,两种方法:一是减少请求数(小资源合并),而是同时多开持久连
接(一个域名最多6个连接)
网页优化技巧,如合并脚本和样式表,讲图片嵌入css代码,域名分片等
# 网站优化都是前端工程师负责,运维了解即可
新增方法:PUT,PATCH,OPTION,DELETE
断开连接两种:限定时间,限定数量
HTTP协议不带有状态,每次请求都必须附上所有信息。请求很多字段都是重复的浪费
带宽的,影响速度
- HTTP1.0和HTTP1.1区别-重点
+ 1.0不支持持久连接,1.1支持持久连接
+ 1.1支持断点续传
+ 1.1新增24个状态响应码
+ 1.0只支持一个头,1.1支持主机头
# 支持主机头,可以在一个一个主机上搭建多个域名的网站
- HTTP1.0和1.1的问题
+ HTTP1.x在传输数据时,每次都需要重新建立连接,(持久连接也有断开的时候)
,无疑增加了大量的延迟时间,尤其是移动端更突出
+ HTTP1.x在传输数据时,所有传输内容都是明文的,客户端和服务器端都无法验证
对方身份,无法保证数据的安全性
# 早期163的免费邮箱,登陆的时候是明文的
+ HTTP1.x在使用时,header里携带内容过大,增加了传输成本,并且每次请求heade
r基本不怎么变化,尤其是移动端增加用户流量
+ 虽然HTTP1.x支持keep-live,来弥补多次创建连接产生的延迟,但是keep-live使
用多了同样给服务端带来大量的性能压力,并且对于的单个文件不断被请求的服务(
图片存放网站),keep-live可能会极大影响性能,因为它在文件被请求之后还保持了不必要的连接很长时间
# 持久连接断开有两个条件:时间,资源个数,哪个先达到,持久连接就会关闭
# 所以会造成你请求的资源都传给你了,没有新的了,但是两个条件不满足,就不断
开连接,对服务器来说,就无形中要消耗资源来维持连接
# 对上述的问题,就有新的协议来解决,比如https协议
- HTTPS协议
1.为了解决安全问题,网景在1994年创建了HTTPS,并应用在网景导航者浏览器种,
最初,HTTPS是与SSL一起使用的,在SSL逐渐演变到TLS时(两个是一个东西),最新
的HTTPS也由2000年吴越公布的RFC
2818正式确定下来。HTTPS就是安全版的HTTP,目前大型网站基本全站HTTPS
2.HTTPS特点
+ HTTPS协议需要用到CA申请证书,一般免费证书很少,需要缴费
+ HTTP协议运行在TCP上,所有传输的内容都是明文的,HTTPS运行在SSL/TLS上,SSL
/TLS运行在TCP上,所有传输的内容都是经过加密的
# 因为涉及到加密解密,访问量大的时候服务器压力也大
# 如果只是宣传网站没关系,如果涉及到个人隐私问题,用https协议
+ HTTP和HTTPS使用的是不同的连接方式,端口不通,前者t80,后者443
+ HTTPS可以有效防止运营商劫持,解决了防劫持大的一个大问题
- SPDY协议
1.SPDY协议:2009年谷歌研发,综合HTTP和HTTPS两者特点于一体的传输协议
2.特点
+ 降低延迟,针对HTTP高延迟的问题,SPDY优雅的采取了多路复合(multiplexing).
多路复用通过请求stream共享一个tcp连接的方式,解决了HOL
blocking问题,降低了延迟同时提高了带宽的利用率
+ 请求优先级(request
prioritization)多路复用都带来一个新的问题是,再连接共享的基础上有可能会导
致关键请求被阻塞。SPDY允许给每个request设置优先级,重要的请求会优先得到响
应。比如浏览器加载首页,首页大的html内容应该优先展示,之后才是各种静态资源
文件,脚本文件等加载,可以保证用户第一时间看到网页内容
- HTTP2协议
1.http/2.0:2015年,HTTP2.0是SPDY的升级版
2.特点
+ 头信息和数据体都是二进制的,成为头信息帧和数据帧
# 用抓包工具看不懂,但是可以用二进制的解析工具看
+ 复用TCP连接,在一个连接里,客户端和浏览器都可以同时发送多个i请求和响应,
且不按顺序一一对应,避免了“队头阻塞”,此双向的实时通信称为多工(multiplexin
g)
+ 引入头信息压缩机制(header
compression),头信息使用gzip或compresse压缩后再发送;客户端和服务器同时维
护一张头信息表,所有字段都会存入这个表,生成一个索引号,不发送同样字段,只
发送索引号,一高速度
+ HTTP/2允许服务器未经请求,主动向客户端发送资源,即服务器推送(server
push)
# 现在手机上时不时的就能收到一些消息,和主动推送有关
- HTTP2.0与SPDY区别
+ HTTP2.0支持明文HTTP传输,而SPDY强制使用HTTPS
+ HTTP2.0消息头的压缩算法采用HPACK,而非SPDY采用的DEFLATE