HTTP 之 HTTP概念介绍
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了HTTP 之 HTTP概念介绍相关的知识,希望对你有一定的参考价值。
1 概述
本文将对HTTP协议的发展,相关术语,工作机制进行介绍
2 HTTP协议发展介绍
.http/0.9:
1991,原型版本,功能简陋,只有一个命令GET
GET /index.html ,服务器只能回应HTML格式字符串,不能回应别的格式
.http/1.0:
1996年5月,支持cache, MIME, method
每个TCP连接只能发送一个请求,发送数据完毕,连接就关闭,如果还要请求其他资源,就必须再新建一个连接,http/1.0引入了POST命令和HEAD命令
POST 上传
HEAD 只看头部信息,不看数据
头信息是ASCII码,后面数据可为任何格式。服务器回应时会告诉客户端,数据是什么格式,即Content-Type字段的作用。这些数据类型总称为MIME 多用途互联网邮件扩展,每个值包括一级类型和二级类型,预定义的类型,也可自定义类型。
常见Content-Type值:text/xml image/jpegaudio/mp3
.http/1.1:
1997年1月,HTTP/1.1是目前的主流
.引入了持久连接(persistent connection),即TCP连接默认不关闭,可以被多个请求复用,不用声明Connection:keep-alive。对于同一个域名,大多数浏览器允许同时建立6个持久连接
.引入了管道机制(pipelining),即在同一个TCP连接里,客户端可以同时发送多个请求,进一步改进了HTTP协议的效率
.新增方法:PUT、PATCH、OPTIONS、DELETE
.同一个TCP连接里面,所有的数据通信是按次序进行的。服务器只能顺序处理回应,前面的回应慢,会有许多请求排队,造成"队头堵塞"(Head-of-lineblocking)
.为避免上述问题,两种方法:一是减少请求数,二是同时多开持久连接。网页优化技巧,比如合并脚本和样式表、将图片嵌入CSS代码、域名分片(domain sharding)等域名分片(domain sharding)指把不同的资源放在不同的域里
.HTTP 协议不带有状态,每次请求都必须附上所有信息。请求的很多字段都是重复的,浪费带宽,影响速度
.Spdy:
2009年,谷歌研发,解决HTTP/1.1 效率不高问题
.http/2.0:
2015年,基于 Spdy技术,
.头信息和数据体都是二进制,称为头信息帧和数据帧
.复用TCP连接,在一个连接里,客户端和浏览器都可以同时发送多个请求或回应,且不用按顺序一一对应,避免了“队头堵塞“,此双向的实时通信称为多工(Multiplexing)
.引入头信息压缩机制(header compression),头信息使用gzip或compress压缩后再发送;客户端和服务器同时维护一张头信息表,所有字段都会存入这个表,生成一个索引号,不发送同样字段,只发送索引号,提高速度
.HTTP/2 允许服务器未经请求,主动向客户端发送资源,即服务器推送(serverpush)
3 HTTP协议介绍
http协议
http/0.9, http/1.0, http/1.1,http/2.0,目前主流的版本是1.1,协议查看或分析的工具:tcpdump,wireshark,tshark(wireshare的命令行版)
.http协议:stateless无状态
无状态指不能判断用户的来源。服务器无法持续追踪访问者来源
.解决http协议无状态方法
cookie 客户端存放,由服务器生成,把用户的信息,如编号进行封装后发给客户端保存,当客户端下次在访问同一网站的时候,就会把上次生成的cookie一起发给服务器端。此时服务器又会生成新的cookie,再次发给客户端保存
cookie是一段文本文件,相当于是小型数据库,http协议是无法实现身份验证的,cookie配合http协议实现身份的验证
cookie分成多种:轻量级和重量级的cookie
重量级,把所有的信息,如范围网站的行为,都放到cookie里
重cookie有个缺点时,换了机器,cookie就不存在了。而且按照cookie的原理,cookie会一直增大,造成了麻烦,所以一般不会采用重cookie
轻量级cookie之后将服务器生成的id(如用户登录的用户名)封装在cookie里发给用户。
浏览器中查看cookie
在谷歌网页的 “设置-->内容设置”,可以直接打开cookie查看
在Firefox中查看cookie, 可以选择”工具 > 选项 >隐私 >移除特定网站的Cookie。”可以查看cookie。
session 服务端存放。
session可以理解成时服务器端的小型数据库,这个会根据id来记录这个session,配合轻量级cookie来实现。session是放在服务器的磁盘里的。
session有个问题是,当有多台服务器提供统一服务时,这个时候存在seesion同步的问题。
解决session同步的方法
1.自动同步session,这个会造成服务器压力,仅适合小环境,如三五台机器
2.在web服务器前设置一个调度器(反向代理),当用户发起请求的时候,首先访问到调度器,该调度器不提供服务,但是转发请求到对应的服务器上,用户请求的时候,是同一ip,访问到调度器,此时要根据算法来实现调度器分配请求。其中,调度器可以根据ip来分配该请求分配到哪一台机器上
3.专门找一台session服务器。这是主流的做法。
事务的概念
http事务:一次访问的过程,有请求和响应,不同的协议报头
请求:request
响应:response
请求和响应的格式是通用的,使用的服务器没有关系,如apacheh和nginx一样,
响应报文和请求报文格式类似,开始行的格式有区别
关于请求和响应报文的相关介绍,见博客 http://ghbsunny.blog.51cto.com/7759574/1970485
4 HTTP服务器应用
.http服务器程序
httpd apache
nginx
lighttpd
.应用程序服务器
IIS .asp:支持动态的程序
tomcat .jsp,tomcat属于中间件的程序
jetty 开源的servlet容器,基于Java的web容器,相对tomcat而言是轻量级的,适合云的环境
Resin CAUCHO公司,支持servlets和jsp的引擎
webshpere(IBM), weblogic(BEA),jboss,oc4j(Oracle)
.市场占有率统计,查看网站www.netcraft.com
5 HTTP相关术语
.http:
Hyper Text Transfer Protocol,80/tcp,超文本传输协议。
.html:
Hyper Text Markup Language 超文本标记语言,编程语言
html是一种文本语言,带标签,
http协议是网络协议,网络中传输可以是a.html,a.txt,a.mp3格式的文件。其中html格式比文本格式显示会更漂亮。html是带格式的文本。浏览器根据html的标签来显示不同的字体或颜色,使得显示更漂亮
.示例:
<html> <head> <title>html语言</title> </head> <body> <h1>标题1</h1> <p><ahref=http://www.magedu.com>sunny home</a>欢迎你</p> <h2>标题2</h2> </body> </html>
.MIME:MultipurposeInternet Mail Extensions
多用途互联网邮件扩展 /etc/mime.types。
MIME(Multipurpose Internet Mail Extensions)多用途互联网邮件扩展类型。是设定某种扩展名的文件用一种应用程序来打开的方式类型,当该扩展名文件被访问的时候,浏览器会自动使用指定应用程序来打开。多用于指定一些客户端自定义的文件名,以及一些媒体文件打开方式。
它是一个互联网标准,扩展了电子邮件标准,使其能够支持:
非ASCII字符文本;非文本格式附件(二进制、声音、图像等);由多部分(multipleparts)组成的消息体;包含非ASCII字符的头信息(Header information)。
这个标准被定义在RFC 2045、RFC 2046、RFC 2047、RFC 2048、RFC 2049等RFC中。 MIME改善了由RFC 822转变而来的RFC 2822,这些旧标准规定电子邮件标准并不允许在邮件消息中使用7位ASCII字符集以外的字符。正因如此,一些非英语字符消息和二进制文件,图像,声音等非文字消息原本都不能在电子邮件中传输(MIME可以)。MIME规定了用于表示各种各样的数据类型的符号化方法。此外,在万维网中使用的HTTP协议中也使用了MIME的框架,标准被扩展为互联网媒体类型。
多用途互联网邮件扩展,它是一个互联网标准,在1992年最早应用于电子邮件系统,但后来也应用到浏览器。服务器会将它们发送的多媒体数据的类型告诉浏览器,而通知手段就是说明该多媒体数据的MIME类型,从而让浏览器知道接收到的信息哪些是MP3文件,哪些是Shockwave文件等等。服务器将MIME标志符放入传送的数据中来告诉浏览器使用哪种插件读取相关文件。
.格式:major/minor(大类别/细分类别) text/plain text/html text/css image/jpeg image/png video/mp4 application/javascript
URI
.URI: Uniform Resource Identifier 统一资源标识,分为URL和URN
.URN: Uniform Resource Naming,统一资源命名
示例:P2P下载使用的磁力链接是URN的一种实现
magnet:?xt=urn:btih:660557A6890EF888666,URN下载的资源是不确定在哪里的,即下载的位置不固定。
.URL: Uniform ResorceLocator,统一资源定位符,用于描述某服务器某特定资源位置
.两者区别:URN如同一个人的名称,而URL代表一个人的住址。换言之,URN定义某事物的身份,而URL提供查找该事物的方法。URN仅用于命名,而不指定地址
URL组成
URL组成可以用以下截图来说明
URL不一定是http协议,可以是ftp或邮件协议等
.<scheme>://<user>:<password>@<host>:<port>/<path>;<params>?<query>#<frag>
.schame:方案,访问服务器以获取资源时要使用哪种协议
.user:用户,某些方案访问资源时需要的用户名
.password:密码,用户对应的密码,中间用:分隔
.Host:主机,资源宿主服务器的主机名或IP地址
.port:端口,资源宿主服务器正在监听的端口号,很多方案有默认端口号
.path:路径,服务器资源的本地名,由一个/将其与前面的URL组件分隔
路径可以不是服务器的的实际路径,比如该url被重定向到其他位置
.params:参数,指定输入的参数,参数为名/值对,多个参数,用;分隔
.query:查询,传递参数给程序,如数据库,用?分隔,多个查询用&分隔
.frag:片段,一小片或一部分资源的名字,此组件在客户端使用,用#分隔
#用于定位,文档的内容地址定位
URL示例
.http://www.magedu.com:8080/images/logo.jpg
.ftp://mage:[email protected]/pub/linux.ppt
.rtsp://videoserver/video_demo/
Real Time Streaming Protocol
.http://www.magedu.com/bbs/hello;gender=f/send;type=title
.https://list.jd.com/list.html?cat=670,671,672&ev=149_2992&sort=sort_totalsales15_desc&trans=1
.http://apache.org/index.html#projects-list
网站访问量
.IP(独立IP):即Internet Protocol,指独立IP数。一天内来自相同客户机IP地址只计算一次,记录远程客户机IP地址的计算机访问网站的次数,是衡量网站流量的重要指标。
用ip138.com就可以查看到主机对外的端口
如局域网对外就一个ip,所以通过ip来统计可能不准确
.PV(访问量):即Page View, 页面浏览量或点击量,用户每次刷新即被计算一次,PV反映的是浏览某网站的页面数,PV与来访者的数量成正比,PV并不是页面的来访者数量,而是网站被访问的页面数量
.UV(独立访客):即Unique Visitor,访问网站的一台电脑为一个访客。一天内相同的客户端只被计算一次。可以理解成访问某网站的电脑的数量。网站判断来访电脑的身份是通过来访电脑的cookies实现的。如果更换了IP后但不清除cookies,再访问相同网站,该网站的统计中UV数是不变的
.网站统计:http://www.alexa.cn/rank/
网站访问统计示例
.示例:
.甲乙丙三人在同一台通过ADSL上网的电脑上(中间没有断网),分别访问www.magedu.com网站,并且每人各浏览了2个页面,那么网站的流量统计是:
IP:1 PV:6 UV:1
.若三人都是ADSL重新拨号后,各浏览了2个页面,则
IP:3 PV:6 UV:1
6 HTTP工作机制
.工作机制:
http请求:httprequest
客户端发过来的请求
http响应:httpresponse
一次http事务:请求<-->响应
.Web资源:webresource
一个网页由多个资源构成,打开一个页面,会有多个资源展示出来,但是每个资源都要单独请求。因此,一个“Web 页面”通常并不是单个资源,而是一组资源的集合
每个资源都有对应的地址
.静态文件:无需服务端做出额外处理,在客户端生成
文件后缀:.jpg,.html, .txt, .js, .css, .mp3, .avi
.动态文件:服务端执行程序,返回执行的结果,在服务器端生成。
文件后缀:.asp,.php, .jsp
.提高HTTP连接性能
.并行连接:通过多条TCP连接发起并发的HTTP请求,浏览器是并行连接
.持久连接:keep-alive,长连接,重用TCP连接,以消除连接和关闭的时延,以事务个数和时间来决定是否关闭连接
一个tcp连接可以下载多个资源,叫持久连接
.管道化连接:通过共享TCP连接发起并发的HTTP请求
一个连接里可以发起多个链接
.复用的连接:交替传送请求和响应报文(实验阶段)
交替传输请求和响应报文,目前还是实验阶段
7 HTTP服务通信过程
http的端口是80.基于socket通信,是应用层的协议。服务通信过程见以下两张截图
串行,并行,持久连接,管道连接 图形说明
串行 是一次连接只能下载一个资源
并行是第一次建立一个连接,连接成功后,并发创建多个连接
持久连接是建立第一次连接后,之后的下载是利用第一次的连接来下载,不需要重新创建连接。
管道化连接,即创建一个连接后,可以并行发起多个请求
本文出自 “阳光运维” 博客,请务必保留此出处http://ghbsunny.blog.51cto.com/7759574/1970488
以上是关于HTTP 之 HTTP概念介绍的主要内容,如果未能解决你的问题,请参考以下文章
前端开发必备!Emmet使用手册(转自 http://www.w3cplus.com/tools/emmet-cheat-sheet.html)