ASP.NET Web基本原理
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", ));//连接服务器。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, ));
serverSocket.Listen();
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 <= )
{
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才会被提交。
ASP.NET Web基本原理的更多相关文章
- 在一个空ASP.NET Web项目上创建一个ASP.NET Web API 2.0应用
由于ASP.NET Web API具有与ASP.NET MVC类似的编程方式,再加上目前市面上专门介绍ASP.NET Web API 的书籍少之又少(我们看到的相关内容往往是某本介绍ASP.NET M ...
- ASP.NET Web API Model-ActionBinding
ASP.NET Web API Model-ActionBinding 前言 前面的几个篇幅把Model部分的知识点划分成一个个的模块来讲解,而在控制器执行过程中分为好多个过程,对于控制器执行过程(一 ...
- ASP.NET Web API Model-ParameterBinding
ASP.NET Web API Model-ParameterBinding 前言 通过上个篇幅的学习了解Model绑定的基础知识,然而在ASP.NET Web API中Model绑定功能模块并不是被 ...
- ASP.NET Web API Model-ModelBinder
ASP.NET Web API Model-ModelBinder 前言 本篇中会为大家介绍在ASP.NET Web API中ModelBinder的绑定原理以及涉及到的一些对象模型,还有简单的Mod ...
- ASP.NET Web API Model-ValueProvider
ASP.NET Web API Model-ValueProvider 前言 前面一篇讲解了Model元数据,Model元数据是在Model绑定中很重要的一部分,只是Model绑定中涉及的知识点比较多 ...
- ASP.NET Web API Model-ModelMetadata
ASP.NET Web API Model-ModelMetadata 前言 前面的几个篇幅主要围绕控制器的执行过程,奈何执行过程中包含的知识点太庞大了,只能一部分一部分的去讲解,在上两篇中我们看到在 ...
- ASP.NET Web API 过滤器创建、执行过程(二)
ASP.NET Web API 过滤器创建.执行过程(二) 前言 前面一篇中讲解了过滤器执行之前的创建,通过实现IFilterProvider注册到当前的HttpConfiguration里的服务容器 ...
- ASP.NET Web API 过滤器创建、执行过程(一)
ASP.NET Web API 过滤器创建.执行过程(一) 前言 在上一篇中我们讲到控制器的执行过程系列,这个系列要搁置一段时间了,因为在控制器执行的过程中包含的信息都是要单独的用一个系列来描述的,就 ...
- ASP.NET Web API 控制器执行过程(一)
ASP.NET Web API 控制器执行过程(一) 前言 前面两篇讲解了控制器的创建过程,只是从框架源码的角度去简单的了解,在控制器创建过后所执行的过程也是尤为重要的,本篇就来简单的说明一下控制器在 ...
随机推荐
- C++—引用的作用
引入 C语言中函数有两种传参的方式: 传值和传址.以传值方式, 在函数调用过程中会生成一份临时变量用形参代替, 最终把实参的值传递给新分配的临时变量即形参. 它的优点是避免了函数调用的副作用, 确无法 ...
- 在windows上缓存git 密码
缓存git密码 一搜索 大部分都是在linux上的 . git config --global credential.helper cache 但在windows上pull或者push会报如下错误: ...
- Linux关机重启指令
关机: init 0 [使用Linux的运行级别] halt poweroff shutdown -h [系统会发出广播信息,显示即将关机时间] shutdown -c [取消关机计划] 重启: r ...
- 【SCOI2008】着色方案
题目: http://oj.changjun.com.cn/problem/detail/pid/2027 pre.cjk { font-family: "Droid Sans Fallba ...
- SqlServer转换为Mysql
昨天顺利把MySQL成功安装后,正准备着手把原来项目中的SQL SERVER数据库改为MYSQL数据库,可大量的表结构和表数据如要手动写,那就...... 接下来就是各种百度.谷歌.问先驱等,可得到的 ...
- Http相关
1.http请求 http请求分为三部分:请求行,请求头,请求正文 1. 请求行 请求方式 GET POST 请求资源路径 协议版本 GET与POST请求区别? get只能传递1kb以下数据,P ...
- spring+mybatis之声明式事务管理初识(小实例)
前几篇的文章都只是初步学习spring和mybatis框架,所写的实例也都非常简单,所进行的数据访问控制也都很简单,没有加入事务管理.这篇文章将初步接触事务管理. 1.事务管理 理解事务管理之前,先通 ...
- MCMC(三)MCMC采样和M-H采样
MCMC(一)蒙特卡罗方法 MCMC(二)马尔科夫链 MCMC(三)MCMC采样和M-H采样 MCMC(四)Gibbs采样(待填坑) 在MCMC(二)马尔科夫链中我们讲到给定一个概率平稳分布$\pi$ ...
- 为什么使用 Containjs 模块化管理工具效率高?
为什么使用 Containjs 模块化管理工具效率高? 要说明这个首先得说明一下,Containjs 的模块加载原理. 第一步,首先使用异步加载(ajax)在 js 目录下的 app.js 入口模块( ...
- Vijos1144小胖守皇宫【树形DP】
皇宫看守 太平王世子事件后,陆小凤成了皇上特聘的御前一品侍卫.皇宫以午门为起点,直到后宫嫔妃们的寝宫,呈一棵树的形状:某些宫殿间可以互相望见.大内保卫森严,三步一岗,五步一哨,每个宫殿都要有人全天候看 ...