我希望能够使用JavaScript函数检查服务器是否“可访问”。此处的“可访问”表示如果服务器有响应,无论HTTP状态码是什么,都算可访问。我找到了一个Stackoverflow / Google推荐的函数:
但是该函数似乎返回
function check(target)
{
var xhr = new XMLHttpRequest();
var target = "https://"+target+"/index.php";
var num = Math.round(Math.random() * 10000);
xhr.open("HEAD", target + "?num=" + num, true);
xhr.send();
xhr.addEventListener("readystatechange", processRequest, false);
function processRequest(e)
{
if (xhr.readyState == 4)
{
if (xhr.status !== 0)
{
return true;
}
else
{
return false;
}
}
}
}
如果目标允许使用Access-Control-Allow-Origin: *
(或特定客户端),那么它就可以正常工作。但情况并非如此。
我发现了很多解决方案,它们似乎都依赖于这一点。
如何在JavaScript中检查服务器是否可达,与服务器上的Access-Control-Allow-Origin
设置无关呢?
编辑:我想补充一下,我不能修改目标(例如,更改头部),但我能够识别应该可用的资源(例如,https://target/this-specific-site.php)
编辑2:我正在尝试实现@Vic建议的解决方案; 在这里尝试:
function chk(){
var img = new Image(); // Create new image element
img.onload = function(){
return false;
};
img.onerror = function() {
return true;
};
// Try to change this URL to nonexistant image
img.src = 'https://www.google.com/images/srpr/logo3w.png'; // Set source path
}
if (chk())
{
alert("IMAGE LOADED");
}
else
{
alert("IMAGE FAILED TO LOAD ("+chk()+")");
}
但是该函数似乎返回
undefined
,所以检查失败。
编辑3: 我需要该函数给我一个返回值。
https://enable-cors.org/
,我认为您会发现页面确实会返回0
。 - SaAtomictrue
或false
。 - SaAtomic