对通过提琴手发送的请求进行了哪些转换?

时间:2011-05-30 13:16:22

标签: asp.net fiddler heisenbug

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

1 个答案:

答案 0 :(得分:0)

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

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

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

发生错误,而

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

没有。区别在于前者是发送给代理,而后者只是合法发送到源服务器。服务器假设接受前者,如果他们得到它,但有些是错误的,但没有。 Fiddler会“解决”这个问题,因为它会根据代理规则将前者转换为后者。

话虽如此,我不知道你的代码是如何生成前者的,因为通常System.NET会负责格式化你的请求。