1.3 ASPNETCore如何工作?
到目前为止,您应该对ASPNETCore是什么有一个基础的了解。在本节中,您将看到使用ASPNETCore构建的应用程序是如何工作的,从用户请求URL到如何在浏览器中显示页面。首先,您将看到HTTP请求在web服务器如何处理,然后您将看到ASPNETCore如何扩展该过程以创建动态网页。
1.3.1 HTTP web请求如何工作?
如您所知,ASPNETCore是一个用于构建从服务器提供数据的web应用程序的框架。web开发人员最常见的场景之一是构建一个可以在web浏览器中查看的web应用程序。图1.8显示了所有web服务器的工作流程。
图1.8 请求网页。用户首先通过网页发送请求,这将导致向服务器发送HTTP请求。服务器解释请求,生成必要的HTML,并以HTTP响应形式将其发送回。然后浏览器可以显示网页。
当用户导航到网站或在浏览器中键入URL时,该过程开始。URL或web地址由主机名和web应用程序上某些资源的路径组成。在浏览器中导航到该地址将使用HTTP协议从用户的计算机向web应用所在的服务器发送请求。
定义:网站的主机名通过域名服务(DNS)映射到IP地址来唯一标识其在互联网上的位置。示例包括microsoft.com,www.google.co.uk和facebook.com。
该请求通过互联网,可能到达世界的另一端,直到它最终到达与给定主机名相关联的服务器,web应用程序在该服务器上运行。该请求可能会在途中的多个路由器上被接收和重新广播,但只有当它到达与主机名相关联的服务器时,请求才会被处理。
HTTP简介
超文本传输协议(HTTP)是支持web的应用程序级协议。它是一种无状态请求响应协议,客户端机器向服务器发送请求,服务器依次发送响应。
每个HTTP请求都包含一个表示请求“类型”的动词和一个表示要与之交互的资源的路径。当向服务器发送数据时,它们通常还包括标头(即键值对),在某些情况下还包括正文(例如表单的内容)。
HTTP响应包含状态代码,指示请求是否成功,以及可选的标头和正文。
有关HTTP协议本身以及更多示例的更详细信息,请参见Sau Sheong Chang(Manning,2016)的《Go Web Programming》中的第1.3节(“HTTP简介”),https://livebook.manning.com/book/go-web-programming/chapter-1/point-9018-55-145-1。
一旦服务器接收到请求,它将检查请求是否合理,如果合理,它将生成HTTP响应。根据请求,该响应可以是网页、图像、JavaScript文件或简单的确认。在本例中,假设用户已经访问了web应用程序的主页,因此服务器会使用一些HTML进行响应。HTML被添加到HTTP响应中,然后通过互联网发送回发出请求的浏览器。
一旦用户的浏览器开始接收HTTP响应,它就可以开始在屏幕上显示内容,但HTML页面也可能引用服务器上的其他页面和链接。要显示完整的网页,而不是静态、无色的原始HTML文件,浏览器必须重复请求过程,获取每个引用文件。HTML、图像、用于样式的CSS和用于额外行为的JavaScript文件都是使用完全相同的HTTP请求过程获取的。
几乎所有发生在互联网上的互动都是这个基本过程。一个基本的网页可能只需要几个简单的请求就可以完全呈现,而一个现代的大型网页可能需要数百个请求。在撰写本文时,亚马逊主页(www.amazon.com)发出606个请求,其中包括3个CSS文件、12个JavaScript文件和402个图像文件!
既然现在您已经了解了该过程,让我们看看ASPNETCore如何在服务器上动态生成响应。
1.3.2 ASPNETCore如何处理请求?
使用ASPNETCore构建web应用程序时,浏览器仍将使用与以前相同的HTTP协议与应用程序通信。ASPNETCore本身包含了在服务器上处理请求所要求的一切,包括验证请求是否有效、处理登录详细信息以及生成HTML。
与通用网页示例一样,当用户的浏览器向服务器发送HTTP请求时,请求过程开始,如图1.9所示。
图1.9 ASPNETCore应用程序如何处理请求。ASPNETCore应用程序接收请求,该应用程序运行自托管web服务器。web服务器处理请求并将其传递给应用程序主体,后者生成响应并将其返回给web服务器。web服务器将此响应发送到浏览器。
ASPNETCore应用程序从网络接收请求。每个ASPNETCore应用程序都有一个内置的web服务器,默认情况下是Kestrel,它负责接收原始请求并构造数据的内部表示,即HttpContext对象,该对象可供应用程序的其他部分使用。
从这个对象中,应用程序应该具有创建对请求的适当响应所需的所有细节。它可以使用存储在HttpContext中的详细信息来生成适当的响应,这可能是生成一些HTML、返回“拒绝访问”消息或发送电子邮件,所有这些都取决于应用程序的要求。
应用程序完成处理请求后,将向web服务器返回响应。ASPNETCore web服务器将表示转换为原始HTTP响应并将其发送到网络,网络将其转发到用户的浏览器。
对于用户来说,这个过程似乎与图1.8所示的通用HTTP请求相同,用户发送了一个HTTP请求并收到了一个响应。所有的区别都是服务器端的应用程序中。
ASPNETCore和反向代理
您可以将ASPNETCore应用程序直接暴露到internet,以便Kestrel直接从网络接收请求。然而,在原始网络和应用程序之间使用反向代理更为常见。在Windows中,反向代理服务器通常是IIS,而在Linux或macOS上,它可能是NGINX、HAProxy或Apache。
反向代理是负责接收请求并将其转发到适当的web服务器的软件。反向代理直接暴露于互联网,而底层web服务器仅暴露于代理。此设置具有多种好处,主要是web服务器的安全性和性能。
您可能认为拥有反向代理和web服务器有些多余。为什么不选一个呢?其中一个好处是应用程序与底层操作系统的分离。同一个ASPNETCore web服务器Kestrel可以跨平台使用,并且可以在各种代理后面使用,而不会对特定的实现施加任何限制。或者,如果您编写了一个新的ASPNETCore web服务器,您可以使用它来代替Kestrel,而无需更改应用程序的其他任何内容。
反向代理的另一个好处是它可以抵御来自公共互联网的潜在威胁。他们通常负责其他方面,例如重新启动已崩溃的进程。Kestrel仍然是一个简单的HTTP服务器,在反向代理后面使用时,不必担心这些额外的功能。将其视为关注点的简单分离:Kestrel关注生成HTTP响应;反向代理与处理到internet的连接有关。
您已经看到了请求和响应是如何往返于ASPNETCore应用程序的,但我还没有谈到响应是如何生成的。在本书的第1部分中,我们将了解构成典型ASPNETCore应用程序的组件以及它们如何组合在一起。在ASPNETCore中生成响应需要时间,通常都在一秒钟内完成,但在本书的过程中,我们将缓慢地完成一个应用程序,详细介绍每个组件。
1.4 你将在本书中学到什么
本书将带您深入了解ASPNETCore框架。要从书中受益,您应该熟悉C#或类似的面向对象语言。对HTML和JavaScript等web概念的基本熟悉也将是有益的。你会学到
- 如何使用Razor Pages创建基于页面的应用程序
- ASPNETCore的关键概念,如模型绑定、验证和路由
- 如何使用Razor语法和标记帮助程序为网页生成HTML
- 在应用程序变得更复杂时使用依赖注入、配置和日志记录等功能
- 如何使用最安全的办法来保护应用程序
在本书中,我们将使用各种示例来学习和探索概念。这些示例通常都很小且独立,因此我们可以一次专注于单个功能。
我将在本书的大部分示例中使用Visual Studio,但您将能够使用您喜爱的编辑器或IDE进行后续操作。附录A包括设置编辑器或IDE以及安装.NET5.0SDK的详细信息。尽管本书中的示例展示了Windows工具,但在Linux或Mac平台上,您所看到的一切都可以实现得很好。
提示:您可以从以下位置安装.NET 5.0,https://dotnet.microsoft.com/download。附录A包含有关如何配置开发环境以使用ASPNETCore和.NET5.0的更多详细信息。
在下一章中,您将从模板创建第一个应用程序并运行它。我们将详细介绍构成应用程序的每个主要组件,并了解它们是如何协同工作来呈现网页的。
总结(第一章)
- ASPNETCore是一个以现代软件体系结构和模块化为重点构建的新web框架。
- 它最适合用于新的“green-field”项目。
- 传统技术(如WCF服务器和Web表单)不能与ASPNETCore一起使用。
- ASPNETCore在跨平台.NET 5.0平台上运行。您可以使用Windows兼容包访问Windows特定功能,如Windows注册表。
- .NET 5.0是.NET Core 3.1之后的下一个版本。
- 获取网页涉及发送HTTP请求和接收HTTP响应。
- ASPNETCore允许您动态构建对给定请求的响应。
- ASPNETCore应用程序包含web服务器,该服务器充当请求的入口点。
- ASPNETCore应用程序通常由反向代理服务器保护,该服务器将请求转发到应用程序。
标签:Core,ASP,HTTP,请求,web,ASPNETCore,应用程序,服务器,NET From: https://www.cnblogs.com/SoftwareLife/p/16944061.html