Vary: Accept-Encoding
X-Fastly-Request-ID: 98a36fb1b5642c8041b88ceace73f25caaf07746
<Response body truncated for brevity>
Now that the browser has received the server’s response, it renders the HTML webpage. Then, for
each resource, it sends another HTTP call to its URI and loads it. A resource is an external asset,
such as an image, a JavaScript file, a CSS file, or a font.After the response, the server is no longer
aware of the client; the communication has ended. It is essential to understand that to create a
pseudo-state between each request, we need to use an external mechanism. That mechanism could
be the session-state leveraging cookies, simply using cookies, or some other ASP.NET Core
mechanisms, or we could create a stateless application. I recommend going stateless whenever
possible. We write primarily stateless applications in the book.
Note
If you want to learn more about session and state management, I left a link in the Further
reading section at the end of the chapter.
As you can imagine, the backbone of the internet is its networking stack. The Hypertext Transfer
Protocol (HTTP) is the highest layer of that stack (layer 7). HTTP is an application layer built on
the Transmission Control Protocol (TCP). TCP (layer 4) is the transport layer, which defines
how data is moved over the network (for instance, the transmission of data, the amount of
transmitted data, and error checking). TCP uses the Internet Protocol (IP) layer to reach the
computer it tries to talk to. IP (layer 3) represents the network layer, which handles packet IP
addressing.A packet is a chunk of data that is transmitted over the wire. We could send a large file
directly from a source to a destination machine, but that is not practical, so the network stack breaks
down large items into smaller packets. For example, the source machine breaks a file into multiple
packets, sends them to the target machine, and then the target reassembles them back into the
source file. This process allows numerous senders to use the same wire instead of waiting for the first
transmission to be done. If a packet gets lost in transit, the source machine can also send only that
packet back to the target machine.Rest assured, you don’t need to understand every detail behind
networking to program web applications, but it is always good to know that HTTP uses TCP/IP and
chunks big payloads into smaller packets. Moreover, HTTP/1 limits the number of parallel requests a
browser can open simultaneously. This knowledge can help you optimize your apps. For example, a
high number of assets to load, their size, and the order in which they are sent to the browser can
increase the page load time, the perceived page load time, or the paint time.To conclude this subject
and not dig too deep into networking, HTTP/1 is older but foundational. HTTP/2 is more efficient
and supports streaming multiple assets using the same TCP connection. It also allows the server to
send assets to the client before it requests the resources, called a server push.If you find HTTP
interesting, HTTP/2 is an excellent place to start digging deeper, as well as the HTTP/3 proposed
standard that uses the QUIC transport protocol instead of HTTP (RFC 9114). ASP.NET Core 7.0+
supports HTTP/3, which is enabled by default in ASP.NET Core 8.0.Next, let’s quickly explore .NET.
Getting started with .NET
A bit of history: .NET Framework 1.0 was first released in 2002. .NET is a managed framework that
compiles your code into an Intermediate Language (IL) named Microsoft Intermediate
Language (MSIL). That IL code is then compiled into native code and executed by the Common
Language Runtime (CLR). The CLR is now known simply as the .NET runtime. After releasing
several versions of .NET Framework, Microsoft never delivered on the promise of an interoperable
stack. Moreover, many flaws were built into the core of .NET Framework, tying it to Windows.Mono,
an open-source project, was developed by the community to enable .NET code to run on non-
Windows OSes. Mono was used and supported by Xamarin, acquired by Microsoft in 2016. Mono
enabled .NET code to run on other OSes like Android and iOS. Later, Microsoft started to develop an
official cross-platform .NET SDK and runtime they named .NET Core.The .NET team did a
magnificent job building ASP.NET Core from the ground up, cutting out compatibility with the older
.NET Framework versions. That brought its share of problems at first, but .NET Standard alleviated