2016-11-15 525 views
1

我对提交给Apple的应用程序有问题,Apple声称这是由于应用程序在仅用于ipv6的网络上运行时发生故障所致。有关ajax请求的IPV6问题

从应用程序中的JavaScript我使用XmlHttpRequest从第三方服务器获取数据,我认为问题可能是第三方服务器没有正确处理来自ipv6网络的请求。

苹果告诉我的是确保我正确处理它,而且服务器支持ipv6请求。问题是我没有控制我们用来获取数据的第三方服务器。我试着对服务器运行一个在线ipv6兼容性测试,并向我展示了一些可能的原因:第一个DNS服务器正在返回一个AAAA记录,而另一个则不是。据我了解,这可能会导致客户端认为服务器支持ipv6,即使它实际上不支持。这似乎是请求失败的可能原因吗?

ipv6 test

下一个问题是,如果有什么我可以在客户端做迫使通信中,即使客户端网络上运行IPv6的IPv4的贯彻。这里是我的代码,这是非常简单的:

var xhr = new XMLHttpRequest(); 
xhr.responseType = "document"; 

xhr.addEventListener("load", function() { 
    callback(xhr.responseXML); 
}, false); 

xhr.open("GET", url, true); 
xhr.send(); 

希望有人能帮助我阐明这整个IPv6的头痛轻一些,因为网络是不是我的专业领域。我只需要获得这些请求的工作,所以该应用程序可以被苹果公司接受。

+0

究竟苹果说的是什么问题? –

+0

他们只说在ipv6网络上运行时该应用程序失败,并且从它们发送的屏幕截图看来,它似乎是失败的ajax请求。所以我们没有更具体的东西,不幸的是。 –

回答

2

如果通过IPv6无法访问服务器,那么必须(使用RFC 2119措辞)成为DNS中的AAAA记录。如果存在,那么来自IPv6网络的请求将失败。由于Apple NAT64仿真的工作方式,在使用其测试设置时可能不太明显,但它会在实际的NAT64网络上中断。

或者反过来说:如果AAAA记录存在,那么它们必须包含有效地址,并且连接到该地址必须有效。