1 概述

本文将对HTTP协议的发展,相关术语,工作机制进行介绍

2 HTTP协议发展介绍

.http/0.9

1991,原型版本,功能简陋,只有一个命令GET

GET /index.html ,服务器只能回应HTML格式字符串,不能回应别的格式

.http/1.0: 

19965,支持cache, MIME, method

每个TCP连接只能发送一个请求,发送数据完毕,连接就关闭,如果还要请求其他资源,就必须再新建一个连接,http/1.0引入了POST命令和HEAD命令

POST 上传

HEAD 只看头部信息,不看数据

头信息是ASCII码,后面数据可为任何格式。服务器回应时会告诉客户端,数据是什么格式,即Content-Type字段的作用。这些数据类型总称为MIME 多用途互联网邮件扩展,每个值包括一级类型和二级类型,预定义的类型,也可自定义类型。

常见Content-Type值:text/xml p_w_picpath/jpegaudio/mp3

.http/1.1

19971月,HTTP/1.1是目前的主流

.引入了持久连接(persistent connection),即TCP连接默认不关闭,可以被多个请求复用,不用声明Connection:keep-alive。对于同一个域名,大多数浏览器允许同时建立6个持久连接

.引入了管道机制(pipelining),即在同一个TCP连接里,客户端可以同时发送多个请求,进一步改进了HTTP协议的效率

.新增方法:PUTPATCHOPTIONSDELETE 

.同一个TCP连接里面,所有的数据通信是按次序进行的。服务器只能顺序处理回应,前面的回应慢,会有许多请求排队,造成"队头堵塞"Head-of-lineblocking

.为避免上述问题,两种方法:一是减少请求数,二是同时多开持久连接。网页优化技巧,比如合并脚本和样式表、将图片嵌入CSS代码、域名分片(domain sharding)等域名分片(domain sharding)指把不同的资源放在不同的域里

.HTTP 协议不带有状态,每次请求都必须附上所有信息。请求的很多字段都是重复的,浪费带宽,影响速度

.Spdy

2009,谷歌研发,解决HTTP/1.1 效率不高问题

.http/2.0

2015年,基于 Spdy技术,

.头信息和数据体都是二进制,称为头信息帧和数据帧

.复用TCP连接,在一个连接里,客户端和浏览器都可以同时发送多个请求或回应,且不用按顺序一一对应,避免了队头堵塞“,此双向的实时通信称为多工(Multiplexing

.引入头信息压缩机制(header compression,头信息使用gzipcompress压缩后再发送;客户端和服务器同时维护一张头信息表,所有字段都会存入这个表,生成一个索引号,不发送同样字段,只发送索引号,提高速度

.HTTP/2 允许服务器未经请求,主动向客户端发送资源,即服务器推送(serverpush

3 HTTP协议介绍

http协议

http/0.9, http/1.0, http/1.1,http/2.0,目前主流的版本是1.1,协议查看或分析的工具:tcpdump,wireshark,tsharkwireshare的命令行版)

.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

请求和响应的格式是通用的,使用的服务器没有关系,如apachehnginx一样,

响应报文和请求报文格式类似,开始行的格式有区别

关于请求和响应报文的相关介绍,见博客  http://ghbsunny.blog.51cto.com/7759574/1970485

4 HTTP服务器应用

.http服务器程序

httpd  apache

nginx

lighttpd

.应用程序服务器

IIS .asp:支持动态的程序

tomcat .jsptomcat属于中间件的程序

jetty 开源的servlet容器,基于Javaweb容器,相对tomcat而言是轻量级的,适合云的环境

Resin CAUCHO公司,支持servletsjsp的引擎

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>

.MIMEMultipurposeInternet Mail Extensions

多用途互联网邮件扩展 /etc/mime.types

MIME(Multipurpose Internet Mail Extensions)多用途互联网邮件扩展类型。是设定某种扩展名文件用一种应用程序来打开的方式类型,当该扩展名文件被访问的时候,浏览器会自动使用指定应用程序来打开。多用于指定一些客户端自定义文件名,以及一些媒体文件打开方式。

它是一个互联网标准,扩展了电子邮件标准,使其能够支持:

ASCII字符文本;非文本格式附件(二进制、声音、图像等);由多部分(multipleparts)组成的消息体;包含非ASCII字符的头信息(Header information)。

这个标准被定义在RFC 2045RFC 2046RFC 2047RFC 2048RFC 2049RFC中。 MIME改善了由RFC 822转变而来的RFC 2822,这些旧标准规定电子邮件标准并不允许在邮件消息中使用7ASCII字符集以外的字符。正因如此,一些非英语字符消息和二进制文件,图像,声音等非文字消息原本都不能在电子邮件中传输(MIME可以)MIME规定了用于表示各种各样的数据类型的符号化方法。此外,在万维网中使用的HTTP协议中也使用了MIME的框架,标准被扩展为互联网媒体类型。

多用途互联网邮件扩展,它是一个互联网标准,在1992年最早应用于电子邮件系统,但后来也应用到浏览器服务器会将它们发送的多媒体数据的类型告诉浏览器,而通知手段就是说明该多媒体数据的MIME类型,从而让浏览器知道接收到的信息哪些是MP3文件,哪些是Shockwave文件等等。服务器MIME标志符放入传送的数据中来告诉浏览器使用哪种插件读取相关文件

.格式:major/minor(大类别/细分类别)
text/plain 
text/html 
text/css
p_w_picpath/jpeg 
p_w_picpath/png
video/mp4 
application/javascript

URI

.URI: Uniform Resource Identifier 统一资源标识,分为URLURN

.URN: Uniform Resource Naming,统一资源命名

示例:P2P下载使用的磁力链接是URN的一种实现

magnet:?xt=urn:btih:660557A6890EF888666URN下载的资源是不确定在哪里的,即下载的位置不固定。

.URL: Uniform ResorceLocator,统一资源定位符,用于描述某服务器某特定资源位置

.两者区别:URN如同一个人的名称,而URL代表一个人的住址。换言之,URN定义某事物的身份,而URL提供查找该事物的方法。URN仅用于命名,而不指定地址

URL组成

URL组成可以用以下截图来说明

HTTP 之 HTTP概念介绍_http

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/p_w_picpaths/logo.jpg

.ftp://mage:password@172.16.0.1/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 之 HTTP概念介绍_协议_02

HTTP 之 HTTP概念介绍_http_03

串行,并行,持久连接,管道连接 图形说明

串行 是一次连接只能下载一个资源

并行是第一次建立一个连接,连接成功后,并发创建多个连接

持久连接是建立第一次连接后,之后的下载是利用第一次的连接来下载,不需要重新创建连接。

管道化连接,即创建一个连接后,可以并行发起多个请求

HTTP 之 HTTP概念介绍_http_04

HTTP 之 HTTP概念介绍_协议_05