目录
一、HTTP版本
1.HTTP/0.9
HTTP 0.9是第一个版本的HTTP协议,1991年发布。它的组成极其简单,
只允许客户端发送GET这一种请求
,且不支持MIME类型和请求头。由于没有协议头,造成了HTTP 0.9协议
只支持一种内容,即纯文本
。不过网页仍然支持用HTML语言格式化,同时无法插入图片。
HTTP 0.9具有典型的无状态性,每个事务独立进行处理,
事务结束时就释放这个连接
。由此可见,HTTP协议的无状态特点在其第一个版本0.9中已经成型。一次HTTP 0.9的传输首先要建立一个由客户端到Web服务器的TCP连接,由客户端发起一个请求,然后由Web服务器返回页面内容,然后连接会关闭。
如果请求的页面不存在,也不会返回任何错误码
。
2.HTTP/1.0
HTTP/1.0是在1996年发布,在原来HTTP/0.9的版本上添加了许多方法,
各种HTTP首部
,以及
对多媒体对象的处理
,是请求和响应消息的协议版本。
除了GET命令
,还
引入了POST命令
。HTTP的请求和回应格式也变了,除了数据部分,每次通信都必须包含头信息(HTTP Header),用来描叙一些元数据。相对于HTTP/0.9,HTTP/1.0也支持了
MIME
,使HTTP协议扩大了处理的数据类型,支持对多媒体流信息的处理。
虽然,HTTP/1.0相对于HTTP/0.9有了革命性的改变,但HTTP/1.0依然有一些缺点,主要就是
每个TCP连接只能发生一个请求,发送数据完毕之后连接就会自动关闭
,如果还要再请求其他的资源,就要再创建一个连接。有些浏览器为了解决这个问题,用了一个非标准的Connection头部,也就是Keep-Alive模式(Connection:Keep-Alive)来避免了重新建立连接。但这个不是标准头部,各个浏览器和服务器实现可能不一致,因此不是根本解决办法。
3.HTTP/1.1
HTTP/1.1在1999年正式发布,是
目前用得最广泛的协议版本
。
HTTP1.1在HTTP1.0的基础上实现的一次飞跃,主要的改进集中在性能、安全、数据类型处理等方面提出Server端缓冲 对象的概念,是减少网络上相同类型内容的反复传送,提高访问速度。默认的是Keep-Alive模式(
持久连接
),提高了性能。同时还增加了
Host协议头
、
Range分段请求
、
分块传输编码(chucked)
、
缓存处理
、
请求的流水线处理
等功能。
4.HTTP/2
HTTP/2是最新的HTTP协议,与2015年5月发布,谷歌、IE11以及火狐等浏览器已经支持HTTP/2协议了。
注意是HTTP/2而不是HTTP/2.0,因为IEFT(互联网工程任务组)认为HTTP/2已经很成熟了,没有必要再发布子版本了,以后要是有重大改动就直接发布HTTP/3。而HTTP/2与HTTP/1.1也存在着挺大的差别,HTTP/2增加了
二进制协议
、
多路复用
、
头部压缩
、
服务器推送
等功能。
二、HTTP与HTTPS区别
超文本传输协议
HTTP协议
被用于在Web浏览器和网站服务器之间传递信息。HTTP协议以
明文方式
发送内容,
不提供任何方式的数据加密
,如果攻击者截取了Web浏览器和网站服务器之间的传输报文,就可以直接读懂其中的信息,因此HTTP协议不适合传输一些敏感信息,比如信用卡号、密码等。
为了解决HTTP协议的这一缺陷,需要使用另一种协议:
安全套接字层SSL
超文本传输协议
HTTPS
。为了数据传输的安全,HTTPS在HTTP的基础上加入了SSL协议,SSL依靠证书来验证服务器的身份,并为浏览器和服务器之间的通信加密。
HTTPS和HTTP的区别主要为以下四点:
1.是否收费
HTTPS协议需要到CA申请证书,一般免费证书很少,需要交费。
2.是否加密
HTTP是超文本传输协议,信息是明文传输,https 则是具有安全性的ssl加密传输协议。
3.连接方式
HTTP和HTTPS使用的是完全不同的连接方式,用的端口也不一样,
前者是80
,
后者是443
。
4.安全性
HTTP的连接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比HTTP协议安全。
三、请求与响应流程
四、HTTP请求报文
1.请求行
POST /ECAS2017_war_exploded/system/loginController/login HTTP/1.1
(1)
POST
,
请求方法
。以post方式去提交请求
(2)
/ECAS2017_war_exploded/system/loginController/login
,
URL请求地址
(3)
HTTP/1.1
,
协议版本
2.请求头
请求头部为请求报文添加了一些附加信息,由“名/值”对组成,每行一对,名和值之间使用冒号分隔
请求头 | 说明 |
Accept | 通知服务器端可以发送的数据类型 |
Content-Type | 提交的数据类型 |
Host | 接收请求的服务器地址,可以使IP:端口号,也可以是域名 |
Referer | 真正请求的地址路径,全路径 |
User-Agent | 向服务器表明,当前来访的客户端信息 |
Host | 主机地址 |
Connection | 指定相关连接的属性,如Connection:Keep-Active |
Accept-Charset | 通知服务端可以发送的编码格式 |
Accept-Encoding | 通知服务端可以发送的数据压缩格式 |
Accept-Language | 通知服务端可以发送的语言 |
Cache-Control | 对缓存的操作 |
3.请求体(浏览器发送给服务器的数据)
userName=admin&userPwd=e10adc3949ba59abbe56e057f20f883e
五、HTTP响应报文
1.响应行
HTTP/1.1 200 OK
(1)
HTTP/1.1
,
协议版本
(2)
200
,
状态码
(3)
OK
,
状态码描述
2.响应头
响应头 | 说明 |
Server | 服务器类型 |
Content-Type | 服务器返回给客户端的数据类型 |
Content-Length | 返回的数据长度 |
Date | 通讯的日期,响应的时间 |
3.响应体 (服务器返回给浏览器的数据)