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

news/2024/5/20 12:31:04/文章来源:https://blog.csdn.net/weixin_30821731/article/details/96564036

1.统一资源标示符

  1) 格式:协议://主机[.端口号][绝对路径[?参数]],在Http://www.kencery.com/hyl/index/login中,http表示协议的名称,www.kencery.com表示主机的地址,可选的端口号没有出现,那么,将使用http协议的默认端口号80,绝对路径为:hyl/index/login,如果没有提供绝对路径,那么,使用默认的绝对路径/。

  2) .NET中提供的对URL或者URI操作的方法代码如下:  

1 Uri uri = new Uri("https://www.kencery.com/hyl/index/login");
2 Console.WriteLine(uri.Scheme); //协议的名称   输出结果:https
3 Console.WriteLine(uri.Host); //取得Uri地址中的主机部分 输出结果:www.kencery.com
4 Console.WriteLine(uri.Port); //端口号   输出结果:80
5 Console.WriteLine(uri.AbsolutePath); //绝对路径  输出结果:/hyl/index/login
6 Console.WriteLine(uri.Query); //地址中的参数部分   输出结果: 
7 Console.ReadLine();

  3) 浏览器要找到我们访问的服务器,需要提供服务器的网络地址,在当前的TCP/IP协议下,所谓的服务器地址其实就是一个IP地址,目前我们使用的是IPV4的地址,每个地址由四个字节共32位组成,理论上讲,可以表示4G的网络地址,微软的IP地址是:207.46.19.254,所以我们直接在地址栏中输入http://207.46.19.254也可以看到微软的网站。

  4)HTTP协议

    1.当浏览器寻找到Web服务器的地址之后,浏览器将帮助我们把对服务器的请求转换为一系列的参数发送给Web服务器,服务器收到浏览器发来的请求参数之后,将会分析这些数据并进行处理,然后向浏览器回应处理的结果,也就是一些新的数据,浏览器收到之后,就会解析这些数据,并将他们显示在浏览器中。

    2,在浏览器与Web服务器之间进行通信的时候,需要双方都要能够理解的规范进行通讯,这种程序之间进行通信的语言规范,我们称之为协议,协议有许多种,根据国际标准化组织ISO的网络参考模型,程序与程序之间的通信可以分为7种,从低到高依次是:物理层,数据链路层,网络层,传输层,会话层,表示层,应用层,每层都有自己对应的协议。

    3.请求微软网站的请求信息如图所示:Http请求

