1.网站应用程序 - 《APS.NET本质论》

时间:2024-06-15 19:03:38

1.1.HTTP协议

浏览器与WEB服务器的协议是应用层协议,当前遵循HTTP/1.1,HTTP协议是无状态的协议

客户机与服务器通过请求和响应完成一次会话(Session),每次会话中,双方发送的数据称为消息(Message),消息分为两种:

请求消息和回应消息。

1.网站应用程序 - 《APS.NET本质论》

客户端请求消息

客户端发送一个HTTP请求到服务器的请求消息包括以下格式:请求行(request line)、请求头部(header)、空行和请求数据四个部分组成,下图给出了请求报文的一般格式。

1.网站应用程序 - 《APS.NET本质论》

服务器响应消息

HTTP响应也由四个部分组成,分别是:状态行消息报头空行和响应正文

1.网站应用程序 - 《APS.NET本质论》

与程序员相关的主要有两个层:传输层应用层

传输层协议负责解决数据的传输问题,传输层依赖更低层的网络层完成实际数据传输,在 TCP/IP 网络协议中,负责可靠通信的传输层协议为 TCP 协议。而网络层一般由网络驱动来实现,普通程序员不涉及;TCP/IP 协议中,网络层的协议为 IP 协议。

1.2 最简单的 Web 服务器

1.2.1 网络插座 Socket

使用 Socket 开发程序时,首先考虑使用的网络类型,主要三方面:

  1. Socket 类型,使用网络协议的类别,IPv4 的类型为 PE_INET
  2. 数据通信的类型,常见的数据报(SOCK_DGRAM)、数据流(SOCK_STREAM)
  3. 使用的网络协议,比如:TCP协议

在一个网络地址上,区分使用协议不同,分配一个数字,称为端口号(port)0~65535

  1. (0~1023)称为众所周知的端口,由 IANA(互联网地址分配机构)控制和分配,特定的网络程序使用。例如,TCP协议使用 80 端口完成 HTTP 协议传输。
  2. (1024~49151)称为登记端口,不由 IANA控制,但 IANA 维护一个登记列表。
  3. (49152~65535)称为动态或私有端口,由普通用户使用。

在.NET中,System.Net 提供网络编程的大多数数据类型以及常用操作

IPAddress 类表示一个 IP 地址

IPEndPoint 类表示一个 IP 地址和一个端口号的组合,称为网络的端点

System.Net.Sockets 命名空间中提供了基于 Socket 编程的数据类型

Socket 类封装了 Soket 的操作

常用:

Listen: 将 Socket 置于侦听状态,并设置等待队列的长度。

Accept:为新建连接创建新的 Socket。

Receive: 接收来自绑定的 Socket 的数据。

Send: 将数据发送到连接的 Socket。

1.2.2 基于 TcpListener 的 Web 服务器

为了简化基于 TCP 协议的监听程序,.NET 在 System.Net.Sockets 命名空间中提供了 TcpListener 类 ,使用它,在构造函数中传递一组网络端点信息就可以准备好监听参数,而不需要设置使用的网络协议细节,调用 Start方法后,监听开始。AcceptTcpClient 方法阻塞进程,直到一个客户端的连接到达经停气,这个方法返回一个代表客户端连接的代理对象,类型为 TcpClient,可以通过它与客户端进行通信。

1.2.3 基于 HttpListener 的 Web 服务器

为了进一步简化 HTTP 协议的监听器,System.Net 提供 HttpListener类。提供一系列相关对象封装 HTTP 的处理工作。这个类使用 Http.sys 系统组件完成工作,所以在 Windows XP SP2 或者 Server 2003 以上操作系统才能使用。(废话了,在用 WIN 2000 的在下佩服)

1.3 进入 ASP.NET

.NET中,程序集管理的最小逻辑单位为应用程序域(AppDomain),对.NET程序来说,可以动态加载程序集到应用程序域中。但是,加载之后的程序集不能单独卸载,只能以应用程序域来整体卸载。应用程序域提供四个重要的机制:

  • 隔离
  • 卸载
  • 安全
  • 配置

ASP.NET将网站应用程序寄宿在一个独立的应用程序域中,便于管理。虽然可以通过 System.AppDomain 可以创建自定义的应用程序域,但是,ASP.NET 在 System.Web.Hosting 命名空间中定义更加方便的辅助类,以协助程序员创建寄宿 Web 服务器程序所涉及的应用程序域并设置参数。

由于我们的应用程序将与 Web 应用程序运行在不同的应用程序域中,涉及跨域问题。.NET中跨域访问的类必须继承自 System.MarshalByRefObject,这样我们的管理程序将得到一个远程对象的代理对象,通过这个代理对象来访问 Web 应用程序域中的对象。

1.3.1 Web 应用程序域

ApplicationHost 类的静态方法 CreateApplicationHost 可以帮助我们非常简单的创建 Web 应用程序所需要的应用程序域并设置参数。

1.3.2 不使用 GAC 和 bin 加载 Web应用程序域

1.3.3 默默无闻的工作者对象 HttpWorkerRequest

准备用于处理的请求,必须封装为 HttpWorkerRequest 类型的对象,这是一个抽象类,定义在 System.Web 命名空间中

Public abstract class HttpWorkerRequest

通过这个类的实例,必须提供关于处理请求所需要的信息,以便服务器处理请求。

1.网站应用程序 - 《APS.NET本质论》

1.3.4 Web 应用程序的运行时 HttpRuntime

System.Web.HttpRuntime 类是整个 ASP.NET 服务器处理的入口。

1.网站应用程序 - 《APS.NET本质论》

1.4 对象化的 HTTP

1.4.1 请求参数的对象类型 HttpRequest

对于每一个请求参数,HttpRuntime 创建一个类型为 HttpReqeuest 对象实例,在System.Web 中。

这个类定义大量属性,表示关于 HTTP 请求参数。这些参数来源于 HttporkereRequest 。

1.网站应用程序 - 《APS.NET本质论》

1.4.2 处理回应的对象类型 HttpResponse

1.网站应用程序 - 《APS.NET本质论》

1.4.3 辅助的常用工具类 HttpServerUtility

1.网站应用程序 - 《APS.NET本质论》

1.4.4 编码与解码

1.HTML

HtmlEncode 编码,HtmlDecode 解码(一般浏览器完成)

2.URL

URL 串只应该出现 ASCII 字符。

UrlEncode 方法用来对URL 串进行编码

3.URL Path

UrlPathEncode 仅仅编码 URL 的 Path 部分

4.UrlToken

UrlTokenEncode 用于在 URL 中以字符串形式传递一个字节数组的时候使用

1.4.5 浏览器类型

在ASP.NET中,以 HttpBrowserCapabilities 类型对象的形式,通过 HttpRequest 提供给开发人员。

Public HttpBrowserCapabilities Browser { get; set; }

1.网站应用程序 - 《APS.NET本质论》