JavaRush /Java 博客 /Random-ZH /第 3 部分. HTTP/HTTPS 协议

第 3 部分. HTTP/HTTPS 协议

已在 Random-ZH 群组中发布
本材料是“企业发展概论”系列的一部分。上一篇文章: 你好!今天我们将了解HTTP和HTTPS协议。但首先,让我们澄清一点:我们正在讨论 OSI 模型应用层网络上的数据传输协议。您还记得,我们在之前的一篇文章中讨论了 OSI 模型。如果你不记得了,就在这里第 3 部分. HTTP/HTTPS 协议 - 1

什么是数据传输协议

这是普遍接受的协议的名称,不同服务的开发人员通过该协议以单一形式发送信息。例如,使用Google Chrome,您可以从Facebook和Twitter获取信息,因为开发人员使用标准HTTP协议传输信息,并且您的浏览器可以处理它。统一的规则对于服务器端开发人员本身来说也非常方便:有许多库可以为您转换信息并使用所需的协议发送它。HTTP 最初被设想为传输 HTML 页面的协议。很长一段时间都是这种情况,但现在程序员经常通过它传输字符串和媒体文件。总体而言,该协议通用且灵活,并且非常易于使用。现在让我们弄清楚如何做到这一点。

HTTP结构

值得注意的是,HTTP 协议仅由文本组成。嗯,我们最感兴趣的是这段文本所在的结构。每条消息由三部分组成:
  1. 起始线—定义服务数据。
  2. 标头 - 消息参数的描述。
  3. 消息正文(Body)——消息数据。必须用空行与标题分隔。
使用HTTP协议,您可以向服务器发送请求(请求)并从服务器接收响应(响应)。请求和响应的参数略有不同。

简单的 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是发送请求的客户端。
没有消息正文。在 HTTP 请求中,只需要起始行和 Host 标头。现在让我们按顺序看一下一切。HTTP 请求必须包含某种方法。总共有九个:GET、POST、PUT、OPTIONS、HEAD、PATCH、DELETE、TRACE、CONNECT。最常见的是 GET 和 POST。一开始这两种方法就足够了。 GET - 从服务器请求内容。因此,使用 GET 方法的请求没有消息正文。但如果有必要,您可以通过以下格式的路径发送参数: ​​https://cdn.javarush.com/images/article/155cea79-acfd-4968-9361-ad585e939b82/original.pngsend?name1=value1&name2=value2 这里: javarush .com — 主机, /send — 请求路径, ? — 指示后面跟着请求参数的分隔符。最后,参数以 key=value 格式列出,并用 & 符号分隔。 POST - 在服务器上发布信息。POST 请求可以传输各种信息:key=value 格式的参数、JSON、HTML 代码,甚至文件。所有信息都在消息正文中传输。例如:
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 协议。
除了响应状态代码之外,还会发送状态描述,以便直观地了解特定状态的含义。HTTP协议非常实用:它提供了大量的标头,使用它们可以在客户端和服务器之间建立灵活的通信。所有请求和响应标头、请求方法和响应状态代码不能在一篇文章中考虑。如果有必要,您可以阅读官方协议规范,其中描述了所有细微差别。HTTP 协议通常在端口 80 上使用,因此当您看到以端口 80 结尾的地址时,可以确定应该通过 HTTP 访问它。随着技术的发展和个人数据在互联网上的活跃移动,我们不得不考虑如何为客户端传输到服务器的信息提供额外的保护。结果就是 HTTPS 协议。

HTTPS 和 HTTP 有什么区别

HTTPS 在语法上与 HTTP 协议相同,即,它使用相同的起始行和标头。唯一的区别是额外的加密和默认端口 (443)。HTTPS 在 HTTP 和 TCP 之间(即应用层和传输层之间)进行加密。如果您忘记了它是什么,请查看有关 OSI 模型的文章。现代加密标准是 TLS。我们不会太深入地讨论这个主题,但请记住,加密发生在信息到达传输层之前。HTTPS 绝对加密除请求发送到的主机和端口之外的所有信息。要将服务器切换为使用HTTPS协议而不是HTTP,我们不需要更改服务器代码。该功能在 servlet 容器中启用,我们将在下面的文章中讨论。这就是今天的全部内容。但等一下。要检测 HTTP 请求,请打开 Google Chrome,按 F12,选择“网络”选项卡。您的浏览器发送/接收的所有请求和响应都将显示在此处。 第 4 部分:Maven 基础知识 第 5 部分:Servlet。编写一个简单的 Web 应用程序 第 6 部分. Servlet 容器 第 7 部分. 介绍 MVC(模型-视图-控制器)模式 第 8 部分. 编写一个小型 spring-boot 应用程序
评论
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION