什么是HTTP请求?

什么是HTTP请求?

当你访问一个网站时,你的浏览器在后台向其服务器发出几十或几百个请求。服务器响应这些请求,提供网站需要加载的所有数据和文件。然而,真正的过程比这更复杂。

如果你想提高你的网站性能,了解HTTP请求是如何工作的是至关重要的。其中一些优化措施涉及最小化和压缩请求。从本质上讲,你正在优化你的服务器,以便更好地响应HTTP请求。

在这篇文章中,我们将仔细研究HTTP请求如何工作。我们还将向你展示HTTP请求的结构,以及如何在必要时对其进行故障排除。

  1. 什么是HTTP?
  2. 什么是HTTP请求(以及它是如何工作的)?
  3. HTTP请求和响应结构的介绍
  4. 如何监控和排除HTTP请求的故障

什么是HTTP?

HTTP是一种协议。事实上,这个首字母缩写代表了超文本传输协议。该协议规定了客户端和服务器之间的请求和响应的结构和语言。客户端通常是网络浏览器,但它们可以有多种形式,如搜索引擎机器人。

当你通过浏览器访问网站时,整个连接是通过HTTP进行的。该协议使你能够接收数据,包括文本、图像、视频、样式表、脚本等等。

自90年代初以来,HTTP一直是网络的骨干之一。在过去的几十年里,它不断发展,变得更加高效。2010年代后半期,HTTP/2得到了发展,它使客户端能够同时加载资源,而不是异步。这导致了巨大的性能提升。

在2022年,46%的网络都在使用HTTP/2。现在,已经有关于采用HTTP/3的讨论,这也被称为HTTP-over-QUIC。HTTP/3与UDP协议一起工作,这使它比传统的TCP连接(也就是HTTP和HTTP/2所使用的)更具优势。

什么是HTTP请求(以及它是如何工作的)?

把HTTP请求看作是你的浏览器与服务器的连接,并要求获得一个特定的资源或向其发送数据。有几种类型的HTTP请求方法,它们完全改变了你从服务器得到的响应类型。最常见的有以下几种:

  1. GET -这是迄今为止最经常使用的HTTP请求方法。一个GET请求要求服务器提供一个特定的信息或资源。当你连接到一个网站时,你的浏览器通常会发送几个GET请求,以接收它所需要的数据,从而加载页面。
  2. HEAD -通过HEAD请求,你只收到你想要加载的页面的标头信息。你可以使用这种类型的HTTP请求,在你使用GET下载一个文件之前,了解它的大小。
  3. POST -当你的浏览器需要向服务器发送数据时,它就会使用POST HTTP请求方法。例如,如果你在一个网站上填写了一个联系表并提交,你就使用了POST请求,这样服务器就会收到这些信息。
  4. PUT -PUT请求在功能上与POST方法相似。然而,你使用PUT请求来更新终端服务器上已经存在的信息,而不是提交数据。

还有一些其他类型的HTTP请求你可以使用,包括DELETE、PATCH和OPTIONS方法。然而,它们在日常使用中相对不常见。

提交一个HTTP请求涉及到以特定的格式向接收服务器发送一个消息。服务器返回一个响应,而客户端则采取相应的行动。例如,它可以加载资源或重新引导你到另一个页面。

当你得到一个HTTP错误时,通常是因为服务器不能满足你的请求。你得到的错误代码应该说明原因。HTTP错误的一些最常见的原因包括无法连接到服务器并找到所请求的资源。

HTTP请求和响应结构的介绍

HTTP请求和响应有着相似的结构。如果你想通过分析HTTP请求和响应来了解网站的潜在错误,那么了解这些结构就很重要。

一般来说,HTTP请求被分为三个部分。让我们仔细看看每一个部分。

HTTP请求行

每个HTTP请求都以一行开始,表明你使用的是什么类型的方法和HTTP协议的版本。例如,一个HTTP GET请求的开头可以是这样的:

GET /XXX HTTP/1.1

在这种情况下,GET方法后面的 “XXX” 字样表示你要接收的文件。

HTTP响应的开始部分重新重申了双方使用的协议版本。它还包括一个HTTP代码,与响应的状态相对应。

如果你访问一个网站并成功加载,你会看到一个2XX的HTTP成功信息:

HTTP/1.1 200 OK

如果资源因任何原因无法加载,HTTP响应的这一部分将显示错误代码。如果服务器找不到这个页面,你会看到一个类似这样的响应头:

HTTP/1.1 400 OK

