为什么前端要了解HTTP协议,当你和后端进行合作的时候,需要访问后端的数据接口,这时候和后端进行接口对接就有两个必要了解的要点:HTTP协议和AJAX技术。
AJAX是一种技术,访问服务器数据的一种技术。
HTTP协议:是一种规定约成,我们前端使用AJAX技术访问后端数据时时要采用HTTP协议去请求信息,所以HTTP和AJAX是由非常紧密的关系。
下面让我们来了解一下HTTP协议。
一、前端开发发展历程
1.1 服务器端渲染
服务器端渲染(SSR,server side render): 早期的网页都是通过后端渲染来完成的。
- 客户端发出请求;
- 服务端接收请求并返回相应HTML文档;
- 页面刷新,客户端加载新的HTML文档。
缺点 :
- 当用户点击页面中的某个按钮向服务器发送请求时,页面本质上只是一些数据发生了变化,而此时服务器却要将重绘的整个页面再返回给浏览器加载,这显然有悖于程序员的“DRY( Don‘t repeat yourself )”原则;
- 而且明明只是一些数据的变化却迫使服务器要返回整个HTML文档,这本身也会给网络带宽带来不必要的开销。
2.2 前后端分离
前端只需要独立编写客户端代码,后端也只需要独立编写服务端代码提供数据接口, 前端通过AJAX请求来访问后端的数据接口,将Model展示到View中即可。
二、HTTP简介
HTTP协议:超文本传输协议(Hypertext Transfer Protocol,HTTP)。
- 是一个简单的请求-响应协议;
- 它通常运行在TCP之上;
- 它指定了客户端可能发送给服务器什么样的消息以及得到什么样的响应;
- 请求和响应消息的头以ASCII形式给出,而消息内容则具有一个类似MIME的格式。
- 这个简单模型是早期Web成功的有功之臣,因为它使开发和部署非常地直截了当。
三、发展阶段
3.1 0.9
0.9协议是适用于各种数据信息的简洁快速协议,是一个交换信息的无序协议,仅仅限于文字。由于无法进行内容的协商,在双发的握手和协议中,并没有规定双发的内容是什么,也就是图片是无法显示和处理的。只支持get请求。
3.2 1.0
支持POST、HEAD等请求方法,支持请求头、响应头等,支持更多种数据类型(不再局限于文本数据),但是浏览器的每次请求都需要与服务器建立一个TCP连接,请求处理完成后立即断开TCP连接,每次建立连接增加了性能损耗。
3.3 1.1(目前使用最广泛的版本)
在1.0协议中,双方规定了连接方式和连接类型,这已经极大扩展了HTTP的领域, 增加了PUT、DELETE等请求方法,采用持久连接(Connection: keep-alive),多个请求可以共用同一个TCP连接。
3.4 2.0
HTTP2.0的前身是HTTP1.0和HTTP1.1。虽然之前仅仅只有两个版本,但这两个版本所包含的协议规范之庞大,足以让任何一个有经验的工程师为之头疼。
网络协议新版本并不会马上取代旧版本。实际上,1.0和1.1在之后很长的一段时间内一直并存,这是由于网络基础设施更新缓慢所决定的。
四、工作原理
HTTP是基于客户/服务器模式,且面向连接的。
典型的HTTP事务处理有如下的过程:
- 客户与服务器建立连接;
- 客户向服务器提出请求;
- 服务器接受请求,并根据请求返回相应的文件作为应答;
- 客户与服务器关闭连接。
特性:
- 客户与服务器之间的HTTP连接是一种一次性连接。它限制每次连接只处理一个请求,当服务器返回本次请求的应答后便立即关闭连接,下次请求再重新建立连接。这种一次性连接主要考虑到WWW服务器面向的是Internet中成千上万个用户,且只能提供有限个连接,故服务器不会让一个连接处于等待状态,及时地释放连接可以大大提高服务器的执行效率。
- HTTP是一种无状态协议,即服务器不保留与客户交易时的任何状态。这就大大减轻了服务器记忆负担,从而保持较快的响应速度。HTTP是一种面向对象的协议。允许传送任意类型的数据对象。它通过数据类型和长度来标识所传送的数据内容和大小,并允许对数据进行压缩传送。当用户在一个HTML文档中定义了一个超文本链后,浏览器将通过TCP/IP协议与指定的服务器建立连接。
- HTTP支持持久连接,在HTTP / 0.9和1.0中,连接在单个请求/响应对之后关闭。在HTTP / 1.1中,引入了保持活动机制,其中连接可以重用于多个请求。这样的持久性连接可以明显减少请求延迟,因为在发送第一个请求之后,客户端不需要重新协商TCP 3-Way-Handshake连接。另一个积极的副作用是,通常,由于TCP的缓慢启动机制,连接随着时间的推移而变得更快。
五、运作方式
HTTP是基于请求/响应范式的。
一个客户机与服务器建立连接后,发送一个请求给服务器,请求方式的格式为,统一资源标识符、协议版本号,后边是MIME信息包括请求修饰符、客户机信息和可能的内容。服务器接到请求后,给予相应的响应信息,其格式为一个状态行包括信息的协议版本号、一个成功或错误的代码,后边是MIME信息包括服务器信息、实体信息和可能的内容。
其实简单说就是任何服务器除了包括HTML文件以外,还有一个HTTP驻留程序,用于响应用户请求。你的浏览器是HTTP客户,向服务器发送请求,当浏览器中输入了一个开始文件或点击了一个超级链接时,浏览器就向服务器发送了HTTP请求,此请求被送往由IP地址指定的URL。驻留程序接收到请求,在进行必要的操作后回送所要求的文件。
在这一过程中,在网络上发送和接收的数据已经被分成一个或多个数据包(packet),每个数据包包括:
- 要传送的数据;
- 控制信息,即告诉网络怎样处理数据包。
TCP/IP决定了每个数据包的格式。如果事先不告诉你,你可能不会知道信息被分成用于传输和再重新组合起来的许多小块。
许多HTTP通讯是由一个用户代理初始化的并且包括一个申请在源服务器上资源的请求。最简单的情况可能是在用户代理(UA)和源服务器(O)之间通过一个单独的连接来完成。
当一个或多个中介出现在请求/响应链中时,情况就变得复杂一些。
中介有三种:代理(Proxy)、网关(Gateway)和通道(Tunnel)。
- 一个代理根据URI的绝对格式来接受请求,重写全部或部分消息,通过URI的标识把已格式化过的请求发送到服务器。
- 网关是一个接收代理,作为一些其它服务器的上层,并且如果必须的话,可以把请求翻译给下层的服务器协议。
- 一个通道作为不改变消息的两个连接之间的中继点。当通讯需要通过一个中介(例如:防火墙等)或者是中介不能识别消息的内容时,通道经常被使用。