1.网站应用程序 - 《APS.NET本质论》
- HTTP协议 #
- 最简单的 Web 服务器 #
- 1.2.1 网络插座 Socket#
- 1.2.2 基于 TcpListener 的 Web 服务器 #
- 1.2.3 基于 HttpListener 的 Web 服务器 #
- 进入 ASP.NET#
- 1.3.1 Web 应用程序域 #
- 1.3.2 不使用 GAC 和 bin 加载 Web应用程序域 #
- 1.3.3 默默无闻的工作者对象 HttpWorkerRequest#
- 1.3.4 Web 应用程序的运行时 HttpRuntime#
- 对象化的 HTTP#
- 1.4.1 请求参数的对象类型 HttpRequest#
- 1.4.2 处理回应的对象类型 HttpResponse#
- 1.4.3 辅助的常用工具类 HttpServerUtility#
- 1.4.4 编码与解码 #
1.1.HTTP协议 #
浏览器与WEB服务器的协议是应用层协议,当前遵循HTTP/1.1,HTTP协议是无状态的协议
客户机与服务器通过请求和响应完成一次会话(Session),每次会话中,双方发送的数据称为消息(Message),消息分为两种:
请求消息和回应消息。
客户端请求消息 #
客户端发送一个HTTP请求到服务器的请求消息包括以下格式:请求行(request line)、请求头部(header)、空行和请求数据四个部分组成,下图给出了请求报文的一般格式。
服务器响应消息 #
HTTP响应也由四个部分组成,分别是:状态行、消息报头、空行和响应正文。
与程序员相关的主要有两个层:传输层和应用层。
传输层协议负责解决数据的传输问题,传输层依赖更低层的网络层完成实际数据传输,在 TCP/IP 网络协议中,负责可靠通信的传输层协议为 TCP 协议。而网络层一般由网络驱动来实现,普通程序员不涉及;TCP/IP 协议中,网络层的协议为 IP 协议。
1.2 最简单的 Web 服务器 #
1.2.1 网络插座 Socket#
使用 Socket 开发程序时,首先考虑使用的网络类型,主要三方面:
- Socket 类型,使用网络协议的类别,IPv4 的类型为 PE_INET
- 数据通信的类型,常见的数据报(SOCK_DGRAM)、数据流(SOCK_STREAM)
- 使用的网络协议,比如:TCP协议
在一个网络地址上,区分使用协议不同,分配一个数字,称为端口号(port)0~65535
- (0~1023)称为众所周知的端口,由 IANA(互联网地址分配机构)控制和分配,特定的网络程序使用。例如,TCP协议使用 80 端口完成 HTTP 协议传输。
- (1024~49151)称为登记端口,不由 IANA控制,但 IANA 维护一个登记列表。
- (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.3.4 Web 应用程序的运行时 HttpRuntime#
System.Web.HttpRuntime 类是整个 ASP.NET 服务器处理的入口。
1.4 对象化的 HTTP#
1.4.1 请求参数的对象类型 HttpRequest#
对于每一个请求参数,HttpRuntime 创建一个类型为 HttpReqeuest 对象实例,在System.Web 中。
这个类定义大量属性,表示关于 HTTP 请求参数。这些参数来源于 HttporkereRequest 。
1.4.2 处理回应的对象类型 HttpResponse#
1.4.3 辅助的常用工具类 HttpServerUtility#
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; }
作者:【唐】三三
出处:https://www.cnblogs.com/tangge/p/6533449.html
版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
2012-03-10 安装MSSQL2008出现的问题记录