不管是前端还是后端,必须要了解的知识中,HTTP是必不可少的。所以就有必要来讲解下HTTP。还是从终极三问的“什么”开始吧!
HTTP是超文本传输协议。它是应用层协议的一种,是无状态的协议。主要是用于从WWW服务器传输超文本到本地浏览器的传送协议。它可以使浏览器更加高效,使网络传输减少。它不仅保证计算机正确快速地传输超文本文档,还确定传输文档中的哪一部分,以及哪部分内容首先显示(如文本先于图形)等。默认HTTP的端口号为80,我们来看下它在TCP/IP协议栈中的位置:
HTTP协议本身是不对请求和响应之间的通信状态保存的。那为什么要这样呢?其实这主要是为了更快地处理大量的请求,确保协议的可伸缩性,特意将协议设计的这么简单。
那如果要保存状态该怎么办?HTTP/1.1就提出了解决方案,虽然还是无状态的,但是引入了cookie技术,相比大家上网的话都应该碰到过“询问退出是否清楚cookie”,就是这个东西。当有了cookie之后,就可以管理状态了。
面向对象编程的时候,对象总是会有一些操作方法。以此类推HTTP作为协议,它也有操作方法。HTTP的方法有哪些呢?它有什么用处呢?,下面一一为大家解答。
在HTTP协议中,每一次通信就会连接和断开一次TCP链接。如下图:
在每一次的请求和响应都是一次完整的TCP连接的建立和断开,TCP的握手和挥手的开销对于频繁的通信来说是不可接受的。所以为了解决这个问题,提出了持久连接。也就是keep alive 。看下图:
这样做的优点:
你以为做就完美了吗?其实不然,每一次通信都需要HTTP响应,才能发送下一个包,这样效率岂不是很慢。所以就引入了管线化技术。
也就是不用等待响应,就可以直接发送下包数据了。如下图所示:
在上文中,讲述到cookie技术,它的原理就是:根据服务端发送来的响应报文中,有个set-Cookie的首部字段,通知客户端保存cookie。等到下次客户端需要访问服务端的时候,将保存的cookie发送出去。如下图所示:
第一次请求:
第二次请求:
本文只是讲了原理,提供了一种理解HTTP的思路,当然HTTP远不止这么简单。要精通HTTP还需多实践,毕竟实践出真知。