我的用例:我正在尝试向https://www.google.com发出简单的fetch GET请求,以检查互联网连接。我需要检查响应代码,并根据此决定用户是否具有互联网连接。现在,尽管在开发人员工具中可以看到200代码(没有响应标头或响应),但是fetch始终失败,落入fetch调用的错误处理程序,并且控制台标记CORS错误。
我确实理解,因为我正在进行跨源请求,所以这应该导致CORS错误。
我想知道我能做什么来使我的连接代码正常工作。我显然不能更改google.com的响应标头。之所以使用google.com是因为它的可靠性,就像我们在浏览器中大多数时候都会访问google.com以检查互联网是否工作:D
我的代码:
我确实理解,因为我正在进行跨源请求,所以这应该导致CORS错误。
我想知道我能做什么来使我的连接代码正常工作。我显然不能更改google.com的响应标头。之所以使用google.com是因为它的可靠性,就像我们在浏览器中大多数时候都会访问google.com以检查互联网是否工作:D
我的代码:
networkMonitor: () => {
const headers = new Headers();
headers.append('Cache-Control', 'no-cache');
const timerId = setInterval(() => {
fetch('https://www.google.com')
.then((response) => {
if (response.status != 200) {
// Yay ! connected
}
}, (err) => {
console.log("error: " + err); // (currently fetch failed)
})
}, 5000);
}
附言:我知道没有办法禁用同源策略或强制其他站点发送允许所有来源标头。但是可以通过使用cors代理来绕过此限制。 我想知道是否可以使用Google.com或类似的易于获得的站点来验证我的连接方式,如果不能,那么从获取连接信息的角度来看,是否有其他方法来处理它们。
http://connectivitycheck.gstatic.com/generate_204
。这也是由Google创建的,但用于检查您是否有有效的连接。请确保与状态码204进行比较。获取google.com将返回不必要的数据并需要90毫秒,而gstatic则不返回任何内容且仅需30毫秒。 - Zun