
不管是前端还是后端,必须要了解的知识中,HTTP是必不可少的。所以就有必要来讲解下HTTP。还是从终极三问的“什么”开始吧!
什么是HTTP?
HTTP是超文本传输协议。它是应用层协议的一种,是无状态的协议。主要是用于从WWW服务器传输超文本到本地浏览器的传送协议。它可以使浏览器更加高效,使网络传输减少。它不仅保证计算机正确快速地传输超文本文档,还确定传输文档中的哪一部分,以及哪部分内容首先显示(如文本先于图形)等。默认HTTP的端口号为80,我们来看下它在TCP/IP协议栈中的位置:
HTTP协议本身是不对请求和响应之间的通信状态保存的。那为什么要这样呢?其实这主要是为了更快地处理大量的请求,确保协议的可伸缩性,特意将协议的这么简单。
那如果要保存状态该怎么办?HTTP/1.1就提出了解决方案,虽然还是无状态的,但是引入了cookie技术,相比大家上网的话都应该碰到过“询问退出是否清楚cookie”,就是这个东西。当有了cookie之后,就可以管理状态了。
HTTP方法
面向对象编程的时候,对象总是会有一些操作方法。以此类推HTTP作为协议,它也有操作方法。HTTP的方法有哪些呢?它有什么用处呢?,下面一一为大家解答。
- GET方法:顾名思义,获取资源。用来请求URI识别的资源,然后从服务器解析后返回响应内容;
- POST方法:传输内容。虽然GET也可以用来传输内容,但是一般不这么做的。POST的主要目的并不是获取内容。
- PUT方法:传输文件。就想FTP协议中的请求文件上传一样,要求在请求报文的实体中包含文件内容,然后保存到请求的URI指定的位置。但是鉴于HTTP1.1的PUT方法自身不带有验证机制,任何人都可以上传文件,存在安全问题,因此一般的不选用这种方式。如果配合Web应用程序的验证机制,或设计采用REST标准的同类Web网站,就可能会开放使用PUT方法。
- HEAD方法:用来获取报文首部。用于确认URI的有效性以及资源更新的日期时间等
- DELETE方法:用来删除文件的。与PUT方法相反。
- OPTIONS方法:用来查询针对请求的URI指定的资源方法。
- TRACE方法:用来追踪路径。这个就不讲了,不常用。
- CONNECT方法:主要用来在与代理服务器通信的时候建立隧道。隧道协议使用SSL,TLS协议加密内容经过TCP传输的。
keep alive
在HTTP协议中,每一次通信就会连接和断开一次TCP链接。如下图:
在每一次的请求和响应都是一次完整的TCP连接的建立和断开,TCP的握手和挥手的开销对于频繁的通信来说是不可接受的。所以为了解决这个问题,提出了持久连接。也就是keep alive 。看下图:
这样做的优点:
- 减少TCP握手和挥手的开销
- 减轻了服务器的负载
你以为做就完美了吗?其实不然,每一次通信都需要HTTP响应,才能发送下一个包,这样效率岂不是很慢。所以就引入了管线化技术。
管线化
也就是不用等待响应,就可以直接发送下包数据了。如下图所示:
cookie技术
在上文中,讲述到cookie技术,它的原理就是:根据服务端发送来的响应报文中,有个set-Cookie的首部字段,通知客户端保存cookie。等到下次客户端需要访问服务端的时候,将保存的cookie发送出去。如下图所示:
第一次请求:
第二次请求:
总结
本文只是讲了原理,提供了一种理解HTTP的思路,当然HTTP远不止这么简单。要精通HTTP还需多实践,毕竟实践出真知。
胜象大百科