2.最简单的Web服务器

  2.1 网络插座Socket

    在Unix时代,为了解决传输层的编程问题,Unix提供了类似于文件操作的网络操作方式—Socket,通过Socket,开发人员可以像操作文件一样通过打开,写入,读取,关闭等操作来完成网络编程,Socket不负责应用层的协议,仅仅负责传输层的协议。

    当通过Socket开发网络应用程序的时候,首先需要考虑所使用的网络类型,主要包括以下三个方面:

    1)Socket类型,使用网络协议的类别,IPV4的类型为PF_INET

    2)数据通信的类型,常见的数据报(Sock_DGRAM),数据流(SOCK_STREAM)。

    3)使用网络协议,比如:TCP协议。

  2.2 在.NET中,System.Net命名空间提供了网络编程的大多数数据类型以及常用操作,其中类型如下:

    1) IPAddress类用来表示一个IP地址

    2) IPEndPoint类用来表示一个IP地址和一个端口号的组合,成为网络的端口。

    3) System.NET.Sockets命名空间中提供了基于Socket编程的数据类型。

    4) Socket类封装了Socket的操作。常见的操作如下:

      a) Listen:设置基于连接通信的Socket进入监听状态,并设置等待队列的长度。

      b) Accept:等待一个新的连接,当新连接到达的时候,返回一个针对新连接的Socket对象。通过这个新的Socket对象,可与新连接通信。

      c) Receive:通过Socket接收字节数据,保存到一个字节数组中,返回实际接收的字节数。

      d)  Send:通过Socket发送预先保存在字节数组中的数据。

  2.3 通过Socket编程创建一个简单地Web服务器

 1 private static void Main(string[] args)
 2 {
 3     //取得本机的loopbakack网络地址,即127.0.0.1
 4     IPAddress address = IPAddress.Loopback;
 5     //创建可以访问的端点,49152表示端口号,如果设置为0,表示使用一个空闲的端口号
 6     IPEndPoint endPoint = new IPEndPoint(address, 49152);
 7     //创建Socket,使用IPV4地址,传输控制协议TCP,双向,可靠,基于连接的字节流
 8     Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
 9     //将Socket绑定到一个端口上
10     socket.Bind(endPoint);
11     //设置连接队列的长度
12     socket.Listen(10);
13     Console.WriteLine("开始监听:端口号:{0}", endPoint.Port);
14     while (true)
15     {
16         //开始监听,这个方法会阻塞线程的执行,直到接收到一个客户端的连接请求
17         Socket client = socket.Accept();
18         //输出客户端地址
19         Console.WriteLine("客户端地址:{0}", client.RemoteEndPoint);
20         //准备读取客户端请求的地址,读取的数据将保存在一个数组中
21         byte[] buffer = new byte[4096];
22         //接收数据
23         int length = client.Receive(buffer, 4096, SocketFlags.None);
24         //将请求的数据翻译成UTF-8
25         Encoding utf8 = Encoding.UTF8;
26         string requestString = utf8.GetString(buffer, 0, length);
27         //显示请求的信息
28         Console.WriteLine(requestString);
29         //回应的状态行
30         string statusLine = "HTTP/1.1 200 OK\r\n";
31         byte[] statusLineBytes = utf8.GetBytes(statusLine);
32         //准备发送到客户端的网页
33         string responseBody =
34             "<html><head><title>From Socket Server</title></head><body><h1>Hello,World</h1></body></html>";
35         byte[] responseBodyBytes = utf8.GetBytes(responseBody);
36         //回应的头部
37         string responseHeader = string.Format("Content-type:text/html;charset=UTF-8\r\nContent-Length:{0}\r\n",
38                                                 responseBody.Length);
39         byte[] responseHeaderBytes = utf8.GetBytes(responseHeader);
40         //向客户端发送状态信息
41         client.Send(statusLineBytes);
42         //向客户端发送回应头
43         client.Send(responseBodyBytes);
44         //头部和内容的分割行
45         client.Send(new byte[] {13, 10});
46         //向客户端发送内容部分
47         client.Send(responseBodyBytes);
48         //断开与客户端的链接
49         client.Close();
50         if (Console.KeyAvailable)
51         {
52             break;
53         }   
     }
54      //关闭服务器
55      socket.Close();
57 }

  2.4 基于TcpListener的Web服务器

    为了简化基于TCP协议的监听程序,.NET在System.Net.Sockets命名空间中提供了TcpListener类,代码如下:

 1 private static void Main(string[] args)
 2 {
 3     //取得本机的loopbakack网络地址,即127.0.0.1
 4     IPAddress address = IPAddress.Loopback;
 5     //创建可以访问的端点,49152表示端口号,如果设置为0,表示使用一个空闲的端口号
 6     IPEndPoint endPoint = new IPEndPoint(address, 49152);
 7     //创建Socket,使用IPV4地址,传输控制协议TCP,双向,可靠,基于连接的字节流
 8     Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
 9     //将Socket绑定到一个端口上
10     socket.Bind(endPoint);
11     //设置连接队列的长度
12     socket.Listen(10);
13     Console.WriteLine("开始监听:端口号:{0}", endPoint.Port);
14     while (true)
15     {
16         //开始监听,这个方法会阻塞线程的执行,直到接收到一个客户端的连接请求
17         Socket client = socket.Accept();
18         //输出客户端地址
19         Console.WriteLine("客户端地址:{0}", client.RemoteEndPoint);
20         //准备读取客户端请求的地址,读取的数据将保存在一个数组中
21         byte[] buffer = new byte[4096];
22         //接收数据
23         int length = client.Receive(buffer, 4096, SocketFlags.None);
24         //将请求的数据翻译成UTF-8
25         Encoding utf8 = Encoding.UTF8;
26         string requestString = utf8.GetString(buffer, 0, length);
27         //显示请求的信息
28         Console.WriteLine(requestString);
29         //回应的状态行
30         string statusLine = "HTTP/1.1 200 OK\r\n";
31         byte[] statusLineBytes = utf8.GetBytes(statusLine);
32         //准备发送到客户端的网页
33         string responseBody =
34             "<html><head><title>From Socket Server</title></head><body><h1>Hello,World</h1></body></html>";
35         byte[] responseBodyBytes = utf8.GetBytes(responseBody);
36         //回应的头部
37         string responseHeader = string.Format("Content-type:text/html;charset=UTF-8\r\nContent-Length:{0}\r\n",
38                                                 responseBody.Length);
39         byte[] responseHeaderBytes = utf8.GetBytes(responseHeader);
40         //向客户端发送状态信息
41         client.Send(statusLineBytes);
42         //向客户端发送回应头
43         client.Send(responseBodyBytes);
44         //头部和内容的分割行
45         client.Send(new byte[] {13, 10});
46         //向客户端发送内容部分
47         client.Send(responseBodyBytes);
48         //断开与客户端的链接
49         client.Close();
50         if (Console.KeyAvailable)
51         {
52             break;
53         }
54     }
55     //关闭服务器
56     socket.Close();
57 }

  2.5 基于HttpListener的web服务器

    为了进一步简化HTTP协议的监听器,.NET在命名空间System.Net中提供了HttpListener类,伴随这个对象,.NET提供了一系列相关对象封装了HTTP的处理工作,注意,这个类使用Http.sys系统组件来完成工作,所以,只有在Windows XP SP2或者Server2003以上的操作系统中磁能使用。

 1 private static void Main(string[] args)
 2 {
 3     //检查系统是否支持
 4     if (!HttpListener.IsSupported)
 5     {
 6         throw new System.InvalidOperationException("使用HTTPListener必须为Windows XP SP2或者Server 2003以上系统");
 7     }
 8     //注意前缀必须以/正斜杠结尾
 9     string[] prefixes = new string[] {"http://localhost:49125/"};
10     //创建监听器
11     HttpListener listener = new HttpListener();
12     //增加监听的前缀
13     foreach (string s in prefixes)
14     {
15         listener.Prefixes.Add(s);
16     }
17     //开始监听
18     listener.Start();
19     Console.WriteLine("监听中。。。。。。");
20     while (true)
21     {
22         //注意:GetContext方法将阻塞线程,直到请求到达
23         HttpListenerContext context = listener.GetContext();
24         //取得请求对象
25         HttpListenerRequest request = context.Request;
26         Console.WriteLine("{0}{1} HTTP/1.1", request.HttpMethod, request.RawUrl);
27         Console.WriteLine("Accept:{0}", string.Join(",", request.AcceptTypes));
28         Console.WriteLine("Accept-Language:{0}", string.Join(",", request.UserLanguages));
29         Console.WriteLine("User-Agent:{0}", request.UserAgent);
30         Console.WriteLine("Accept-Encoding:{0}", request.Headers["Accept-Encoding"]);
31         Console.WriteLine("Connection:{0}", request.KeepAlive ? "Keep_Alive" : "close");
32         Console.WriteLine("Host:{0}", request.UserHostName);
33         Console.WriteLine("Pragma:{0}", request.Headers["Pragma"]);
34         //取得回应的对象
35         HttpListenerResponse response = context.Response;
36         //构造回应内容
37         string responseString =
38             @"<html><head><title>From Socket Server</title></head><body><h1>Hello,World</h1></body></html>";
39         //设置回应头部内容,成都,编码
40         response.ContentLength64 = Encoding.UTF8.GetByteCount(responseString);
41         response.ContentType = "text/html;chrset=UTF-8";
42         //输出回应内容
43         Stream output = response.OutputStream;
44         StreamWriter writer = new StreamWriter(output);
45         writer.Write(responseString);
46         //必须关闭输出流
47         writer.Close();
48         if (Console.KeyAvailable)
49         {
50             break;
51         }
52     }
53     //关闭服务器
54     listener.Close();
55     Console.ReadLine();
56 }

  上面三个关于简单地模拟了一下Web服务器的实例,实现结果如图所示:

   

