当前位置:编程学习 > C#/ASP.NET >>

服务端如何获取htt请求的请求头原始信息?

对于客户端发送过来的http请求,可通过IHttpModule 的Init 接口里注册application.BeginRequest 事件,可并在其回调函数中对application.Context.Response操作,此时可以操作客户端请求的完整的未经处理的数据(http的body数据,不是页面上html的head和body),但是没法获取原始的http请求头数据(已经被更早的HttpRuntime等解析了)。

可以通过上述方式在服务端处理客户端发送的自定义格式数据,而不必单独写server程序 。

现在碰到个问题,客户端发送上来的数据,并不是http格式,即完全没有http请求头,只有数据。这样一来,iis服务进程根本无法解析这个请求头,更没法运行到IHttpModule 这一步 。如果在客户端数据前面随便加个http头信息也可以,但是那时第三方数据,不方便要求人家改。不知还有什么方式可以拦截处理这种客户端发送的没有任何http请求头的数据?

对asp.net 完全不熟,表述得也不清楚,术语也不一定正确,大家理解下。 --------------------编程问答-------------------- 测试时,通过tcp给 服务器的80端口发送自定义数据,直接收到“HTTP/1.1 400 Bad Request
Content-Type: text/html
Date: Fri, 24 Dec 2010 05:58:17 GMT
Connection: close
Content-Length: 35

<h1>Bad Request (Invalid Verb)</h1>” 返回信息,自然application.BeginRequest 事件的回调函数不会被调用。  当然,在自定义数据前加个http 格式加个请求头 ,就正常了。

不知具体是在哪一步解析http请求头的呢  --------------------编程问答-------------------- 晚上来看 --------------------编程问答-------------------- Request.Headers    --------------------编程问答--------------------
引用 3 楼 wuyq11 的回复:
Request.Headers

可能是我没描述清楚 。Request.Headers 里面的信息是对发送的tcp请求的数据的解析后的结果,即对开始部分按http头信息来解析后填充的 。如果发的请求完全没有http头信息的话,服务器直接返回了如下内容
“HTTP/1.1 400 Bad Request
Content-Type: text/html
Date: Fri, 24 Dec 2010 05:58:17 GMT
Connection: close
Content-Length: 35

<h1>Bad Request (Invalid Verb)</h1>”
,根本没有到创建HttpRuntime、HttpApplication、HttpContext等步骤。

参考了:http://www.tracefact.net/Asp-Net/Http-Request-Processing-Flow.aspx
--------------------编程问答--------------------
引用 4 楼 zjh7547 的回复:
引用 3 楼 wuyq11 的回复:

Request.Headers

可能是我没描述清楚 。Request.Headers 里面的信息是对发送的tcp请求的数据的解析后的结果,即对开始部分按http头信息来解析后填充的 。如果发的请求完全没有http头信息的话,服务器直接返回了如下内容
“HTTP/1.1 400 Bad Request
Content-Type: text/ht……


没有时间看你的“参考”文章。

既然是访问http服务,那么客户端为什么不按照http协议来发送消息呢?

你可以跟编写客户端软件的程序员说:如果不懂如何使用tcpclient来访问http服务,那么就应该使用比较简单的WebRequest啊! --------------------编程问答--------------------
引用 1 楼 zjh7547 的回复:
测试时,通过tcp给 服务器的80端口发送自定义数据,直接收到“HTTP/1.1 400 Bad Request
Content-Type: text/html
Date: Fri, 24 Dec 2010 05:58:17 GMT
Connection: close
Content-Length: 35

<h1>Bad Request (Invalid Verb)</h1>” 返……


连基本的协议文本格式都不对,就不用管什么“哪一步”了!除了可以收到一些字节信息,什么“步骤”也做不了,就应该直接抛出异常了。 --------------------编程问答-------------------- 回sp1234:
最简单的就是单独写个server ,直接接收客户端发送的数据,因为客户端发送的本来就不是http数据,并没有问题,所以没理由让客户端修改。后面也会用直接写个server服务的方式。

现在只是想简化测试demo,所以想到IHttpModule 的Init 接口里注册application.BeginRequest 事件,这样可以提前拦截http请求,对http数据进行处理。但是现在客户端发送的不是http数据,所以想知道是在什么地方解析http头的,能否重载这个解析http头部分。这样可以不用写个server,简化而已。 --------------------编程问答--------------------
补充:.NET技术 ,  .NET Framework
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,