2011-05-30 28 views
1

我目前正在使用ASP.Net完成一个反向代理项目。它接收来自客户端的请求,为另一个服务器创建一个HttpWebRequest对象(具有相同的HTTP标头),读取响应并将其转发给客户端。我的问题是,使用Internet Explorer时(使用firefox,chrome或safari时从不发生),代理发送的请求会从远程服务器生成HTTP 400错误响应。我认为请求创建出了问题,并且没有成功地检查我的代码。所以我在客户端和代理服务器上都使用了fiddler来比较这两个请求,看看我能否找到它们之间的显着差异。问题是:在客户机上运行fiddler时,HTTP 400响应消失。
这是令人困惑的,因为我不认为小提琴手改变了它收到的请求,但我想这提供了什么是错误的请求提示。我不知道哪些转换适用于请求,但它似乎是解决我的问题的方法。
有谁知道什么可以解释这种行为?对通过fiddler发送的请求进行了哪些转换?

回答

0

除非您编写了代码,否则Fiddler通常不会修改您发送的HTTP请求。您可以使用像NetMon这样的低级工具来捕获带和不带提琴手的实际请求。

唯一可能有意义的例外是,如果某些服务器在请求行中获得完全限定的路径,则会引发错误。例如。

GET http://www.example.com/ HTTP/1.1 
Host: www.example.com 

抛出一个错误,而

GET/HTTP/1.1 
Host: www.example.com 

没有。不同之处在于前者意味着被发送到代理服务器,而后者只能合法发送到源服务器。服务器是假设接受前者,如果他们得到它,但有些是越野车,不。 Fiddler会“解决”这个问题,因为它会根据代理规则将前者转换为后者。尽管如此,我不知道你的代码是如何产生前者的,因为通常System.NET会照顾你的格式化请求。

+0

我用wireshark来比较有和没有提琴手的原始数据包,没有发现任何相关的东西。请求行是第二种形式,所以它不是错误的原因。我也认为它可能与提琴手缓冲有关,但使用流模式不会改变任何东西。 – 2011-05-31 15:56:11

+0

MSFT我发现有一个名为“x-SuppressProxySupportHeader”的标志,它可以防止Fiddler向401响应中添加特定的HTTP标头。你可以确认使用它,我必须添加oSession [“x-SuppressProxySupportHeader”] =“true”;到提琴手规则的OnBeforeResponse方法,以防止添加这些头文件?另外,还有其他标题自动添加到请求或响应? – 2011-06-01 13:51:33