我们创建了一个强制门户网站,只要您连接到Wi-Fi网络,该门户网站就会打开。最初,强制网络门户上显示的页面在服务器端呈现。
现在我们在页面上添加一些由某些用户操作触发的AJAX功能。但是,我们看到非常不确定和随机的行为。有时AJAX调用是成功的,有时它甚至没有进入网络(通过 WireShark 检查)。
关于AJAX调用的重要事实 -
正在对与页面不同的域进行ajax调用。服务器允许使用CORS标头,并且在普通浏览器中工作正常,但在强制网络门户中失败。
ajax调用本质上是异步的(虽然尝试过同步调用 - 但没有运气)。
我在ajax调用中设置了几个标头(authorization,client-id,user-id)。
GET和POST都面临着这个问题。
失败的呼叫的状态代码为0.
问题主要出在Apple设备上。在Mac中它每次都失败,在iPhone中它是随机的。奇怪的是 - 相同的iPhone在不同的时间表现不同。
没有太多资源可以找到有关强制网络门户的技术规范。可用的少数几个没有帮助或已经过时(因为我测试了cookie正在工作,我读到它的某个地方在强制网络中不可用)。
这里需要考虑的一件事是 - 如果对同一个域进行AJAX调用,它总是成功的。但如果相同的域策略是事物,则无法解释行为的随机化。我也检查了WebKit代码中的一些信息(https://github.com/WebKit/webkit/blob/b46afedc13edea0847ebf02414f803bbe9781b70/Source/WebCore/xml/XMLHttpRequest.cpp#L567),但也没有太多运气。
以下内容就像是一个失败的浏览器信息 - Mozilla / 5.0(iPhone; CPU iPhone OS 11_1_1,如Mac OS X)AppleWebKit / 604.3.5(KHTML,如Gecko)Mobile / 15B150
以下是ajax调用的Javascript代码 -
var xhttp = new XMLHttpRequest();
xhttp.onreadystatechange = function() {
if (this.readyState == 4 && this.status == 200) {
// do something good
} else {
// do something evil
}
};
// Call is made to some IP different than the domain
xhttp.open("GET", "http://255.255.255.255:255/xyz", true);
xhttp.setRequestHeader('authorization', 'some-random-hex-digit');
xhttp.setRequestHeader('client-id', 'some-random-client-id');
xhttp.send(JSON.stringify({}));
任何人都遇到过类似问题或者可能会在这里提出一些建议吗?我是 坚持了2天。