在代理中中继分块响应

时间:2013-09-02 21:55:51

标签: c# http proxy fiddlercore

我刚刚编写了一个支持HTTP 1.1 / 1.0代理的SSL,将过去两天的代码放在一起。我使用HTTPWebResponse / HTTPWebRequest类从服务器获取数据。在从服务器中继数据时,我首先将标头首先发送到浏览器,然后从服务器发送响应流。我注意到当响应为Chunked时,如果我只是使用流阅读器使用HTTPWebresponse.GetResponseStream()读取并将其转发到浏览器,则浏览器无法加载页面。花了一些时间后,我意识到GetResponseStream()似乎已经被排除,因此浏览器无法解析它(因为已经将分块的响应头发送到混淆了它的浏览器)。我通过删除chunked标头然后将responsestream发送到一起而不进行分块来解决了这个问题。

但是我注意到 fiddlercore (免版税代理库)以某种方式中继了分块数据而没有做我做的解决方法,它是用.NET编写的,所以我想应该有办法一个接一个地传递块。

我的问题是如何在使用流时在代理中正确地传递chucked响应?此外,如果我的代理服务器用于本地计算机,如果我在没有分块的情况下将数据一起发送到浏览器,那么性能会很差(当代理使用服务器时使用分块,反之亦然)?

2 个答案:

答案 0 :(得分:0)

FiddlerCore是HTTP / 1.1协议的完整实现,直接在TCP / IP套接字上编写。

因此,它不会受到更高级别WebRequest类固有的限制(代价是我必须自己完全实现协议)。

答案 1 :(得分:0)

我实际上决定每次从响应流读入缓冲区时再次对数据进行块化(仅当响应头指示分块响应时)。我认为重新分块的性能损失可以忽略不计。如果我只是等待我在解决方法中提到的所有块读取,那么我可能会炸掉可用于代理的内存。