HTTP

同样都是活着,不同的性格与不同的际遇造就不同的人生。

前言

这几天好朋友结婚了,帮忙倒是其次,最主要是吃,可是每到晚上回家,就不免想写点什么,看看js高3,看看技术群里聊什么。当你养成一个好习惯的时候,你就会发现这个习惯给你带来的好处是多么巨大,但是往往很多人死在了养习惯的路上。

不知道你对HTTP的知识了解的有多少,我对它的认识也不是很深,直到前一段时间在知乎上看到HTTP2才发现原来这个家伙已经出2了。如果你对2理解很深,可以留言加,一起探讨,如果你刚听说,那么你可以通过这篇文章粗浅的了解一下。

HTTP

在仔细认识HTTP之前,先思考一下,这是什么?他的工作原理是什么?他能解决什么问题?

HTTP是超文本传输协议,设计之初的目的是为了提供一种发布和接受Html的方法。建立起服务端与客户端联系,就像两个人一样, 语言就是两个人信息交流的方式。而计算机与计算机之间是通过一个与一个的协议进行信息的交流。

通常他的工作模式是这样的,

①由客户端发起一个Http请求,建立一个到服务器指定端口的Tcp连接。

②Http服务器会监听这个请求,一旦收到请求,就会返回服务端一个状态行,比如”HTTP/1.1 200 OK”,和(响应的)消息,消息的消息体可能是请求的文件、错误消息、或者其它一些信息。

③客户端接受到服务器响应的请求,做 相应的显示。

④断开

HTTP请求是以报文的形式呈现的。

从客户端到服务端是请求报文,请求行 - 通用信息头 - 请求头 - 实体头 - 报文主体;

从服务器到客户机的响应报文,状态行 - 通用信息头 - 响应头 - 实体头 - 报文主体;

HTTP的版本史

1、0.9 已过时。只接受 GET 一种请求方法,没有在通讯中指定版本号,且不支持请求头。由于该版本不支持 POST 方法,所以客户端无法向服务器传递太多信息

2、HTTP/1.0 http1.0诞生于1996年,这是第一个在通讯中指定版本号的HTTP 协议版本,至今仍被广泛采用,特别是在代理服务器中。

3、HTTP/1.1 http1.1诞生于1999年,当前版本。持久连接被默认采用,并能很好地配合代理服务器工作。还支持以管道方式同时发送多个请求,以便降低线路负载,提高传输速度。

HTTP/1.1相较于 HTTP/1.0 协议的区别主要体现在:

①、缓存处理

②、带宽优化及网络连接的使用

③、错误通知的管理

④、消息在网络中的发送

⑤、互联网地址的维护

⑥、安全性及完整性

4、HTTP/2.0 当前版本。HTTP/2.0没有改动Http的语义,HTTP方法,状态码,URI以及首部字段,等这些概念一如往常,却能致力于突破上一代性能的限制,改进传输性能,实现 低延迟和高吞吐,之所以叫2.0,是在于新增的二进制分帧层.

相比 HTTP/1.x,HTTP/2 在底层传输做了很大的改动和优化:

①、二进制分帧:HTTP/2 采用二进制格式传输数据,而非 HTTP/1.x 的文本格式。 HTTP/2 中,同域名下所有通信都在单个连接上完成,该连接可以承载任意数量的双向数据流。每个数据流都以消息的形式发送,而消息又由一个或多个帧组成。多个帧之间可以乱序发送,根据帧首部的流标识可以重新组装。

②、头部压缩:HTTP/2 对消息头采用 HPACK 进行压缩传输,能够节省消息头占用的网络的流量。而 HTTP/1.x 每次请求,都会携带大量冗余头信息,浪费了很多带宽资源。头压缩能够很好的解决该问题。

③、多路复用:直白的说就是所有的请求都是通过一个 TCP 连接并发完成。HTTP/1.x 虽然通过 pipeline 也能并发请求,但是多个请求之间的响应会被阻塞的,所以 pipeline 至今也没有被普及应用,而 HTTP/2 做到了真正的并发请求。同时,流还支持优先级和流量控制。当流并发时,就会涉及到流的优先级和依赖。优先级高的流会被优先发送。图片请求的优先级要低于 CSS 和 SCRIPT,这个设计可以确保重要的东西可以被优先加载完。

④、Server Push:服务端能够更快的把资源推送给客户端。例如服务端可以主动把 JS 和 CSS 文件推送给客户端,而不需要客户端解析 HTML 再发送这些请求。当客户端需要的时候,它已经在客户端了。