Programming ASP.NET(1) - ASP.NET WebForms

HTTP请求:

浏览器请求URL-->通过DNS转换为IP地址-->浏览器打开一个socket,连接到IP所指服务器的80端口。

请求报文:
GET /default.aspx HTTP/1.1 (此外还有GET, PUT, DELETE等)
Host: www.mycloud.com (标头:http报头)
User-Agent:(标识发出该请求的浏览器类型)
Connection:(关闭连接或保持现有连接有效)
If-Modified-Since:(提供客户端缓存验证)

HTTP响应:

包含一个状态行和几个标头

HTTP/1.1 200 OK (状态行:包括消息协议版本和状态码)
Server: Microsoft-IIS/6.0
Content-Type: text/html (该类型由给定的MIME类型(text/html)表示)
Content-Length: 55

<html><body><h1>Asp.net Programming</h1></body></html>

最后一个标头和HTTP响应内容之间的空行并不只是为了格式化——回车与换行是必不可少的,且是该schema中相当重要的内容之一。

服务器端抽象层的构建:

浏览器与Web服务器间的每次会话都会引起数据包(packet)报文的交互,这与前面我们所讨论的类似。如果所请求的URL是一个HTML页面,则Web服务器一般会读取该.html文件的内容,并将其刷新到(flush)响应报文的主体中。如果URL是ASP.NET页面,则会涉及一个特殊的IIS模块。这个模块是一个IIS ISAPI插件,被称作“ISAPI扩展”。
 
ISAPI扩展是按照一个文件一个扩展的方式注册的动态链接库(DLL)。每当有.aspx文件的请求时,就需要有一个用来处理这种文件(资源)类型的ISAPI扩展。这个ISAPI扩展会分析该请求,并配置要实际处理该页面的服务器端环境。若成功获取该请求的状态并完全还原,便允许这个页面运行并输出期望的结果。 

提交窗体:

HTML的<form>标签是唯一授权、能将客户端数据提交到服务器端的标签。根据设计,当用户单击“submit”类型的按钮时,浏览器便将隶属于该窗体(form)的所有控件的当前内容填充进一个字符串。随后,根据<form>标签所设置的属性(attribute),将该字符串作为GET 或POST指令的一部分传给服务器。

下面的HTML片段给出了一个简单的窗体,它只包含一个文本框和一个提交按钮。可以看出,这个窗体将POST指令和default.aspx URL关联在一起:

<form method="post" action="default.aspx">
    <input type="text" name="EmpCode" />
    <input type="submit" value="Send" />
</form>

下面的请求显示了用户输入雇员代码1001,并单击提交按钮时提交的Web服务器POST指令:

POST /default.aspx HTTP/1.1
Host: www.contoso.com
Content-Type: application/x-www-form-urlencoded
Content-Length: 12
EmpCode=1001

在处理页面请求的过程中,ISAPI扩展对请求主体进行解析,并通过方便程序员使用的对象模型将得到的所有请求信息显露出来。例如,EmpCode变量不再是一简单的键/值对,而是转换成一个应用级的集合(Request.Form集合)。该集合代表在原始HTTP编程模型之上建立的第一层抽象Request、ResponseServer等对象构成该调用的HTTP上下文,同样,它们代表了目前大多数Web开发平台(包括JSP和ASP)中的最小对象集合。ASP.NET中的对象要多得多。

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。