如果发送超过1kb的数据,则同一服务器上的两个网站之间的SSL POST请求失败

注意:虽然下面有一些PHP代码,但我确实认为它属于ServerFault而不是StackOverflow,因为这样做起作用,在我们更改服务器后它停止工作。

我有以下情况:

  • 有2个不同function的公共网站(更新:两个网站在同一台物理服务器上)。 用户可以在网站A填写一个巨大的registry单,以注册到网站B.
  • 当用户在网站A注册时,我向网站A的PHP脚本发送一个Ajax请求来validation数据。
  • 这个脚本本质上是一个将所有数据发送到网站B的代理,而B用“确定”或者一系列validation错误进行响应。 它只存在,因为我不能直接跨域Ajax。
  • 所有这些都是通过SSL的HTTP POST

直到我们将服务器迁移到同一托pipe公司后,这个工作才更加完美。 他们托pipe人员照顾所有的迁移,并且这个想法是,新的服务器将以与旧的服务器相同的configuration结束。

现在,在迁移之后,当提交给代理的信息被转换为“HTTP POSTstring”,需要超过1024个字节时,从A到B的服务器端请求悄然失败。 它工作,它执行所有的代码行,没有错误,通知或例外,我可以看到。 它只是一直到最后,就好像网站B用空string做出了回应。

但是,如果POSTless于1024个字节,那么所有的工作都很好,而且我要么得到正确的validation错误,要么返回“OK”。

直接发送完整的POST到网站B,没有代理,工作正常,所以问题是肯定的代理调用。

这种行为我没有合理化,这对我来说绝对没有意义。

你有没有遇到过这样的事情?
任何指针,我可以看看?

作为参考,这是代理代码:


$CustomersValidateURL = "https://WebsiteB.com/validatescript"; echo do_post_request($CustomersValidateURL, http_build_query($_POST)); // ========================================================================= function do_post_request($url, $data, $optional_headers = null){ $params = array('http' => array('method' => 'POST', 'content' => $data)); if ($optional_headers !== null){ $params['http']['header'] = $optional_headers; } $ctx = stream_context_create($params); $fp = @fopen($url, 'rb', false, $ctx); if (!$fp){ throw new Exception("Problem with $url, $php_errormsg"); } $response = @stream_get_contents($fp); if ($response === false) { throw new Exception("Problem reading data from $url, $php_errormsg"); } return $response; } 

这是在同一台服务器上从该服务器到“网站B”运行tracepath的结果:

 tracepath customers.xxx.com 1: server.xxx.com (208.92.xxx.xxx) 0.144ms pmtu 16436 1: server.xxx.com (208.92.xxx.xxx) 0.093ms reached Resume: pmtu 16436 hops 1 back 1 

最后,我结束了重写脚本来使用cURL。 我不知道发生了什么,但curl的作品。 这是我发现的最奇怪的事情之一…

这听起来像A和B之间的MTU问题,有些东西正在搞乱你的pathMTU发现。 你可以尝试像A的tracepath B吗?

我曾经遇到类似的问题,因为路由器(Windows 2000的RRAS,后来在一些SP中修复)没有正确处理MTU,而只是丢弃那些太大的数据包,而不是告诉发送者将它们分成小块。 这是一个痛苦的排查和一个重大的麻烦,因为这个地方是一个网吧“,当客户从一个webmail站点发送一条长信息时,这个问题就会出现。

您应该检查问题是否与HTTP POST或任何数据stream量有关; 一个有效载荷大于1024字节的简单ping应该足以validation这一点。


更新:

好吧,看来这不是一个networking问题。 你使用哪个操作系统和networking服务器?