HTTP协议演示_基于 HTT P的 Web Forms 编程5-5-实验

第一篇讲了Web Forms编程和HTTP协议。目的是希望你能理解:Web的确需要HTTP协议,尽管HTTP的某些特性会阻碍Web的发展。

第二篇贴了一些ASP.NET页面和它们在浏览器中的源代码,以及ASP.NET程序运行后,Response和Request对象的一些内容。目的是作为理解后面内容的一个准备。

第三篇讲解HTTP协议一些重要的特点,尤其是它的无状态性。这点对于Web应用程序很重要。

第四篇介绍HTTP协议本身,包括客户端请求,服务器响应,以及在服务器端需要有一个抽象模型来处理ASP.NET文件,来帮助这个请求和响应的过程。

在本篇,通过工具,进一步看看HTTP协议如何工作。可以利用MS telnet工具,通过手动输入http请求信息的方式,向服务器发出请求,服务器接收、解释和接受请求后,会返回一个响应,该响应会在telnet窗体上显示出来;或是使用SecureCRT Telnet工具,如图1所示;或是利用网络协议分析工具,如Ethereal,如图2所示。securecrt  ethereal

              图1 SecureCRT工具                                    图2 Ethereal工具

下面以Ethereal为例,这个工具提供的信息满全面的,除了分析HTTP协议,你也可以试试其他协议:

1,  建立环境。一台服务器,IP地址为18.1.1.120,两台客户端(AB),IP地址分别为18.1.1.9018.1.1.119。什么机器都可以,我在把我自己的机器当作服务器,两台客户端用同事的机器;Ethereal安装在服务器上。

2,  建立网站。用.NET新建一个项目,添加两个页面,一个是.htm文件,一个是.aspx文件;

.aspx文件内容如下: 

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title>Analyze HTTP protocol</title>
</head>
<body>
    <form id="form1" runat="server">
        <div>
            <table>
                <tr>
                    <td>
                        <asp:TextBox ID="TextBox1" runat="server" Text="Analyze HTTP protocol"></asp:TextBox>
                        <asp:Button ID="Button1" runat="server" Text="Analyze HTTP protocol" OnClick="Button1_Click" />
                    </td>
                </tr>
                <tr>
                    <td>
                        <asp:TextBox ID="TextBox2" runat="server" Width="352px"></asp:TextBox></td>
                </tr>
            </table>
        </div>
    </form>
</body>
</html>

其后台代码如下: 

protected void Page_Load(object sender, EventArgs e)
{
}
protected void Button1_Click(object sender, EventArgs e)
{
    string str = this.TextBox1.Text.ToString();
    this.TextBox2.Text = Base64String(str);
}
private string Base64String(string input)
{
    byte[] info = System.Text.Encoding.Unicode.GetBytes(input);
    long dataLength = (long)((4.0d / 3.0d) * info.Length);
    if (dataLength % 4 != 0)
    {
        dataLength += 4 - dataLength % 4;
    }
    char[] base64CharArray = new char[dataLength];
    Convert.ToBase64CharArray(info, 0, info.Length, base64CharArray, 0);
    string base64String = new string(base64CharArray);

    return base64String;
}

其中,私有的成员函数Base64String()是将一个字符串转换成Base64编码。.NET序列化页面上下文环境时采用Base64编码,比如第二篇中看到的那些。 .htm文件内容略。

3,  运行Ethereal

1)  配置,如图3所示。

点击菜单栏“Capture->Options”,弹出如图3所示的窗口,设置Ethereal。首先,勾选“Display Options”区域内的所有设置,这样可以实时看到Ethereal拦截和分析的数据包的过程。再点击该窗口的“Capture Filter”按钮,弹出如图4所示的窗口,设置Ethereal分析HTTP协议,点击“OK”。ethereal

3 配置Ethereal 

ethereal

4 配置Ethereal

设置完成后,点击图3中的“Start”按钮,Ethereal将开始分析HTTP

2)  分析,如图5所示。

 ethereal

 5 分析HTTP协议

4,  通过客户端访问网页。

先测试一下客户端访问.htm文件,通过下面四个步骤,看看Ethereal都得到了什么。

1)        客户端A打开浏览器,访问http://18.1.1.120/Default.htm,将看到Ethereal出现几条信息;

2)        客户端A不关闭浏览器,只是重新输入http://18.1.1.120/Default.htm,但是Ethereal没有反应;

3)        客户端A关闭浏览器,重新输入http://18.1.1.120/Default.htm,将看到Ethereal又出现几条信息,但是与之前不同;

4)        客户端B打开浏览器,访问http://18.1.1.120/Default.htm,将看到Ethereal出现几条信息。

5)        经过这四个步骤后,Ethereal获得如下信息,如图6所示:

ethereal

6 分析结果

我们观察一下区域1。第一列No是数据包的序号,包到达的先后顺序;第二列Time是这个包传输的时间;第三列Source是源地址,发包的机器;第四列Destination是目的地址,接受包的机器;第五列Protocol是网络协议。因为我们在图4中进行了设置,所以,在这里只会看到TCPHTTP这两个协议;第六列Info是包的信息。

再仔细看一个区域1。序号110是前面的步骤1),序号1116步骤3),序号1726是步骤4)。

再观察一下区域2。当你点击区域1中的某条信息时,区域2会相应变化。有没发现区域二事实上就是OSI/ISO网络参考模型。

下面具体分析一下序号110的信息。

1)        序号13,显然是TCP/IP协议“三次握手”;

2)        序号4,客户端A向服务器端请求Default.htm页面请求。可以看到很相信的请求信息,就是第三篇文章中所提到的。如图7所示;

ethereal

7 客户端A请求

3)        序号5,服务器端响应这个请求。如图8所示:

ethereal

8 服务器端响应

4)        序号就都是关于TCP/IP协议的。因为响应客户端请求后,HTTP协议会释放连接。但序号68有点奇怪,客户端莫名其妙请求了一个“favicon.ico”文件,我没有用这个文件啊,结果服务器端响应了一下,序号78

 

下面具体分析一下序号1116的信息。

1)        序号1113,还是“三次握手”;

2)        序号14,客户端A再次请求了Default.htm页面;

3)        序号15,服务器端响应这个请求,如图9所示。这个响应有点意思,还记得序号1116是什么操作吗?是客户端A第二次向服务器请求同一个页面,结果,服务器没有返回页面内容,而是告诉客户端A104 Not Modified”,也就是说,客户端A向服务器端请求了一个与之前一模一样的页面。但是,如果客户端A,清除了浏览器的缓存,那么就跟序号110一样了。

ethereal

9 服务器端响应

4)        之后的序号是释放连接。

序号1726是客户端B向服务器端请求Default.htm文件。与序号110一样。

以上是客户端A和B访问.htm文件的情形。下面看看要是访问.aspx文件如何。 

ethereal

10

序号0111,第一次请求Default.aspx页面; 

序号1218,第一次点击按钮;

序号1922,第二此单击按钮;

序号2326,第三此单击按钮;

序号2733,关闭浏览器,第二次请求Default.aspx页面;

序号3437,第一次单击按钮;

序号3846,请求一个不存在的页面。 

ethereal

11

序号0709,本应该没有,可能是我机器有病毒的原因;

序号1011,为释放TCP连接。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值