所以使用XHR来验证页面是否存在并且它们有内容,但是由于我们做了很多请求,我们想要减少一些使用的带宽。
我们考虑过使用HEAD
请求检查!200
然后认为如果页面存在则仍然是2个请求,然后我们会提供此示例代码
Ajax.prototype.get = function (location, callback)
{
var Request = new XMLHttpRequest();
Request.open("GET", location, true);
Request.onreadystatechange = function ()
{
if(Request.readyState === Request.HEADERS_RECEIVED)
{
if(Request.status != 200)
{
//Ignore the data to save bandwidth
callback(Request);
Request.abort();
}
else
{
//@Overide the callback here to assure asingle callback fire
Request.onreadystatechange = function()
{
if (Request.readyState === Request.DONE)
{
callback(Request);
}
}
}
}
}
Request.send(null);
}
我想知道的是这实际上是否有效,或者响应机构是否总是回到客户端。
由于
答案 0 :(得分:1)
我不会给出明确的答案,但我有一些想要征求意见的想法。
理论上,请求的中止应该导致底层连接被关闭。假设基于TCP的通信意味着向服务器发送FIN,然后服务器应该停止发送数据并确认FIN。但这是HTTP,可能还有其他魔法(如连接流水线等)......
无论如何,当您提前关闭连接时,客户端将收到communication delay
中发送的所有数据,因为服务器将至少继续发送,直到他获得STOP信号。如果你有一个中等延迟和一个高带宽连接,这可能是很多数据,并且根据数据量,很可能是完整数据的很大一部分。
请注意,虽然代码不会接收任何此类数据,但它将被传输到客户端的网络设备,并且至少会在网络堆栈中传递一点点。因此,虽然这些数据永远不会收到您的应用程序级别,但无论如何都会消耗带宽。
我(受过教育的)猜测是它不会像你想的那样保存(在“正常”条件下)。我建议你做一个真实的世界测试,看看它是否值得负担得起。