来自应用程序的 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 请求在发件人的网络/代理和我们的网络主机之间消失的主要内容,如果未能解决你的问题,请参考以下文章

nginx反向代理

仅对来自远程端点的响应起作用的 Servlet 过滤器“代理”

C# Web 应用程序 -> 代理所有请求 -> 从另一个 Web 应用程序返回内容(反向代理)

Nginx 最全操作——nginx反向代理(5)

ngix介绍

无法将来自 localhost:3000 的请求代理到 localhost:7000 ReactJs