【发布时间】:2017-08-03 04:08:08
【问题描述】:
我想通过 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 )
edit2:我正在尝试实施一个解决方案,正如@Vic 所建议的那样; try it here:
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,因此检查失败。
edit3:我需要这个函数给我一个返回值。
【问题讨论】:
-
(1) 从网站获取图片 (2) 将其加载到您的网站 (3) 如果出现错误,则假设网站已关闭。
-
@Quentin,这些页面确实会导致
0,如果您尝试使用https://enable-cors.org/作为目标的脚本,我想您会明白我的意思 -
@Vic,我正在尝试在另一个 Stackoverflow 帖子的帮助下实现这一点。但对我来说,如果它失败了,如果它加载了,函数都会被执行。见:jsbin.com/worutemobe/edit?html,console,output
-
刚刚检查了你的代码...不是那样工作的,哈哈
标签: javascript http access-control