转载于:https://www.cnblogs.com/hanyinglong/p/3419289.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_747402.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

一个学习数据科学的可视化网站

https://setosa.io/ev/markov-chains/ 可以通过调节样本的参数&#xff0c;理解模型在干些什么

如何查找网站漏洞文件任意查看漏洞详情与利用

2019独角兽企业重金招聘Python工程师标准>>> 在对网站程序代码的安全检测当中&#xff0c;网站文件任意查看漏洞在整个网站安全报告中属于比较高危的网站漏洞&#xff0c;一般网站里都会含有这种漏洞&#xff0c;尤其平台&#xff0c;商城&#xff0c;交互类的网站较…

单位网站老是被劫持跳转到博彩网站怎么办

这几天我们Sine安全接到一个单位服务器里的三个网站都被劫持跳转问题的客户反映在百度搜索关键词后点击进入网站直接被跳转到菠菜网站,直接在浏览器里输入网址是正常打开的,由于客户单位网站的领导比较重视这个被恶意劫持跳转的问题特别要求加班要抓紧处理解决掉这个网站安全问…

phantomjs 抓取、截图中文网站乱码的问题的解决

2019独角兽企业重金招聘Python工程师标准>>> 1、用phantomjs抓取html乱码的解决方案&#xff1a; phantomjs --output-encodinggbk test.js http://webscan.360.cn/index/checkwebsite?urlwww.coding123.net 这两个参数可以指定编码 ... --output-encodingencoding…

