您的位置:首页 > 编程语言 > ASP

ASP.NET Web基本原理

2015-07-28 23:18 549 查看

ASP.NET Web基本原理

浏览器与服务器之间的交互

浏览器向服务器发送HTTP请求,具体如下:

1.浏览器向服务器发送TCP包,要求服务器打开连接

TCP包首部32位,占20字节,格式如图一:



图一:TCP首部(画图工具不太熟悉O,O)

2.服务器应答浏览器,连接已开通。

3.浏览器发送一个HTTP的GET(POST)请求。

服务器返回HTML代码,浏览器解析页面。如果遇到IMG标签,浏览器就向服务器发送请求,请求该图片。

例如:用户访问百度网http://www.baidu.com/

1.浏览器向DNS的Web数据库请求http://www.baidu.com/的Ip:125.125.0.0(随便写的一个B类)

2.浏览器与125.125.0.0进行TCP连接,端口号:80(默认端口。每个服务器软件监听一个端口,一个服务器端口也只能被一个服务器软件监听)

3.浏览器执行HTTP

4.服务器返回HTML

5释放TCP连接

6.解析HTML页面

浏览器代码

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Threading.Tasks;
using System.IO;

namespace 浏览器原理
{
class Program
{
static void Main(string[] args)
{
Socket socket = new Socket(SocketType.Stream, ProtocolType.Tcp);//TCP、UDP。
socket.Connect(new DnsEndPoint("127.0.0.1", 8022));//连接服务器。http协议默认的端口号是80。每个服务器软件监听一个端口(别的软件就不能监听这个端口了),发送给这个端口的数据只会被这个服务器软件接收到。请求服务器为本地服务器
using (NetworkStream netStream = new NetworkStream(socket))//读写socket通讯数据的流
using (StreamWriter write = new StreamWriter(netStream))//写入流
{
write.WriteLine("GET /index.html HTTP/1.1");//每一行指令都回车一下。注意:1)GET后要有空格;2)中文文件名需要进行url编码
write.WriteLine("Host: 127.0.0.1:8080");
write.WriteLine();//空行回车,表示指令结束
}
using(NetworkStream netStream=new NetworkStream(socket))
using (StreamReader reader = new StreamReader(netStream))//读出流
{
string line;
while ((line = reader.ReadLine()) != null)
{
Console.WriteLine(line);
}

}
socket.Disconnect(false);//断开通讯
Console.ReadKey();
}

}
}


服务器代码:

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Threading.Tasks;

namespace MyWeb服务器1
{
class Program
{
static void Main(string[] args)
{
Socket serverSocket = new Socket(SocketType.Stream, ProtocolType.Tcp);//宿舍大妈
serverSocket.Bind(new IPEndPoint(IPAddress.Any, 8080));
serverSocket.Listen(10);
while (true)
{
Console.WriteLine("等着请求");
Socket socket = serverSocket.Accept();//男女通讯通道。返回大妈给你的这个人的通讯通道
Console.WriteLine("来了请求");
using(NetworkStream stream = new NetworkStream(socket))
using (StreamReader reader = new StreamReader(stream))
{
string line;
while ((line = reader.ReadLine()) != null)
{
Console.WriteLine(line);
if (line.Length <= 0)
{
break;//遇到空行了,请求结束了不用再等了
//如果不break,就一直卡在ReadLine()等着浏览器发后续的数据
}
}
}

using (NetworkStream stream = new NetworkStream(socket))
using(StreamWriter writer = new StreamWriter(stream))
{
writer.WriteLine("HTTP/1.1 200 OK");//按照HTTP协议返回
writer.WriteLine();
writer.WriteLine("welcome to rupeng.com");
}
socket.Disconnect(false);//断开通讯
}
}
}
}


服务器和浏览器之间只进行沟通,沟通完成后,服务器浏览器断开连接。

HttpHandler

IHttpHandler在MSDN中的定义:使用自定义的HTTP处理程序同步处理HTTP Web请求而实现的协定。

HttpHandler(页面真正的处理)是asp.net真正处理Http请求的地方,并且在处理前和处理后会将处理后的信息附加在HTTP上,返回到HttpModule(用于页面处理前和处理后的一些事件的处理)中。

IHttpModule是属于大小通吃类型,无论客户端请求的是什么文件,都会调用到它;例如aspx,rar,html的请求。
IHttpHandler则属于挑食类型,只有ASP.net注册过的文件类型(例如aspx,ashx等等)才会轮到调用它。

创建一般处理程序(类名:接口)实现IHttpHandler接口,当有用户请求时(先经过HttpModule),ProcessRequest方法被调用。

IsReusable:获取当前实例是否可用。

Response响应内容。

Request请求内容:ASP.Net处理Http Request时,使用Pipeline(管道)方式,由各个HttpModule对请求进行处理,然后到达 HttpHandler,HttpHandler处理完之后,仍经过Pipeline中各个HttpModule的处理,最后将HTML发送到客户端浏览器中。

表单提交:Html表单通过<form>提交给服务器,当点击submit按钮的时候,<form>里面的内容就会提交到服务器。

<form>里面只有三类标签可以被提交:input,textarea,select。提交value值(标签必须设定name属性——服务器,id——Dom),当input=submit的时候,只有被点击的按钮(要有name)的value才会被提交。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: