引言

之前大部分时间,一直在学c#,打算将asp.net本质论好好学习一下,之前虽然已经看了两边了,总感觉看过,没做笔记等于白看了,一点印象也没。打算将书中的代码,自己实现一下,在敲代码时要一直反思,为什么作者那样实现,如果是自己该如何实现?

web应用程序

资源的地址——通用资源标识符(URI)

我们在浏览器地址栏中输入的内容统称为通用资源标识符(Universal Resource Identifier,URI),它有很多种形式,在web中我们通常使用统一资源定位符(Uniform Resource Locator)的形式,格式如下:

协议://主机[.端口号][绝对路径[?参数]]

http://www.microsoft.com/en/us/default.aspx中:

http:表示协议名称;

www.microsoft.com:表示主机的地址;http协议的默认端口号为80.

/en/us/default.aspx:绝对路径。后面没有参数出现,如果加上多个参数则可以如下表示:

/en/us/default.aspx?p=1&n=2

在.net中,不管是URI还是URL都是定义在System命名空间中的URI类来进行处理。

该类定义了5个属性,分别对应5个组成部分。

Scheme属性:协议的名称。

Host:取得URI地址中的主机部分。

Port:取得端口号。

AbsolutePath:绝对路径部分。

Query:URI地址中的参数部分。

简单例子:

             System.Uri ms = new Uri("http://www.microsoft.com/en/us/default.aspx");
Console.WriteLine("协议:"+ms.Scheme);
Console.WriteLine("主机:"+ms.Host);
Console.WriteLine("端口号:"+ms.Port);
Console.WriteLine("绝对路径:"+ms.AbsolutePath);
Console.WriteLine("参数:"+ms.Query);
Console.Read();

结果:

如何找到主机

互联网上的服务器成千上万,如果找到互联网上的其中一台,该如何找呢?就好比,虽然世界人口多达几十亿,如何找到某个人呢,那你如果知道他的地址,岂不是找起来更方便快捷?同样到了,浏览器要找到服务器,也需要服务器的网络地址。

在当前的TCP/IP协议下,所谓的网络地址,就是一个IP地址,目前我们使用的是IPV4的地址,即IP协议的第四版规定的地址,每个地址由四个字节共32位组成。理论上讲,可以表示4G个网络地址。格式:192.198.0.1,以圆点分割的四个数,最大为255.例如,微软的ip地址:207.46.19.254,直接在地址栏中输入http://207.46.19.254也可以看到网页。

但是,如果单单记忆数字,很让人头疼,如果能通过一个有意义的名字来找到主机,就更容易了。在1983年,保罗.莫卡派乔斯(Paul Mockapetris)发明了域名系统,这样,在互联网上,我们可以为IP起一个有意义的名字以方便寻找主机,这个名字成为域名,比如,微软web服务器的域名为www.microsoft.com,这个名字对应实际IP地址:207.46.19.254

域名和ip如何对应?

这个工作由域名服务器DNS(即Domain Name Server)完成。DNS服务器提供一个类似于分层的通讯录,允许用户通过域名来查找对应的地址,或者通过地址来查找对应的域名。通常情况下,互联网服务商已经帮我们自动设置了DNS服务器,因此可以简单地通过www.microsoft.com域名找到微软的web服务器。

知道服务器之后,需要将请求从我们的客户端传输到服务器,那么,两台计算机是如何通信的呢?他们如何才能理解彼此发送的数据呢?这就需要提到协议了。

总结

URL格式:

协议://主机[.端口号][绝对路径[?参数]]

互联网中通过ip找到主机,通过DNS将域名和ip地址关联起来。

