写一个简易浏览器、ASP.NET核心知识(3)

转自:http://www.cnblogs.com/mcad/p/4340877.html

网络基础知识、ASP.NET 核心知识(1)*



为什么要写网络?

 

我原本的计划是这样的,连续两天梳理ASP.NET开发的核心知识。说到这呢,有人问了。“不是说好了做ASP.NET笔记吗?为啥要写网络基础知识?是不是傻?”

原因是这样的。作为网站开发人员,你所开发的软件产品最终是要在网络上运行的。这就像一个生产商,要生产供给东北地区的产品,而生产商对东北的天气、地理、人文毫无了解。生产商的产品肯定是不可用的,或者低端的!产品质量不好,那是自然的。产品质量好,那算你点儿高。那么作为ASP.NET开发人员,如果一点不懂http协议、不晓得Ajax、甚至根本不了解JavaScript,效果也是一样的。

总之,丰富的知识储备,会为你的软件产品带来更多的品质保障。

当然,我们要了解的主要是HTTP协议,对于这篇文章整理的内容,只做了解即可。目的是对整个知识体系有个大致的概念。算了,坦率的讲吧。本篇文章意义不大,写它的根本原因是我想通过这样一种方式,来回忆自己的网络知识。毕竟曾经考过一个劳什子的网络工程师(等考得那个,我知道没啥用,但刚上大学的时候,以为很厉害。当时费了点心思,全当回忆大学生活了)。当然这里只是概要式的梳理。

 

关于体系结构

1.OSI、TCP/IP、与五层体系结构 

clipboard

说道网络的体系结构,总共有两个经典的划分方式,分别是OSI七层 和 TCP/IP四层。

1)OSI

     OSI的七层协议体系结构、清晰,完整。       但复杂度高,又不实用。

2)TCP/IP

      相比的OSI七层的复杂,TCP/IP的四层结构 得到了广泛的应用。

     但是从实际角度看,TCP/IP在实际应用中仅使用了上三层。

3)五层体系结构。

   TCP/IP 最下层网络接口层,没有什么特别新的具体内容,跟一般的通信链路没有多大差别。 

所以在学习的时候采用一种中庸的做法,就是把TCP/IP体系、和OSI体系结合

形成一个、从物理层、数据链路层、网际层、运输层到应用层的五层体系结构。

2.对于五层协议、每层的描述

1)物理层

      定义了通信设备的 机械、电气、功能归程特性。(当年就是这么背的,我理解的呢就是这样,“方形的插头、插不进去圆形的口。就是定义这样一个标准吗”)

     设备: 集线器  (组成一个碰撞域)

2)数据链路层

   建立、维护和释放网络实体间的数据链路,这种数据链路对网络变现为一条无误差的信道。(MAC媒介访问层、LLC逻辑链路层)

   主要特性记住三点》  1. 封装成帧

                                    2.透明传输

                                    3.差错检测

     设备:网桥、有缓存,接受MAC帧。

3)网络层:

    属于通信子网,通过网络连接交换传输层实体放出的数据。它解决的是路由选择,网络拥塞,异构网络互联的问题。(发送的是报文)

     IP       网际协议

     ARP   地址解析协议

     RARP 反向地址解析协议

     ICMP 网际控制报文协议

     IGMP 网际组管理协议

4)传输层

     实现发送端和接收端,端到端的数据分组传送,负责保证实现数据包无差错、无丢失和无冗余的传输。 (服务的访问点为端口)

     TCP   (传输控制协议) 可靠、面向连接、有应答机制

     UDP  (用户数据报协议)不可靠、无连接、无应答机制

5)应用层

      虽然我们是程序开发人员,但是上面基层的协议说的什么呢?实话说跟我们联系不大。到了应用层才跟我们得工作息息相关。

    HTTP   超文本传输协议 这个才是我们需要懂的。

     FTP      文件传输协议

     DHCP  动态主机配置协议

     NFS      网络文件系统

     Telnet  远程登录协议

     DNS     域名系统

     SNMP  简单网络管理协议

 

 

需要了解的几个概念

1.URL

    这个东西的学名加:统一资源定位符。他表示找到互联网中一个资源的资源位置、访问资源的方法。

     通常的结构是这样的

     《协议》://《主机》:《端口》/《路径》?请求参数

        http下就是这样

        http://《主机》:《端口》/《路径》

 

2.HTTP协议

  • 这货的学名叫:超文本传输协议。
    顾名思义,http协议定义了浏览器如何向网络服务器请求文档,以及服务器怎样把文档传送给浏览器。
  • http协议是请求、响应式的。没有请求就木有响应。
  • http是面向文本的,所以报文中的每一个字段都是一些ASCII码串,所以各个字段的长度不确定。
  • http报文总共就有两类,请求报文、响应报文。
    1)请求报文 
     
    2)响应报文
  • 无论是请求报文,还是响应报文,都可以划分为三部分。
    1)开始行
    2)首部行
       我的习惯是把上面的的两部分叫,报文头。下面这部分叫报文体。(也不知掉对不对)
    3)实际主体

  • 具体细节,下篇博文里专写一个关于HTTP协议的浅显研究。




