[TOC]
一、HTTP协议
关于HTTP协议的介绍,可以参考文章:HTTP 协议入门 - 阮一峰的网络日志
HTTP/1.1和HTTP/1.0的区别
-
新增方法
PUT
、PATCH
、HEAD
、OPTIONS
、DELETE
。 - 请求头新增Host字段 用来指定服务器的域名,有个该字段,就可以将请求发往同一台服务器上的不同网站,为虚拟主机的兴起打下了基础。请求消息中如果没有Host头域会报告一个错误(400 Bad Request)。
-
持久连接 HTTP1.1默认使用长连接。即TCP连接默认不关闭,可以被多个请求复用,不像HTTP1.0需要声明
Connection: keep-alive
。当连接一段时间未使用时,则自动关闭。 - 管道机制 HTTP1.1引入管道机制(pipelining)。即在同一个TCP连接里面,客户端可以同时发送多个请求,不过服务器还是按照顺序,先响应A请求,完成后再响应B请求。以前是在同一个TCP连接中,先发送A请求,等服务做出响应后,再发送B请求。(如果A需要处理很长时间,则会阻塞,HTTP/2 能解决这个问题)
- 响应头新增Content-Length字段 由于一个TCP连接可以传送多个响应,所以需要该字段来声明本次响应的数据长度来区分数据包是属于哪一个响应的。
- 支持分块传输编码
- 缓存处理 在HTTP1.0中主要使用header里的If-Modified-Since,Expires来做为缓存判断的标准,HTTP1.1则引入了更多的缓存控制策略例如Entity tag,If-Unmodified-Since, If-Match, If-None-Match等更多可供选择的缓存头来控制缓存策略。
- 带宽优化及网络连接的使用 HTTP1.0中,存在一些浪费带宽的现象,例如客户端只是需要某个对象的一部分,而服务器却将整个对象送过来了,并且不支持断点续传功能,HTTP1.1则在请求头引入了range头域,它允许只请求资源的某个部分,即返回码是206(Partial Content),这样就方便了开发者自由的选择以便于充分利用带宽和连接。
- 错误通知的管理 在HTTP1.1中新增了24个错误状态响应码,如409(Conflict)表示请求的资源与资源的当前状态发生冲突;410(Gone)表示服务器上的某个资源被永久性的删除。
HTTP/2和HTTP/1.1的区别
- 二进制协议 HTTP/1.1的头信息是文本格式,数据体可以是文本,也可以是二进制。HTTP/2的头信息和数据体均为二进制,并且统称为“帧(frame)“:头信息帧和数据帧。
-
头信息压缩 HTTP是无状态协议,每次请求都要带上头信息,请求的很多字段都是重复的,会浪费很多带宽。HTTP/2 对这一点做了优化,引入了头信息压缩机制(header compression)。一方面,头信息使用
gzip
或compress
压缩后再发送;另一方面,客户端和服务器同时维护一张头信息表,所有字段都会存入这个表,生成一个索引号,以后就不发送同样字段了,只发送索引号,这样就提高速度了。 - 多路复用 即在一个连接里,客户端可以同时发送多个请求,服务器可以同时发送多个响应,而且不用按照顺序一一对应,这样就避免了“队头阻塞”。举例来说,在一个TCP连接里面,服务器同时收到了A请求和B请求,于是先回应A请求,结果发现处理过程非常耗时,于是就发送A请求已经处理好的部分, 接着回应B请求,完成后,再发送A请求剩下的部分。
-
数据流 HTTP/2 将每个请求或回应的所有数据包,称为一个数据流(stream)。每个数据流都有一个独一无二的编号。数据包发送的时候,都必须标记数据流ID,用来区分它属于哪个数据流。另外还规定,客户端发出的数据流,ID一律为奇数,服务器发出的,ID为偶数。
数据流发送到一半的时候,客户端和服务器都可以发送信号(RST_STREAM帧),取消这个数据流。1.1版取消数据流的唯一方法,就是关闭TCP连接。这就是说,HTTP/2 可以取消某一次请求,同时保证TCP连接还打开着,可以被其他请求使用。
客户端还可以指定数据流的优先级。优先级越高,服务器就会越早回应。 - 服务器推送 常见场景是客户端请求一个网页,这个网页里面包含很多静态资源。正常情况下,客户端必须收到网页后,解析HTML源码,发现有静态资源,再发出静态资源请求。其实,服务器可以预期到客户端请求网页后,很可能会再请求静态资源,所以就主动把这些静态资源随着网页一起发给客户端了。
二、HTTPS协议
HTTPS协议简介
HTTPS是网景在1994年创建,并应用在网景导航者浏览器中。 最初,HTTPS是与SSL一起使用的;在SSL逐渐演变到TLS时,最新的HTTPS也由在2000年五月公布的RFC 2818正式确定下来。
HTTP和HTTPS对比
- HTTP协议运行在TCP之上,所有传输的内容都是明文,HTTPS运行在SSL/TLS之上,SSL/TLS运行在TCP之上,所有传输的内容都经过加密的。
- HTTPS协议需要到CA申请证书。
- HTTP默认使用80端口,HTTPS默认使用443端口。
- HTTPS用户访问速度较慢、服务端资源压力较大(因为要进行大量的密钥算法计算,消耗CPU、内存)。因此使用HTTPS的话,需要做好足够的优化。
参考文献
HTTP 协议入门 - 阮一峰的网络日志
HTTP,HTTP2.0,SPDY,HTTPS你应该知道的一些事
如有描述不当之处,欢迎指出与补充,谢谢!
网友评论