图解HTTP原理

不管是前端还是后端,必须要了解的知识中,HTTP是必不可少的 。所以就有必要来讲解下HTTP 。还是从终极三问的“什么”开始吧!
什么是HTTP?HTTP是超文本传输协议 。它是应用层协议的一种,是无状态的协议 。主要是用于从WWW服务器传输超文本到本地浏览器的传送协议 。它可以使浏览器更加高效,使网络传输减少 。它不仅保证计算机正确快速地传输超文本文档,还确定传输文档中的哪一部分,以及哪部分内容首先显示(如文本先于图形)等 。默认HTTP的端口号为80,我们来看下它在TCP/IP协议栈中的位置:

图解HTTP原理

文章插图
HTTP协议本身是不对请求和响应之间的通信状态保存的 。那为什么要这样呢?其实这主要是为了更快地处理大量的请求,确保协议的可伸缩性,特意将协议设计的这么简单 。
那如果要保存状态该怎么办?HTTP/1.1就提出了解决方案,虽然还是无状态的,但是引入了cookie技术,相比大家上网的话都应该碰到过“询问退出是否清楚cookie”,就是这个东西 。当有了cookie之后,就可以管理状态了 。
HTTP方法面向对象编程的时候,对象总是会有一些操作方法 。以此类推HTTP作为协议,它也有操作方法 。HTTP的方法有哪些呢?它有什么用处呢?,下面一一为大家解答 。
  • GET方法:顾名思义,获取资源 。用来请求URI识别的资源,然后从服务器解析后返回响应内容;
  • POST方法:传输内容 。虽然GET也可以用来传输内容,但是一般不这么做的 。POST的主要目的并不是获取内容 。

图解HTTP原理

文章插图
  • PUT方法:传输文件 。就想FTP协议中的请求文件上传一样,要求在请求报文的实体中包含文件内容,然后保存到请求的URI指定的位置 。但是鉴于HTTP1.1的PUT方法自身不带有验证机制,任何人都可以上传文件,存在安全问题,因此一般的网站不选用这种方式 。如果配合Web应用程序的验证机制,或架构设计采用REST标准的同类Web网站,就可能会开放使用PUT方法 。

图解HTTP原理

文章插图
  • HEAD方法:用来获取报文首部 。用于确认URI的有效性以及资源更新的日期时间等
  • DELETE方法:用来删除文件的 。与PUT方法相反 。
  • OPTIONS方法:用来查询针对请求的URI指定的资源方法 。

图解HTTP原理

文章插图
  • TRACE方法:用来追踪路径 。这个就不讲了,不常用 。
  • CONNECT方法:主要用来在与代理服务器通信的时候建立隧道 。隧道协议使用SSL,TLS协议加密内容经过TCP传输的 。

图解HTTP原理

文章插图
keep alive在HTTP协议中,每一次通信就会连接和断开一次TCP链接 。如下图:
图解HTTP原理

文章插图
在每一次的请求和响应都是一次完整的TCP连接的建立和断开,TCP的握手和挥手的开销对于频繁的通信来说是不可接受的 。所以为了解决这个问题,提出了持久连接 。也就是keep alive。看下图:
图解HTTP原理

文章插图
这样做的优点:
  1. 减少TCP握手和挥手的开销
  2. 减轻了服务器的负载
你以为做就完美了吗?其实不然,每一次通信都需要HTTP响应,才能发送下一个包,这样效率岂不是很慢 。所以就引入了管线化技术 。
管线化也就是不用等待响应,就可以直接发送下包数据了 。如下图所示:
图解HTTP原理

文章插图
cookie技术在上文中,讲述到cookie技术,它的原理就是:根据服务端发送来的响应报文中,有个set-Cookie的首部字段,通知客户端保存cookie 。等到下次客户端需要访问服务端的时候,将保存的cookie发送出去 。如下图所示:
第一次请求:
图解HTTP原理

文章插图
第二次请求:
图解HTTP原理

文章插图
总结本文只是讲了原理,提供了一种理解HTTP的思路,当然HTTP远不止这么简单 。要精通HTTP还需多实践,毕竟实践出真知 。

【图解HTTP原理】


    推荐阅读