如果你了解请求方法和HTTP状态码,那么起跑线就能准确地告诉你客户端和服务器之间正在进行什么样的交易。总的来说,这是请求中最简单的部分,可以理解。

请求标头

请求头紧随请求行之后,它们提供了关于交易的额外信息。头部指定了关于主机的信息,终端客户使用的网络服务器软件,客户的用户代理是什么,以及更多。

下面是一个HTTP请求标头的样子:

Host: website.com
User-Agent: Chrome/5.0 (Windows 10)
Accept-Language: en-US
Accept-Encoding: gzip, deflate
Connection: keep-alive

这些只是你可以使用的HTTP标头参数的一些例子。下面是该标头中每一行的含义:

  • Host: 这是你发出请求的服务器的IP或URL。
  • User-agent: 这个参数包含有关客户端及其操作系统(OS)的信息。通常情况下,它概述了你所使用的浏览器及其版本。
  • Accept-language: 这一行告诉服务器客户喜欢什么语言,以防你请求的文件有多个版本。
  • Accept-encoding: 这一行表示客户端可以处理的编码或压缩类型。
  • Connection: 这个参数告诉服务器是否保持连接状态或为其设置超时。如果连接在完成请求前超时,你会收到一个错误。

让我们把请求行和标头文件放在一起,以了解你需要使用的整体结构:

GET /XXX HTTP/1.1
Host: website.com
User-Agent: Chrome/5.0 (Windows 10)
Accept-Language: en-US
Accept-Encoding: gzip, deflate
Connection: keep-alive

在上面的例子中,你正在向website.com主机提交一个GET请求,以获取一个特定的资源。现在,让我们看看响应中的头像是怎样的:

HTTP/1.1 200 OK
Date: Mon, 27 Jul 2022 12:28:53 GMT
Server: Apache/2.2.14 (Win32)
Last-Modified: Wed, 22 Jul 2022 19:15:56 GMT
Content-Length: 88
Content-Type: text/html
Connection: Closed

响应头从第二行开始,它包括连接的日期和关于主机使用什么网络服务器和操作系统的信息。如果你请求的是一个文件,头也会显示它的最后修改日期,文件有多长,以及你处理的是什么类型的内容。最后一行告诉你,由于请求已经完成,连接已经关闭。

标题中的信息和参数可能会有所不同,这取决于你所做的是什么样的请求。然而,整体结构仍然是相同的。

HTTP报文主题

报文主题是HTTP请求中最直接的部分。它包含了你要发送或接收的数据,这取决于你所使用的请求方法。

如果你用GET方法请求一个HTML文件,你可能会收到一个结构如下的响应:

HTTP/1.1 200 OK
Date: Mon, 27 Jul 2022 12:28:53 GMT
Server: Apache/2.2.14 (Win32)
Last-Modified: Wed, 22 Jul 2022 19:15:56 GMT
Content-Length: 88
Content-Type: text/html
Connection: Closed
<!DOCTYPE HTML PUBLIC “-//IETF//DTD HTML 2.0//EN”>

文件的其余部分在这里

HTTP请求或响应的主体是用一个空行与标头分开的。我们在上面的例子中没有包括一个完整的HTML文件,以避免混淆。

如何监控和排除HTTP请求的故障

有几种方法可以监测网站上的HTTP请求,例如使用应用性能管理(APM)工具。这些工具可以让你监控网站上的 “transactions”,如PHP任务、HTTP错误、数据库请求等等。

如果你是Kinsta的用户,你可以使用一个内置的APM工具,你可以从MyKinsta仪表盘上启用。Kinsta APM工具可以让你检查你的网站正在接收哪些类型的外部HTTP请求,并监控它们的状态:

MyKinsta

MyKinsta

它还能让你监测反复出现的HTTP错误,这在排除网站故障时很方便。如果你在网站中看到一个HTTP状态错误,你可以启用Kinsta APM,复制这个错误,并从请求中获取细节。

APM工具还可以帮助你识别DDoS攻击,这应该是相当容易发现的,因为你会看到一连串的HTTP请求。知道你是在处理DDoS攻击还是流量激增,将有助于你想出如何处理这种情况。

小结

了解什么是HTTP请求以及它们是如何工作的,可以帮助你解决网站的问题。当你遇到HTTP错误时,这意味着服务器无法满足客户的请求。如果你知道那个请求是什么,并理解HTTP响应中的错误代码,你就有足够的信息来解决问题。

要了解一个HTTP请求,你就需要知道它可以使用哪些方法。此外,你还需要知道HTTP请求和响应的结构,并了解不同的HTTP状态代码。

评论留言