《大型网站服务器容量规划》——3.4 通过回归方程规划容量

本节书摘来自异步社区《大型网站服务器容量规划》一书中的第3章&#xff0c;第3.4节,作者&#xff1a; 郑钢 更多章节内容可以访问云栖社区“异步社区”公众号查看。 3.4 通过回归方程规划容量 回归方程是统计学里面的知识&#xff0c;是一种应用数学&#xff0c;通常属于数学…

Chrome 不想让 HTTPS 网站通过 HTTP 下载文件

你是否经历过访问的明明是一个 HTTPS 网站&#xff0c;但是有时候站内下载东西使用的协议却是 HTTP&#xff0c;这其实存在安全隐患&#xff0c;现在 Chrome 不想让这样的事情发生。 ZDNet 报导&#xff0c;谷歌 Chrome 工程师正计划在 HTTPS 网站上默认禁止一些通过 HTTP 下载…

windows 2003和server 2008 取消对网站的安全检查/去除添加信任网站

2019独角兽企业重金招聘Python工程师标准>>> 服务器管理器->安全信息->配置IE ESC->管理员禁用->确定并重启浏览器 正常访问网站&#xff0c;提示如下&#xff1a; 转载于:https://my.oschina.net/guiguketang/blog/3037114

PHP开发网站到瓶颈了,技术上不知如何突破

2019独角兽企业重金招聘Python工程师标准>>> 推荐的一些牛逼的博客网站&#xff1a; 风雪之隅 看几个大公司的技术博客&#xff0c;学习一下一线的开发人员都在做什么&#xff0c;就差不多了腾讯大讲堂腾讯全端 AlloyTeam 团队点评美团技术团队蘑菇街技术博客 Nginx…

SEO终极算法(二)

上一篇我的文章《草根站长这一年用血的教训换来的SEO终极算法》受到了许多读者的争议。今天为了迎合读者迫切的需求&#xff0c;特意写了SEO终极算法(二)&#xff0c;希望给做SEO的朋友们能有一些启发。本篇文章比较基础常识性的SEO基础的问题我就不写了&#xff0c;只写比较有…

TP5实现支付宝电脑网站支付学习笔记

