最基础的HTTP网络协议

878 阅读7分钟

本文正在参与 “网络协议必知必会”征文活动

什么是协议?

你还记得有人叫你去参加一个派对而且这是一个化装舞会吗?您是否记得有人说过,例如,警察或主席不应该使用坏话(至少,不要在公共场合)?这就是我们所说的“decorum”,粗略地说,我们可以说这是一种社交协议。协议基本上是大家都同意的东西,没有明确说出来,所以大家都明白,事情必须以一种方式发生,而且只能以这种方式发生,否则根本不会发生。

将这一概念引入 Web,HTTP 协议(超文本传输​​协议的首字母缩写词)是一种为客户端和服务器之间的数据传输建立规范的协议,因此在交换信息时没有人说不同的“语言”。

它是如何工作的?

HTTP 是 TCP/IP 应用层协议。这对于初学者来说是难以理解的,但我们继续:该协议在客户端 - 服务器模型之上工作,该模型假设客户端(计算机,手机,智能手表等)向服务器发出资源请求(好吧,我没有太多的类比,但现在我们会说它是一台通常只存储文件的计算机)。当您访问一个网站时,您是在向服务器请求一个或多个组成您要访问的网站的文件;服务器检查您的请求是否有效并将这些文件发送给您;所以,您终于在屏幕上看到了该网站。该页面通常以 HTML 文件(Hyper Text Markup Language 的缩写)的形式呈现。**

请求类型

每个请求的第一行标识其类型。请求可以有一些类型。主要类型有:

  • GET:请求从服务器获取数据,无论该数据是页面、图像还是对客户端所做的任何行为的响应;
  • HEAD : 类似于 GET,但只向 Client 返回页眉;
  • POST:这种类型的请求可以理解为 GET 的对立面。客户端向服务器发送数据,例如登录数据、图像上传甚至是 Whatsapp 等服务上的消息;
  • PUT : 类似于 POST ,不同之处在于当客户端只想发送记录的一部分而不是新的完整记录时使用它,例如当您在社交网络上更改用户名时。这样客户端就不需要再次发送您的所有数据,覆盖您的旧注册,他发送一个只有新名称的 PUT;
  • DELETE : 请求删除服务器上的一些记录。

请求头

因此,每个请求都有一个类型,该类型在其标头中指定。标题的一个例子是:

GET / HTTP/1.1
Host: www.google.com
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:76.0) Gecko/20100101 Firefox/76.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Language: pt-BR,pt;q=0.8,en-US;q=0.5,en;q=0.3
Connection: close
Cookie:

此标头的第一行标识请求的类型(方法)。正如我们所见,它是一个 ** GET  **。仍然在第一行,我们可以看到发送请求的服务器(主机)内部的哪个路径。在这种情况下,客户端想要访问根页面“/”。第一行的第三个也是最后一个数据告诉服务器正在使用哪个版本的 HTTP 协议。在这种情况下, HTTP / 1.1

其余的标题内容可能会有所不同。它的表示总是按照Name:Value的顺序构建。

在标头中发送的最常见数据是:

  • Host:服务器的域名,即您尝试向其发送请求的域,例如*www.facebook.comwww.google.com*;
  • User-Agent:这条数据用于向发出请求的服务器(Host)标识,包含客户端的浏览器、版本和操作系统等数据;
  • 接受:告诉服务器(主机)客户端能够理解什么类型的数据。这对于服务器能够以它理解的方式响应客户端的请求至关重要。此数据的示例是text/plain e application/json
  • Content-Type:这个数据类似于前面提到的Accept。不同之处在于,在这种情况下,我们正在识别请求发送的数据类型。的文本/纯应用/ JSON示例也适用;
  • Connection:定义与服务器(主机)的连接是否应该为将来的请求保持打开状态。当连接保持时,发送keep-alive;当没有时,关闭
  • CookieCookie协助维护用户会话和识别客户端的过程。由于 HTTP 是无状态协议,它无法维护客户端的“状态”。因此,当您登录网站然后想要执行一些需要用户登录的任务时,您将需要再次登录。为了避免客户端的这种冗余过程,我们使用Cookies粗略地说,它只不过是一个散列字符串,可以加载用户数据,例如您的登录名、密码和上述User-Agent 的补充数据;
  • Referer:此数据向服务器(主机)提供发起请求的地址,例如,可用于跟踪和分析网站的使用情况;
  • Origin:此数据与Referer非常相似,但它采用了关于对服务器(主机)的请求来源的更简化数据。虽然Referer通常会发送 URL 的完整路径(例如www.example.com/home/login),但Origin会发送类似www.example.com 的内容

上升的一切都必须下降

这与请求没有什么不同。正如 Client 需要发送他的请求、标识自己并遵循Header的标准一样,Server(Host)需要发送对这个请求的答复,我们称之为Response

响应的一个例子是:

HTTP/1.1 200 OK
Date: Tue, 02 Jun 2020 21:45:35 GMT
Expires: -1
Cache-Control: private, max-age=0
Content-Type: text/html; charset=UTF-8
Strict-Transport-Security: max-age=31536000
Server: Apache/2.2.14
X-Frame-Options: SAMEORIGIN
Set-Cookie:
Connection: close
Content-Length: 194814

正如我们已经看到的,第一行与客户端发送的 Header 的第一行非常相似,不同之处在于,在这种情况下,客户端接收 HTTP 版本和响应状态

有几十个状态码,如果他负责从服务器发送它,则由开发人员调查哪个更合适。对于开发人员站在客户端的情况,快速搜索代码编号可提供明确的答案。

无论如何,重要的是我们对这些代码有一般的了解,这样当出现前所未有的代码时,我们才不会完全措手不及。为便于记忆,我们一般可以通过初始数字对代码进行分类:

  • Started with 1 (101, 102, etc) :返回有关请求的信息,是否被接受或进程是否继续;
  • Started with 2(201, 202, etc) :返回请求执行成功,其类型引用了可以执行的不同类型的请求;
  • Started with 3(301, 302, etc) :返回需要重定向的信息,以便完成请求的执行;
  • Started with 4(401, 402, etc) :返回请求中Client端出错的信息;
  • Started with 5(501, 502, etc) :返回请求中Server(Host)部分出错的信息。

响应中返回的其他数据是:

  • Date : 响应产生的日期;
  • Expires:有关何时应将内容视为过期的信息。值*-1*表示内容发送后立即过期;
  • Cache-Control:提供有关缓存策略的信息;
  • Server:提供有关服务器的信息;
  • Set-Cookie:提供从服务器发送到客户端的 Cookie;
  • X框选项:为浏览器渲染(或没有),一个页面中的信息<frame><iframe>

请求体呢?

当然,除了头部之外,还有请求响应的主体。它通常包括与请求相关的数据,这些数据不能识别客户端/服务器或没有敏感数据,如果被拦截,可能会导致安全问题。

HTTP × HTTPS

HTTPS安全超文本传输​​协议)只不过是更安全的 HTTP 版本。它是 HTTP 与 SSL(安全套接字层 _)/TLS(_传输层安全性)协议的结合,旨在确保个人数据、支付和登录数据等敏感信息的传输。SSL / TLS 协议允许通过加密连接传输数据,并要求服务器(主机)和客户端是真实的。由于 Wi-Fi 连接使用的大量增加,HTTPS 变得非常必要,例如,通过拦截客户端出口和 Wi-Fi 调制解调器入口之间的数据来进行攻击成为可能。这种攻击被称为中间人攻击。

你喜欢这篇文章吗?你认为有一个缺失的问题需要解决吗?

请发表评论并让我知道此内容是否对您有任何帮助。