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 开发程序时,首先考虑使用的网络类型,主要三方面:

  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.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; }

1.网站应用程序 - 《APS.NET本质论》的更多相关文章

  1. ASP.NET本质论第一章网站应用程序学习笔记3-对象化的Http

    在.NET环境下,万物皆对象,在HttpRuntime收到请求之后,立即将通过HttpWorkerRequest传递的参数进行分析和分解,创建方便用于网站应用程序处理用的对象,其中主要涉及到两个对象类 ...

  2. ASP.NET本质论第一章网站应用程序学习笔记2

    1.初步走进ASP.NET 上篇笔记我们讲述了服务器监听问题,这篇我们就要讲述具体的请求处理了,ASP.NET所涉及的类大多数定义在System.Web程序集中. 在.NET中,程序集管理的最小逻辑单 ...

  3. 6. 缓存 - 《APS.NET本质论》

    CaChe是ASP.NET中唯一可以根据服务器使用情况,动态管理内存使用的状态管理方案.我们通过每个缓存数据的键值字符串来区分缓存的数据. 简单案例来说.将数据从数据库/文件取出放在服务器内存中,后来 ...

  4. SharePoint 2013 网站应用程序、网站集、网站知识整理

    网站应用程序:Web 应用程序是一种可以通过Web访问的应用程序.我们自己以前用VS开发的Web应用程序一般是通过人工部署到IIS上的,而SharePoint的Web应用程序是由SharePoint安 ...

  5. IIs 网站应用程序与虚拟目录的区别及高级应用说明(文件分布式存储方案)

    原文 IIs 网站应用程序与虚拟目录的区别及高级应用说明(文件分布式存储方案) 对于IIS网站,大伙用的比较多,就不啰嗦了.   今天和说说大伙比较少使用的"IIS应用程序”和虚拟目录的区别 ...

  6. ASP.NET本质论第一章网站应用程序学习笔记1

    1.统一资源标示符 1) 格式:协议://主机[.端口号][绝对路径[?参数]],在Http://www.kencery.com/hyl/index/login中,http表示协议的名称,www.ke ...

  7. Sharepoint 2010 自定义WebService 找不到网站应用程序

    错误描述:Net 开发WebService调用Microsoft.SharePoint.dll的服务器端对象模型,出现找不到网站的应用程序,或者出现500错误. 错误截图: [Webservice调用 ...

  8. 利用“Java同包同名类执行顺序”取消Java 网站应用程序Licence验证

    如果是在tomcat里运行,lib目录下一大堆的JAR包,不同的JAR包里可能会有相同的包名类名,JRE按照JAR名字的字母顺序加载JAR文件,同名类如果已加载,则后面的同名类会忽略. 公司购买的一款 ...

  9. Windows 10 Technical Preview 10041 使用 IIS Express 运行网站应用程序异常

    在 Windows 10 中使用 Visual Studio 2013 Ultimate with Update 4 开发网站,9926 的时候还好好的,升到 10041 就不能调试了: “Syste ...

随机推荐

  1. eclipse运行tomcat中发生异常重启后tomcat端口被占用

    在任务管理器关闭javaw进程即可,一般此时会有两个以上javaw进程,关闭其中占用内存较少的那个 可用netstat -ano命令查看端口占用情况

  2. c语言基础——基本数据类型

    1.基本数据类型是什么?包括有哪些代表?除了基本数据类型还有什么其他类型形式? (1)基本数据类型--用于描述基本的数据 (数.日期等) (2)有整型.实型.字符型.枚举类型等等 ========== ...

  3. 安装windows 2003iso 步骤

    参考:http://www.2cto.com/os/201303/192509.html u盘winpe下安装windows server 2003   一.准备和资源需求 1.U盘,内置WinPE ...

  4. 【题解】 [ZJOI2009]假期的宿舍 (二分图匹配)

    懒得复制题面,戳我 Solution: 处理出床位.要留校的人(注意来访问的人一定住校),和人与人的关系(连边) 再接着就是二分图. 注意的就是连向的人必须是有床位的 还要注意的就是只用判断住校的同学 ...

  5. exgcd模板

    逆元模板P1082 #include <cstdio> #include <algorithm> int exgcd(int a, int b, int &x, int ...

  6. 【CF522A】Reposts

    题目大意:给定一个有向图,求图中最长路. 题解:直接拓扑排序后按照拓扑序枚举即可.处理时应将字符串通过 map 映射成一个点,同时注意字符串大小写转换,C++ string 中没有提供直接大小写转换的 ...

  7. Json对象与Json字符串

  8. ubuntu14的unity desktop显示异常

    在多用户下,卸载compiz后某个单一用户出现菜单栏和任务栏图标消失的情况. 这时,需要在图形界面下重置compiz $dconf reset -f /org/compiz/ 重启unity $set ...

  9. package.json浅谈

    相信很多小伙伴都见过各种各样的Node.js项目,而里面都有一个名为package.json的文件,而这个文件究竟是干什么的呢? 简单的来说,这个文件就是对整个项目的各种情况的配置(也是介绍),下面给 ...

  10. java基础-网络编程(Socket)技术选型入门之NIO技术

    java基础-网络编程(Socket)技术选型入门之NIO技术 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.传统的网络编程 1>.编写socket通信的MyServer ...