CodeGym /Java 博客 /随机的 /第 3 部分 HTTP/HTTPS
John Squirrels
第 41 级
San Francisco

第 3 部分 HTTP/HTTPS

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

什么是数据通信协议?

这就是我们所说的约定规则集,允许不同服务的开发人员以其他人可以理解的格式发送信息。例如,您可以使用 Google Chrome 浏览器从 Facebook 和 Twitter 获取信息,因为开发人员使用标准 HTTP 协议发送信息,您的浏览器可以处理这些信息。统一规则对于开发服务器部分的人来说非常方便:有很多库可以为您转换信息并使用适当的协议发送它。HTTP 最初被认为是一种用于发送 HTML 页面的协议。很长一段时间都是这样使用的,但是现在程序员经常用它来发送字符串和媒体文件。总的来说,这个协议被普遍接受,通用性强,而且真的很容易上手。现在我们将研究如何使用它。

HTTP的结构

我们应该立即注意到 HTTP 协议只包含文本。我们最感兴趣的是这篇文章的结构。每条消息由三部分组成:
  1. 起始行——这定义了一些内务处理数据。
  2. 标头——这些描述了消息参数。
  3. 正文——这是消息的内容。正文必须用空行与标题分开。
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——发送请求的客户端
邮件正文丢失。在 HTTP 请求中,只需要起始行和“主机”标头。现在,让我们一步一步地查看所有内容。HTTP 请求必须包含一些方法。其中有九个:GET、POST、PUT、OPTIONS、HEAD、PATCH、DELETE、TRACE、CONNECT。最常见的是 GET 和 POST。这两种方法一开始就足够了。 GET — 此方法从服务器请求内容。因此,使用 GET 方法的请求没有消息体。但如果需要,您可以通过路径(在起始行中)按以下格式传递参数:

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 协议。
除了响应状态代码之外,还会发送状态描述。这有助于阐明每个特定状态的含义。 HTTP 协议非常实用:它提供了大量的标头,您可以使用这些标头非常灵活地安排客户端和服务器之间的通信。对所有请求和响应标头、请求方法和响应状态代码进行全面考虑对于一篇文章来说太多了。如果需要,可以阅读协议的官方规范,它描述了所有的细微差别。习惯上在80端口上使用HTTP协议,所以当你看到一个以80端口结尾的URL时,你可以确信你需要使用HTTP访问它。随着技术的发展和个人数据开始通过 Internet 发送,有必要考虑如何为客户端发送到服务器的信息提供额外的保护。这种想法的结果就是 HTTPS 协议。

HTTPS 和 HTTP 的区别

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