
1.01996年和1.11999年 的一些区别三年升级三年磨一剑长连接HTTP1.0需要主动的设置Connection: keep_alive 的连接方式才能开启长连接HTTP1.1默认支持长连接的在一个TCP连接上可以传输多个HTTP请求减少了建立和关闭连接的消耗和延迟Host头域Http1.0中认为每台服务器都绑定了一个唯一的IP地址因此请求消息中的URL并没有传递主机名但随着虚拟主机的技术发展 一台服务器上可以存在多一个虚拟主机共享一个IP地址Http1.1的请求信息和响应信息都应该支持Host头域且请求信息中如果没有Host头域就回报一个错误400 Bad Request。传送优化Http1.0中header和body必须一起发送有时候会造成浪费宽带的现象并且不支持断点续传的功能。Http1.1 则在请求头中引入了range头信息允许只请求资源的部分及返回码为206这样就方便了开发者充分利用带宽和连接。新增的一些响应状态码如上面提到的400 2062.0的新特性2015年1.多路复用http2.0采用多路复用的技术可以做到一个链接并行处理多个请求2. header压缩http2.0 使用enoder来压缩需要传输的header使得header头文件变小了不少3. 服务器推送根据请求服务器会顺便把一些客户端需要的别的资源一起推送过来这样的话只需要一次http传输就能得到较完整的资源提高性能4. 解析格式http1.0和1.0 都是基于文本解析的而http2.0是通过二进制解析的。http的请求头和响应头部我们可以看见请求报文格式请求行请求头空行请求包体仅限post方法请求的方法可以分为post , get , put , options , delet , head响应报文的格式状态行协议版本状态码还有一些描述响应头部空行响应包体状态码1** 信息相关2** 请求成功3** 重定向相关4** 客户端错误相关或无法完成请求5** 服务端错误相关以请求htttp://localhost:8080/zzz1/denglu.jsp为例子说一下请求的整个过程1.首先建立根据请求头的一些信息建立一个TCP链接2. Connector把该请求交给了它所在的Service的Engine引擎来处理3.Engine引擎匹配该HostHost获得/zzz1/denglu.jsp匹配 /zzz1 的Contex4. Context得到/denglu.jsp的资源在他的Mapping table中寻找对应的servlet5. 对应于Jspservlet类,构造HttpServletRequest和response6.通过responst返回给Host返回给Engine, 返回给Connnector , 返回给客户端。