搞定 HTTP 协议(二):HTTP 协议总览

从今天的文章开始,咱们将正式开始介绍 HTTP 协议。文本主要介绍 HTTP 协议的整体结构以及相关概念,让你们对 HTTP 协议有一个总体的了解。html

客户端与服务器之间的通讯

HTTP 协议是一个无状态的请求/响应协议,经过创建一个可靠的会话层或者传输层链接来交换消息。HTTP 客户端是一个为了发送一个或多个 HTTP 请求而和服务器创建链接的程序。而一个 HTTP 服务器是为了发送 HTTP 响应而接收链接的程序。git

有时,咱们会把客户端理解为浏览器,但这是片面的。通常而言,咱们使用用户代理(user agent)表示任何发起请求的客户端程序。这里的用户代理包括但不限于:浏览器、网络爬虫、命令行工具、定制应用、移动应用等。github

因此,在一般状况下,咱们将请求访问文本或图像等资源的一端称为客户端,而提供资源的一端称为服务器。浏览器

进行 HTTP 通讯时,在一条通讯线路上一定有一端是客户端,而另外一端是服务器。但须要注意的是,客户端和服务器的角色有可能会相互交换。在一次链接中,某个程序可能扮演客户端的角色;而在另外一次链接中,这个程序又可能会扮演服务器的角色。安全

下面咱们来看一个应用了 GET 请求的 HTTP 协议, 其中请求报文与响应报文的内容以下:bash

请求报文服务器

GET / HTTP/1.1
Host: 127.0.0.1:9090
Connection: keep-alive
Accept-Language: zh-CN,zh;q=0.9,en;q=0.8
复制代码

响应报文网络

HTTP/1.1 200 ok
Connection: keep-alive
Content-Length: 164
Content-Type: text/html
Date: Sat, 06 Jun 2020 01:53:57 GMT

<html>
...
复制代码

关于请求报文与响应报文的具体细节,我会在下一篇文章中具体介绍。负载均衡

中间人

HTTP(HyperText Transfer Protocol) 协议翻译成中文就是超文本传输协议。传输意味着数据要在客户端和服务器之间进行传递,可是 HTTP 协议并无规定数据只能从客户端直接传递给服务器,或者只能从服务器直接传递给客户端。相反,在传递的过程当中能够有不少“中间人”。工具

例如咱们常见的 CDN 就能够充当“中间人”的角色,它存在于客户端与服务器之间,提供网络加速、负载均衡、安全防御等一系列能力,能够有效的提升整个传输服务。

在 HTTP 协议中,常见的“中间人”形式有三种:代理、网关(反向代理)和隧道。在某些状况下,一个独立的“中间人”可能根据每次请求的性质分别扮演一个源服务器、代理、网关和隧道。

而关于源服务器、代理、网关和隧道的知识,我也会在后面的文章中详细介绍。

HTTP 协议的无状态与持久链接

上一篇文章中已经介绍过 HTTP 协议无状态的特色,这里再简单回顾一下。HTTP 协议无状态的特色是指它不会对发生过的请求和响应的状态作持久化存储。也就是说,HTTP 协议没法根据上一次请求的状态来处理本次请求。

在早期,无状态的特色是 HTTP 协议的一大优点,因为不用存储状态,能够极大地提升服务器的运行效率。可是随着时代的发展,在愈来愈多的场景下,咱们须要进行状态的保存以方便处理相应的业务,因而引入了 Cookie 技术。

一般,为了保存状态,服务器发送的响应报文中会有一个叫作 Set-Cookie 的首部字段,客户端获取到该报文后,就能够保存 Cookie。下一次请求时,客户端会将保存的 Cookie 携带在请求报文中发送给服务器,服务器拿到 Cookie 后进行比对,就能够知道是从哪一个客户端发来的请求了。

小结

本文介绍了 HTTP 协议的基本结构:

1.HTTP 协议是一个传输协议,因此它必须至少有两方参与,分别是客户端和服务器。

2.HTTP 协议的核心是它传输的报文。客户端发送请求报文,服务器发送响应报文。

3.HTTP 协议由客户端发起请求开始,服务端发送响应结束。但 HTTP 协议没有规定中间不容许有其它的参与者。事实上,在传输过程当中,有很是多的“中间人”参与传输过程。

4.HTTP 协议具备无状态的特色,为了知足现代业务的须要,出现了 Cookie 技术,能够在客户端保存状态。

在后面的文章中,我会基本围绕今天的这些要点依次展开。下一篇文章将介绍 HTTP 协议中的报文,敬请期待。

最后的话

你的点赞会给我一天好心情,若是能顺手 来个 star,再顺便关注下公众号(零幺小馆)就更完美了。

参考资料

1.RFC 7230 文档

2.《图解 HTTP》

3.极客时间 《透视 HTTP 协议》

相关文章
相关标签/搜索