来自应用程序的 HTTP 请求在发件人的网络/代理和我们的网络主机之间消失
Posted
技术标签:
【中文标题】来自应用程序的 HTTP 请求在发件人的网络/代理和我们的网络主机之间消失【英文标题】:HTTP requests from app disappearing between sender's network/proxy and our web host 【发布时间】:2010-09-10 20:08:08 【问题描述】:我还没有太多信息可以在这里使用。我们的应用程序向我们的服务器发送一个 HTTP 查询,并且在我们迄今为止使用的所有情况下,它都运行良好。但是对于一个网络通过代理的客户端,他们的日志表明请求成功发出,但没有任何回复返回,并且我们的 Web 服务器在日志中没有显示任何关于已收到任何内容的信息(在发生故障的时间段) ,日志中的所有内容都是从安装程序内部下载 ZIP,如下所述)。对于他们网络上的任何人来说,这种情况始终如一。
一个奇怪的事情是,应用程序的安装程序发送了一个对 ZIP 文件的 HTTP 请求,它完成得很好,但是在启动应用程序时,它的第一个请求(对 php 文件)失败了。它们共享用于发出请求的相同基本代码,但只是发送不同的参数。我一直在试图弄清楚这两个调用的真正不同之处,它基本上可以归结为:
一个是请求一个zip文件,另一个是发送参数到一个php文件;文件类型过滤? 失败的那个添加了一些额外的标头参数。如果他们被代理剥离,我会理解,但如果它有自定义/不受支持的标头,它会完全放弃请求吗?这是函数调用的基本骨架结构:
HINTERNET hInternetOpen = InternetOpen( szAppName, INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0 );
HINTERNET hInternetConnect = InternetConnect( hInternetOpen, "www.server.com", INTERNET_DEFAULT_HTTP_PORT, NULL, NULL, INTERNET_SERVICE_HTTP, NULL, 0 );
HINTERNET hRequest = HttpOpenRequest( hInternetConnect, "GET", "path/query.php?params=etc", NULL, NULL, "*/*", INTERNET_FLAG_RELOAD, 0 );
// Here I was including some custom headers, such that szHeaders would look something like:
// "KEY:12345\nTZ:New_York\n"
HttpSendRequest( hRequest, szHeaders, dwHeadersLen, NULL, 0 );
InternetReadFile( hRequest, lpBuf, dwBufSize, &dwAmtRead );
我将设置一个新版本,该版本将提供更多错误检查,以确定请求的哪一部分失败以及返回了哪些错误代码。它还将取消自定义标头,以及此与安装程序之间的任何其他不一致。
我真的不太相信这些东西真的是原因,所以与此同时,我正在寻找关于可能出了什么问题的猜测,或者我应该仔细检查或注意哪些事情.我最初确信这只是他们锁定网络的过滤问题,但通过与他们的 IT 团队交谈,它发出的请求并没有被他们阻止。也许我在做一些非标准的事情。
【问题讨论】:
【参考方案1】:我建议使用tcpdump 或wireshark 来监控进出您的网络服务器的实际流量。你有没有看到他们的要求通过了?如果没有,我会要求他们在防火墙内部和外部尝试相同的操作,看看那里发生了什么。
【讨论】:
Wireshark 似乎非常有用,所以我已经尝试过了,并在他们访问内容时将其捕获。这似乎表明失败的请求没有到达服务器附近,因为在最后一次成功请求之后,他们的 IP 根本没有命中。我让他们中的一些人通过删除非标准标题来工作,所以看起来他们的代理可能刚刚放弃了这些请求;我只需要确保所有其他的都是标准化的。以上是关于来自应用程序的 HTTP 请求在发件人的网络/代理和我们的网络主机之间消失的主要内容,如果未能解决你的问题,请参考以下文章
仅对来自远程端点的响应起作用的 Servlet 过滤器“代理”