这两天在公司做一个小型WEB项目,需要有支付功能。第一次做支付宝的支付&#xff0c;踩了点小坑&#xff0c;还算顺利。激动的我赶紧记下实现的流程。第一步当然是在支付宝开放平台申请公钥私钥APPID等&#xff0c;支付宝关官方文档都有详细介绍&#xff0c;这里就省略。申请完了…

云服务器 ECS 建站教程:快速搭建 phpwind 论坛系统

快速搭建 phpwind 论坛系统phpwind 是采用 PHP MySQL 方式运行的开源社区程序。轻架构&#xff0c;高效率简易开发&#xff0c;帮助您快速搭建并轻松管理社区站点。phpwind 提供了 2 款完全不同的版本&#xff0c;分别是拥有成熟功能、海量插件支撑的 phpwind 稳定版&#xff…

记一次JavaWeb网站技术架构总结

俗话说的好&#xff0c;冰冻三尺非一日之寒&#xff0c;滴水穿石非一日之功&#xff0c;罗马也不是一天就建成的&#xff0c;当然对于我们开发人员来说&#xff0c;一个好的架构也不是一蹴而就的。 初始搭建 开始的开始&#xff0c;就是各种框架一搭&#xff0c;然后扔到Tomcat…

网站SSL安装配置

背景介绍&#xff1a;HTTPS&#xff0c;全称&#xff1a;Hyper Text Transfer Protocol over Secure Socket Layer,是通过SSL安全机制传输&#xff0c;保证网站数据不被窃听、冒充、篡改等安全风险&#xff0c;保证网站传输安全可靠&#xff0c;下面是通过nginx配置ssl模块记录…

【提权过程】嘉缘网站--提权,代理,内网渗透(针对445端口)

这篇是由上篇 【渗透过程】嘉缘网站--测试https://www.cnblogs.com/G-Shadow/articles/10964374.html之后的操作&#xff0c;文章包括了提权&#xff0c;HTTP代理及对内网的渗透 使用蚁剑连接上写入的一句话后&#xff0c;使用虚拟终端发现自己权限为最高权限可以执行任何操作 …

大型网站技术架构(五)网站高可用架构

2019独角兽企业重金招聘Python工程师标准>>> 网站的可用性&#xff08;Avaliability&#xff09;描述网站可有效访问的特性。 1、网站可用性的度量与考核 网站不可用时间&#xff08;故障时间&#xff09;故障修复时间点-故障发现&#xff08;报告&#xff09;时间点…

大型网站技术架构(四)网站的高性能架构

2019独角兽企业重金招聘Python工程师标准>>> 网站性能是客观的指标&#xff0c;可以具体体现到响应时间、吞吐量、并发数、性能计数器等技术指标。 1、性能测试指标 1.1 响应时间 指应用执行一个操作需要的时间&#xff0c;指从发出请求到最后收到响应数据所需要的时…

大型网站技术架构(八)网站的安全架构

2019独角兽企业重金招聘Python工程师标准>>> 从互联网诞生起&#xff0c;安全威胁就一直伴随着网站的发展&#xff0c;各种Web攻击和信息泄露也从未停止。常见的攻击手段有XSS攻击、SQL注入、CSRF、Session劫持等。 1、XSS攻击 XSS攻击即跨站点脚本攻击&#xff08;…

实现手机访问,自动跳转网站手机版

百度Site App的uaredirect.js实现手机访问&#xff0c;自动跳转网站手机版 以下为代码&#xff0c;可放置在网站foot底部文件&#xff0c;或者haead顶部文件&#xff0c;建议将代码放在网站顶部&#xff0c;这样可以实现手机访问立即跳转&#xff01; <script src"http…

通过webDAV来管理网站上的资源

WebDAV&#xff08;Web Distributed Authoring and Versioning&#xff09;扩展了HTTP.1.1通信协议的功能&#xff0c;他让具备适当权限的用户&#xff0c;可以直接通过浏览器、网上邻居来管理远程的webDAV文件夹内的文件&#xff0c;我们下面就来讲一下webDAV是实现。一、启用…