简介HTTP

(对于http协议的描述我前部分有写,但基于保证文档独立完整性的原则,我再写一遍。反正又不花钱。)

这货的学名叫:超文本传输协议

英文名字:(HTTP,HyperText Transfer Protocol)

他是互联网上应用最为广泛的一种网络协议。http协议定义了浏览器如何向网络服务器请求文档,以及服务器怎样把文档传送给浏览器。 可以这样说嘛?网站就是活在http协议上的。所以对于ASP.NET开发人员来说,这部分内容,是必须了解的。

HTTP协议的特点

这部分内容是我认为的,万一不对请马上指出来。

1.请求/响应式

http协议是请求/响应式的。没有请求就木有响应。

也就是说客户看到的页面,都是根据客户的请求返回的。

2.面向文本

http是面向文本的,他的请求报文是文本,响应报文也是文本。

报文中的每一个字段都是一些ASCII码串,所以各个字段的长度不确定。

3.http报文种类

http报文总共就有两类,请求报文、响应报文。

1)请求报文 

2)响应报文

4.http报文结构

无论是请求报文,还是响应报文,都可以划分为三部分。

1)开始行

2)首部行

   我的习惯是把上面的的两部分叫,报文头。下面这部分叫报文体。(也不知掉对不对)

3)实际主体

HTTP工作原理图

clipboard

请求报文

1.请求报文长什么样? 

clipboard[1]

   Chrome核心的请求报文

2.报文结构

clipboard[2]

3.报文头部每个字段的意义

clipboard[3]

//从开发者工具上复制的东西

GET /index.php HTTP/1.1

Host: www.baidu.com

Connection: keep-alive

Cache-Control: no-cache

Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8

Pragma: no-cache

User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Maxthon/4.4.3.4000 Chrome/30.0.1599.101 Safari/537.36

Accept-Encoding: gzip,deflate

Accept-Language: zh-CN

Cookie: BDUSS=I4NXZWWTZ

响应报文

1.响应报文长什么样? 

clipboard[4]

Chrome核心浏览器响应报文。

2.报文结构

clipboard[5]

 

3.报文头部每个字段的意义

clipboard[6]

 

4.响应码

1)常用响应码表。

2 0 0

2 0 1

2 0 2

2 0 4

O K,请求成功

O K,新的资源建立( p o s t命令)

请求被接受,但处理未完成

O K,但没有内容返回

 3 0 1

3 0 2

3 0 4

所请求的资源已被指派为新的固定U R L

所请求的资源临时位于另外的U R L

文档没有修改(条件G E T )

 4 0 0

4 0 1

4 0 3

4 0 4

错误的请求

未被授权;该请求要求用户认证

不明原因的禁止

没有找到

5 0 0

5 0 1

5 0 2

5 0 3

内部服务器差错

没有实现

错误的网关;网关或上游服务器来的无效响应

服务暂时失效

2)规律性总结

http响应报文的响应码,看起来很多很杂,不好记。其实只要记住一个规律就好。

响应码   2xx系列   表示成功了。

响应码   3xx系列   表示重定向

响应码   4xx系列   表示浏览器端错误请求

响应码   5xx系列   表示服务器端的错误。

写完感言

看了这篇文章呢,其实也不算文章吧。我就整理标注了一下数据。

东西不少,其实不需要全部记住。脑子有个概念,知道http传输的是文本,他是请求/响应式的。

再记住几个常用的http报文头,响应报文状态码,就万事大吉了。







写一个简易浏览器、ASP.NET核心知识(3)


前言

hh[1]先在文章前面说好了,省得大家发现我根本没有这样的头发,duang的一下一堆人骂我。

这篇文章的标题有点大,其实挺low的,我需要在开头解释一下。我这里只想写一个小的控制台,旨在模拟浏览器的http通信。

不是真的能用的浏览器。

简单的说,今天的全部工作就是   

clipboard

建立Socket→发送请求报文→ 服务器返回报文→显示报文。仅此而已喏。

实话说出来,是不是一下就low了?

我的目的只有两个。 1.加深对http协议的理解   2.深化对B/S结构的认识。

如果您已经非常了解这些东西了。那就甭搭理我,让我自娱自乐一会就好了。

理论支持

1.http工作原理

上一篇文章介绍了,http协议的运行机制,简单的说就是这样一张图。

clipboard[1]

2.浏览器工作原理 

根据这个运行机制,我猜测浏览器的工作原理应该是这样的。

clipboard[2]

当然,这个原理图里,我刻意的忽略了浏览器 解释javascript的能力、缓存管理的能力等等......

主要原因是,都考虑进去图就太复杂了。背离了我们研究http协议,理解B/S模式的初衷。

hh[1]当然了,根本原因是,我不会! (突然好悲伤啊。。。不说了,我先哭一会)

 

代码

1.思路 

思路没什么好说的就是上面那张图。

clipboard[3]

建立Socket→发送请求报文→ 服务器返回报文→显示报文。

2.代码 

