解释 ASP.NET Core 中的 HTTP 请求-响应生命周期。

HTTP 代表超文本传输协议。它是一个应用层协议。每当您在浏览器中访问网站时,它都会使用 HTTP 协议与服务器进行通信。

HTTP 请求由动词组成,如GET、POST、PUT、Delete 等。动词表示HTTP 请求的类型。该请求还包含它尝试访问的资源的路径。此外,所有 HTTP 请求都以键值格式提供一个或多个标头,以向服务器提供附加数据。最后,请求可以包含正文,它可能代表表单内容。

当服务器收到 HTTP 请求时,它会处理该请求并响应客户端。响应告诉客户端请求是否成功。

ASP.NET Core 是在服务器上运行的 Web 应用程序框架。当浏览器向服务器发出 HTTP 请求时,框架会拦截该请求。然后它使用路由将该请求路由到为处理该特定类型的请求而编写的方法。一旦代码执行并创建结果,框架就会向请求网页的浏览器发送响应。

ASP.NET Core 提供了处理请求的所有功能。它包括确保请求有效、路由请求、管理身份验证和授权以及生成对浏览器的响应。

当 HTTP 请求到达服务器时,ASP.NETCore 中默认的内置 Web 服务器 Kestrel会接收它。它处理请求并构建一个表示请求的 HTTPContext 对象,您的应用程序代码可以使用它来创建请求的响应。您可以发送 HTML 响应或 JSON/XML 数据。

应用程序处理完请求并生成响应后,它会将响应返回给 Web 服务器 Kestrel。Kestrel 将响应(可能是一个对象)转换为原始 HTTP 响应,并通过网络将其发送到浏览器。Thich 完成了一个请求-响应生命周期。

现在,您可以将ASP.NETCore Web 服务器直接暴露给外部流量,并且它可以处理它。但是,最佳做法是在外部网络和托管应用程序的 Web 服务器之间添加另一层间接(反向代理)。

反向代理是简单的服务器软件,它接收传入的请求并将它们转发到 Web 服务器。您将反向代理暴露给外部流量,即互联网,并将 Web 服务器安全地置于防火墙之后,仅暴露给反向代理。没有外部流量可以直接与 Web 服务器通信。

反向代理提供了两个重要的好处

  • 扩展:随着应用程序流量的增长,您可以添加任意数量的 Web 服务器来处理流量,而无需更改 Web 服务器的 IP 地址。由于外部流量只与反向代理通信,因此不需要知道 Web 服务器的地址。

  • 安全性:由于反向代理暴露于外部网络,因此与典型的 Web 服务器相比,它们的设计考虑了安全性。您的 Web 服务器可以留在防火墙后面。您还可以终止反向代理上的 SSL 连接,并在 Web 服务器和反向代理之间传输未加密的数据。

此外,反向代理处理其他任务,例如在 Web 服务器崩溃时重新启动或缓存静态文件等。

IIS 是 Windows 服务器上最流行的反向代理,而您可以在 Mac 或 Linux 服务器上使用 Nginx、Apache 或 HAProxy。