本资料是“企业发展概论”系列的一部分。往期文章:
你好!今天我们将学习 HTTP 和 HTTPS 协议。但首先,让我们澄清一点:我们讨论的是在 OSI 模型的应用层通过网络发送数据的协议。您可能还记得我们在之前的一篇文章中了解了 OSI 模型。如果你不记得了,就在这里。

什么是数据通信协议?
这就是我们所说的约定规则集,允许不同服务的开发人员以其他人可以理解的格式发送信息。例如,您可以使用 Google Chrome 浏览器从 Facebook 和 Twitter 获取信息,因为开发人员使用标准 HTTP 协议发送信息,您的浏览器可以处理这些信息。统一规则对于开发服务器部分的人来说非常方便:有很多库可以为您转换信息并使用适当的协议发送它。HTTP 最初被认为是一种用于发送 HTML 页面的协议。很长一段时间都是这样使用的,但是现在程序员经常用它来发送字符串和媒体文件。总的来说,这个协议被普遍接受,通用性强,而且真的很容易上手。现在我们将研究如何使用它。HTTP的结构
我们应该立即注意到 HTTP 协议只包含文本。我们最感兴趣的是这篇文章的结构。每条消息由三部分组成:- 起始行——这定义了一些内务处理数据。
- 标头——这些描述了消息参数。
- 正文——这是消息的内容。正文必须用空行与标题分开。
下面是一个简单的 HTTP 请求:
GET / HTTP/1.1
Host: codegym.cc
User-Agent: firefox/5.0 (Linux; Debian 5.0.8; en-US; rv:1.8.1.7)
起始行表示:
- GET — 请求的方法
- / — 请求的路径
- HTTP/1.1——协议版本
- 主机- 请求发送到的主机
- User-Agent——发送请求的客户端
https://cdn.codegym.cc/images/article/155cea79-acfd-4968-9361-ad585e939b82/original.pngsend?name1=value1&name2=value2
其中 codegym.cc是主机, /send是请求的路径,而 ? 是一个分隔符,表示后面跟着查询参数。最后,键值对(“键=值”)被列出,由一个符号分隔。 POST — 此方法在服务器上发布信息。POST 请求可以发送各种信息:作为“key=value”对的参数、JSON、HTML 代码,甚至文件。所有信息都在邮件正文中发送。例如:
POST /user/create/json HTTP/1.1
Accept: application/json
Content-Type: application/json
Content-Length: 28
Host: codegym.cc
{
"Id": 12345,
"User": "John"
}
请求发送到codegym.cc/user/create/json,协议版本为HTTP/1.1。“Accept”表示客户端希望收到的响应格式。“Content-Type”表示请求中发送的消息体的格式。“Content-Length”是正文中的字符数。一个 HTTP 请求可以包含很多不同的标头。有关详细信息,请查看协议的规范。
HTTP 响应
服务器收到请求后,进行处理并向客户端发送响应:
HTTP/1.1 200 OK
Content-Type: text/html; charset=UTF-8
Content-Length: 98
<html>
<head>
<title>An Example Page</title>
</head>
<body>
<p>Hello World</p>
</body>
</html>
响应的起始行包含协议版本 (HTTP/1.1)、状态代码 (200) 和状态描述 (OK)。它的标题包括内容的类型和长度。响应正文包含浏览器呈现为 HTML 页面的 HTML 代码。
响应状态码
关于消息正文和标题的一切都很清楚,但我们应该说几句关于状态代码的内容。响应状态代码始终为三位数字。代码的第一位表示响应的类别:- 1xx — 信息性的。请求已收到。服务器已准备好继续。
- 2xx — 成功。该请求已被接收、理解和处理。
- 3xx — 重定向。必须执行其他操作才能处理请求。
- 4xx — 客户端错误。请求包含错误或不符合协议。
- 5xx — 服务器错误。请求组成正确,但服务器无法处理它。
- 200 OK — 请求已收到并成功处理。
- 201 已创建——请求已被接收并成功处理,导致新资源或实例的创建。
- 301 永久移动 - 请求的资源已永久移动。对它的后续请求应该使用新地址。
- 307 Temporary Redirect — 资源已临时移动。目前,可以使用自动转发访问它。
- 403 Forbidden——理解请求,但需要授权。
- 404 Not Found——服务器没有在这个地址找到资源。
- 501 Not Implemented——服务器不支持响应请求所需的功能。
- 505 HTTP Version Not Supported — 服务器不支持指定版本的 HTTP 协议。
GO TO FULL VERSION