复制代码
 1 /*
 2 这个程序把主机地址写死了,
 3 想更像的话,可以在加个输入。然后根据输入的url获取 响应报文。
 4 */
 5  
 6 Socket socket = new Socket(SocketType.Stream, ProtocolType.Tcp);
 7 //连接服务器。http协议默认的端口号是80。每个服务器软件监听一个端口(别的软件就不能监听这个端口了),发送给这个端口的数据只会被这个服务器软件接收到。
 8 socket.Connect(new DnsEndPoint("127.0.0.1", 8080));
 9 //读写socket通讯数据的流
10 using (NetworkStream netStream = new NetworkStream(socket))
11 using (StreamWriter writer = new StreamWriter(netStream))
12 {
13     //这里就是写之前 讲的请求报文,偷点懒,不多写了
14     writer.WriteLine("GET /index.html HTTP/1.1");
15     writer.WriteLine("Host: 127.0.0.1:8080");
16     //空行回车,表示指令结束
17     //还记得http请求报文格式吗?报文头和报文体之间用一个空行回车隔开。
18     writer.WriteLine();
19 }
20 //开始读喽
21 using (NetworkStream netStream = new NetworkStream(socket))
22 using (StreamReader reader = new StreamReader(netStream))
23 {
24     string line;
25     while ((line = reader.ReadLine())!=null)
26     {
27         //读一行输出一行
28         Console.WriteLine(line);                    
29     }
30 }
31 //几个释放资源
32 socket.Disconnect(false);
复制代码

调试

1.预期效果

clipboard[4]

没错,这就是浏览器请求IIS欢迎页面的响应报文。如果我们的控制台能输出一样的响应报文,证明实验成功了!!

 

2.调试结果

clipboard[5]

hh[1]响应的报文正确的显示出来了呢。成功了喏!

实验结束的感言

做完这个东西,貌似没什么成就感哈!

但是这个程序让我更加了解了http协议,和B/S结构。

诸位看到了,浏览器是发送请求报文,服务器根据请求报文返回响应报文。浏览器/服务器的基础原理就是这样的。

请求/响应式,没有请求就没有响应。 (当然了,后面还能说到消息推送,但那是后话!)



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 我可以给你一个简单的示例:<asp:DropDownList ID="DropDownList1" runat="server"> <asp:ListItem>选项 1</asp:ListItem> <asp:ListItem>选项 2</asp:ListItem> <asp:ListItem>选项 3</asp:ListItem> </asp:DropDownList> ### 回答2: 在ASP.NET中编一个下拉框可以通过以下步骤完成: 1. 创建一个ASP.NET页面或用户控件。 2. 在页面或用户控件中添加一个 `<select>` 标签,用于包裹下拉框选项。 3. 在 `<select>` 标签内部,添加 `<option>` 标签作为下拉框的选项。可以使用循环语句或手动添加每个选项。 4. 为每个 `<option>` 标签添加 `value` 属性,用于设置选项的值。这将在后续处理中使用。 5. 当需要设置默认选项时,为特定的 `<option>` 标签添加 `selected` 属性。 6. 如果需要在用户选择选项时执行后续操作,可以使用JavaScript或定义服务器端事件处理程序。 7. (可选)添加必要的样式或CSS类,以便自定义下拉框的外观。 示例代码如下: ```html <select> <option value="option1">选项1</option> <option value="option2" selected>选项2</option> <option value="option3">选项3</option> </select> ``` 以上代码将创建一个包含三个选项的下拉框,其中“选项2”将作为默认选项显示。 你可以根据自己的实际需求和具体环境进行进一步定制和扩展。 ### 回答3: 在ASP.NET中,我们可以使用<asp:DropDownList>控件创建一个下拉框。 首先,在ASP.NET页面的代码部分,添加以下代码: ```html <asp:DropDownList ID="ddlFruits" runat="server"> <asp:ListItem Text="苹果" Value="apple"></asp:ListItem> <asp:ListItem Text="香蕉" Value="banana"></asp:ListItem> <asp:ListItem Text="橙子" Value="orange"></asp:ListItem> <asp:ListItem Text="草莓" Value="strawberry"></asp:ListItem> </asp:DropDownList> ``` 上述代码创建了一个id为"ddlFruits"的<asp:DropDownList>控件,并添加了四个<asp:ListItem>作为下拉选项,每个选项都有对应的文本和值。 接下来,我们可以在服务器端的代码中访问和处理这个下拉框。在代码中,我们可以使用ddlFruits.SelectedItem属性来获取当前选择的项,以及使用ddlFruits.SelectedValue属性来获取当前选择项的值。 例如,在按钮的点击事件中,我们可以使用以下代码获取当前选择项的值并进行处理: ```csharp protected void btnSubmit_Click(object sender, EventArgs e) { string selectedValue = ddlFruits.SelectedValue; // 处理选中项的值 } ``` 上述代码展示了如何在按钮的点击事件中获取当前选中项的值。你可以根据实际需求来处理获取到的值。 最后,当ASP.NET页面被呈现时,下拉框将显示在浏览器中,并且用户可以选择其中的选项。 希望这个回答对你有所帮助!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值