HTTP Web服务器研究之二 HTTP协议

超文本传输协议(HTTP,HyperText Transfer Protocol)是互联网上应用最为广泛的一种网络协议。所有的WWW文件都必须遵守这个标准。设计HTTP最初的目的是为了提供一种发布和接收HTML页面的方法。
熟悉计算机网络的都知道,HTTP是应用层协议,基于网络传输层协议TCP。具体就不再赘述,下来我们通过具体代码来揭开http协议的神秘面纱:
1. 新建项目,名称HttpResearch,选择Visual C# Console Application(控制台应用程序):


2. 在Main方法中添加如下代码:
          static   void  Main(  string [] args)
        {
             //前面讲过,HTTP协议是基于TCP/IP协议的,所以这里创建一个TCP协议的Socket实例
             Socket  serverSocket =  new   Socket (  AddressFamily  .InterNetwork,  SocketType  .Stream,  ProtocolType  .Tcp);
            serverSocket.Bind(  new   IPEndPoint  ( IPAddress  .Parse(  "192.168.1.86" ), 8888));  //绑定本机的IP和空闲端口
            serverSocket.Listen(5);  //开始监听端口
             Console  .WriteLine( "等待TCP连接请求..."  );
             var  clientSocket = serverSocket.Accept();  //接收请求

             byte [] buffer =  new   byte [10240];  //TCP请求读取缓冲
             int  receivedBCount = clientSocket.Receive(buffer);  //读取数据,数据为字节流
             string  strReceived =  Encoding  .UTF8.GetString(buffer, 0, receivedBCount); //将字节转成string

            clientSocket.Close();
             Console  .Write(strReceived);
             Console  .Read();
        }

3. 运行程序,效果如下:


4. 使用浏览器访问服务绑定的IP和端口:


5. 命令窗口接收到请求并打印出请求体:

至此,我们已经在后台捕获了一个完整的http请求:
GET / HTTP/1.1
Host: 192.168.1.86:8888
Connection: keep-alive
Pragma: no-cache
Cache-Control: no-cache
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.89 Safari/537.36
HTTPS: 1
Accept-Encoding: gzip, deflate, sdch
Accept-Language: zh-CN,zh;q=0.8

请求头部代表的含义大家可以自行查看相关的标准( RFC 2616)。

6. 接下来,我们在请求中添加query string,如


7. 我们再来看服务打印出来的请求体,很神奇的事情发生了:

http请求中包含了我们的query string,设想我们在后台把这个字段按照某种格式解析出来,映射到对应的方法,然后给前台返回特定数据。

讲到这里,http请求的神秘面纱就被我们揭开,大家是不是对我们要构造一个web服务器的主题有了更深刻的构想。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值