[Asp.net本质论]重新认识url的更多相关文章

  1. ASP.NET获取请求的url信息汇总

    ASP.NET获取请求的url信息汇总 最近做项目需要处理一个用代码获取当前网站的域名或ip信息的问题,于是尝试了ASP.NET中各种获取url信息的方法,在此总结一下: 在Global.asax文件 ...

  2. 【ASP.NET MVC 牛刀小试】 URL Route

    例子引入 先看看如下例子,你能完全明白吗? using System; using System.Collections.Generic; using System.Linq; using Syste ...

  3. asp.net获取当前网址url

    asp.net获取当前网址url   设当前页完整地址是:http://www.jb51.net/aaa/bbb.aspx?id=5&name=kelli "http://" ...

  4. ASP.NET Core中使用URL重写

    ASP.NET Core 1.1 Preview 1 中新增了 URL Rewriting middleware ,终于可以进行 URL 重写了,实际使用体验一下. 首先要将 ASP.NET Core ...

  5. Asp.Net通过HttpModule实现URL重写

    首先总结一下为什么要对URL进行Rewrite,比如我可以把/Default.aspx?param=3替换成/Home/Default/3(类似mvc). 一.缩短url,隐藏实际路径提高安全性; 二 ...

  6. cPage分页,asp.net自定义分页,url传值分页,支持datalist、gridview、Repeater等

    asp.net分页是最最常用的功能,实现方式也很多,使用不同的控件有不同的分页方式. 下面分享一个我们团队内部使用了多年的一个分页控件cPage,是自己设计编写,没有冗余,简单.快速. cPage,现 ...

  7. asp.net中获取当前url的方法

    HttpContext.Current.Request.Url.ToString() 并不可靠. 如果当前URL为 http://localhost/search.aspx?user=http://c ...

  8. ASP.NET本质论第一章网站应用程序学习笔记3-对象化的Http

    在.NET环境下,万物皆对象,在HttpRuntime收到请求之后,立即将通过HttpWorkerRequest传递的参数进行分析和分解,创建方便用于网站应用程序处理用的对象,其中主要涉及到两个对象类 ...

  9. asp.net获取当前网址url的各种属性(文件名、参数、域名 等)的代码

    用 asp.net获取当前网页地址的一些信息. 设当前页完整地址是:http://www.jb51.net/aaa/bbb.aspx?id=5&name=kelli "http:// ...

随机推荐

  1. 通过call_usermodehelper()在内核态执行用户程序【转】

    转自:http://edsionte.com/techblog/archives/category/linux%E5%86%85%E6%A0%B8%E7%BC%96%E7%A8%8B 背景 如何在Li ...

  2. 非 GUI 模式运行 JMeter 压力测试

    非 GUI 模式,即命令行模式,运行 JMeter 测试脚本能够大大缩减所需要的系统资源. 使用命令:jmeter -n -t <testplan filename> -l <lis ...

  3. sicily 1020. Big Integer

    Description Long long ago, there was a super computer that could deal with VeryLongIntegers(no VeryL ...

  4. VPS性能测试方法小结(8)

    1.为了能够得到更为准确和详细的有关VPS主机性能测试数据,我们应该多角度.全方位地运行多种VPS性能测试工具来进行检测,同时也要记得排除因本地网络环境而造成的数据结果的错误. 2.VPS主机性能跑分 ...

  5. 全国省市区数据SQL - 省市区

    转载:https://www.cnblogs.com/flywind/p/6036801.html

  6. JS判断客户端是否是iOS或者Android手机移动端

    var u = navigator.userAgent; var isAndroid = u.indexOf('Android') > -1 || u.indexOf('Adr') > - ...

  7. HUD-5379

    Mahjong tree Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Tota ...

  8. Elasticsearch( 插件开发)

    elasticsearch5.2.2 插件开发(一) Scripting plugins:这个插件本质来说,就是会调用用户的脚本,所以可以执行任何的程序,举例的话,可以通过这个插件,支持javascr ...

  9. git clone命令

    从远程clone一个仓库 ...知识浅薄 git clone都发现貌似用的不顺 因为我有几个git账号 但是我也不知道就是git账号是怎么保存在终端上的 所以当我需要用一个新的github账号来clo ...

  10. LeetCode解题报告—— Bus Routes

    We have a list of bus routes. Each routes[i] is a bus route that the i-th bus repeats forever. For e ...