Http协议

http协议历史:

  • 早期:为了将超文本标记语言(HTML)文档从web服务器输出到客户端;

  • web2.0: 前端复杂化,HTML页面有了CSS,JAVASCRIPT丰富前端功能,又加入ajax与服务器进行资源交互;

  • 移动互联网:这个时代网络情况更加复杂,需要对HTTP做更多的优化处理;

http协议优化:

影响一个HTTP网络请求的因素有两个:带宽,延迟

  • 带宽:主要受限于基础网络及客户段网络情况;

  • 延迟:

  • 浏览器阻塞:浏览器同源请求最大链接数限制(不同浏览器内核最大链接数不同),超过最大数请求被阻塞;

  • DNS解析:域名解析成对应IP叫DNS解析,知道IP才能请求服务,可以通过DNS缓存减少解析时间;

  • 建立连接:HTTP基于TCP协议,TCP协议需要三次握手,一次完整的HTTP请求需要三次握手才真正建立连接,但是这就导致了多个情况必须每次都三次握手,这些连接无法复用,大量请求的情况下,延迟较大的情况下影响非常明显,能否服用连接可以是一个重要的优化点;

以上:延迟是影响HTTP请求的主要因素,也是HTTP发展可以优化的主要点。

HTTP1.0和HTTP1.1的区别

  • 缓存处理

   **1.0**: header: If-Modified-Since, Expires

   **1.1**: header: Etag(Entity tag),If-Unmodified-Since, If-Match, If-None-Match
  • 带宽优化及网络连接使用

   **1.0**: 不支持断点续传,获取响应的全部内容,http200状态码;

   **1.1**: header引入头域range,只请求需求的部分,支持断点续传,请求状态码206;可以通过curl命令确认是否支持206
  • 长连接

   **1.1**: 开始支持长连接(PersistentConnection)和流水线处理(pipelining),在一个TCP连接上可以传送多个HTTP请求和响应,
   减少建立和关闭连接的消耗和延迟;1.1默认开启keep-alive长连接。HTTP的Keep-alive是要让一个TCP连接活久点,默认30s,最小15s,可设置。
  • Host头处理

   **1.0**: 认定每台服务器绑定唯一的IP,url请求没有传递hostname;
   **1.1**: 虚拟主机技术发展,一台服务器可以有多个虚拟主机(Multi-homed Web Servers)共享一个IP地址,
   HTTP1.1请求消息和响应消息都支持host头域,请求没有host头域会报400错误
  • 错误通知的管理

   **1.1**:在HTTP1.1中新增了24个错误状态响应码,如409(Conflict)表示请求的资源与资源的当前状态发生冲突;
   410(Gone)表示服务器上的某个资源被永久性的删除

HTTPS和HTTP的一些区别

HTTPS需要到CA申请证书;

HTTPS建立在SSL/TLS之上,SSL/TLS运行在TCP之上;内容经过加密;

HTTP默认端口80,HTTPS默认端口443;

有效防止运营商数据劫持;

SPDY: HTTP1.X的优化

描述:google2012年提出的基于TCP的应用层协议:优化http1.x请求延迟,解决http1.x的安全性问题

  • 降低延迟

多路复用(multiplexing),多个stream请求复用一个tcp连接,解决了HOL blocking的问题,
注:排头阻塞(Head-of-line blocking, HOL):请求排队串行化单线程处理,一旦有某请求超时等,后续请求只能被阻塞
  • 请求优先级

SPDY允许给每个request设置优先级,重要请求可以优先得到响应,比如html
  • header压缩

header很多是多余的,合适的压缩算法可以减小包的大小和数量
  • 基于https加密协议传输

  • 服务器推送

例如请求html的时候,服务器会把style.css,style.js推送过来,再次请求style.js的时候会从缓存直接读取,不再次发送请求

HTTP2.0

可以看成是基于spdy的升级版

HTTP2.0和SPDY的区别

  1. HTTP2.0支持明文http请求,spdy是强制https请求

  2. HTTP2.0 消息头的压缩算法采用HPACK(http://http2.github.io/http2-spec/compression.html),而非 SPDY 采用的DEFLATE:(http://zh.wikipedia.org/wiki/DEFLATE)

HTTP2.0和HTTP1.x的新特性:

  • 新的二进制格式:http1.x的解析基于文本,http2.0的解析基于二进制,实现方便且健壮

  • 多路复用:连接共享,每个request对应一个id,一个连接可以有多个request,不同request可以混杂一起,接收方根据request的id不同再归属到不同的服务端请求中

  • 请求头压缩:通讯双方各自cache一份header fields表,避免重复的header传输,又减少传输header的大小

  • 服务器推送:同SPDY

强缓存(本地缓存)和协商缓存

Last updated

Was this helpful?