本材料是“企业发展概论”系列的一部分。上一篇文章:
你好!今天我们将了解HTTP和HTTPS协议。但首先,让我们澄清一点:我们正在讨论 OSI 模型应用层网络上的数据传输协议。您还记得,我们在之前的一篇文章中讨论了 OSI 模型。如果你不记得了,就在这里。
值得注意的是,HTTP 协议仅由文本组成。嗯,我们最感兴趣的是这段文本所在的结构。每条消息由三部分组成:
什么是数据传输协议
这是普遍接受的协议的名称,不同服务的开发人员通过该协议以单一形式发送信息。例如,使用Google Chrome,您可以从Facebook和Twitter获取信息,因为开发人员使用标准HTTP协议传输信息,并且您的浏览器可以处理它。统一的规则对于服务器端开发人员本身来说也非常方便:有许多库可以为您转换信息并使用所需的协议发送它。HTTP 最初被设想为传输 HTML 页面的协议。很长一段时间都是这种情况,但现在程序员经常通过它传输字符串和媒体文件。总体而言,该协议通用且灵活,并且非常易于使用。现在让我们弄清楚如何做到这一点。
HTTP结构
值得注意的是,HTTP 协议仅由文本组成。嗯,我们最感兴趣的是这段文本所在的结构。每条消息由三部分组成:
- 起始线—定义服务数据。
- 标头 - 消息参数的描述。
- 消息正文(Body)——消息数据。必须用空行与标题分隔。
简单的 HTTP 请求是什么样的
GET / HTTP/1.1
Host: javarush.com
User-Agent: firefox/5.0 (Linux; Debian 5.0.8; en-US; rv:1.8.1.7)
起始行包含:
- GET——请求方法;
- / ——请求路径(path);
- HTTP/1.1 - 数据传输协议的版本。
- Host——请求所发往的主机;
- User-Agent是发送请求的客户端。
POST /user/create/json HTTP/1.1
Accept: application/json
Content-Type: application/json
Content-Length: 28
Host: javarush.com
{
"Id": 12345,
"User": "John"
}
请求发送到javarush.com/user/create/json,协议版本为HTTP/1.1。Accept指定客户端期望接收什么响应格式,Content-Type指定以什么格式发送消息体。内容长度 - 正文中的字符数。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 Created — 请求已收到并成功处理,导致创建新资源或其实例;
- 301 Moved Permanently - 所请求的资源已被永久移动,后续对其的请求必须发生在新地址;
- 307 临时重定向 - 资源已暂时移动。目前,您可以使用自动重定向来访问它;
- 403 Forbidden——请求明确,但需要授权;
- 404 Not Found——服务器没有找到该地址的资源;
- 501 Not Implemented - 服务器不支持响应此请求的功能;
- 505 HTTP Version Not Supported - 服务器不支持指定版本的 HTTP 协议。
GO TO FULL VERSION