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才会被提交。
相关文章推荐
- iOS9 CASpringAnimation 弹簧动画详解
- liteIDE 交叉编译
- Asp.Net 导出Excel数据文件
- 树莓派 raspberry安全关机命令重启命令
- ASP.NET会话(Session)保存模式
- 使用ASP.NET MVC、Rabbit WeixinSDK和Azure快速开发部署微信后台
- Raspberry vnc 连接
- csharp: Importing or Exporting Data from Worksheets using aspose cell
- ASP.NET常见对象之Request与Response
- ASP.NET前台AJAX方法调用后台的方法写法
- 树莓派(raspberry)能利用IP查主机名?
- 【asp】【View】实现模板输出,页面与逻辑代码进行分离
- Razor视图基本语法
- ASP.NET数据库连接字符串总结
- asp.net判断上传图片的宽高
- Asp.net MVC2中你必须知道的扩展点(一):Controller Factory
- 双区间交叉报表的制作
- Visual Studio 2015速递(3)――ASP.NET 新特性
- Visual Studio 2015速递(3)——ASP.NET 新特性
- Visual Studio 2015速递(3)——ASP.NET 新特性