【发布时间】:2019-10-23 16:45:33
【问题描述】:
我的用例:我正在尝试向https://www.google.com 发出一个简单的 fetch GET 请求以检查互联网连接。我需要检查响应代码,并据此确定用户是否有互联网连接。现在,虽然我可以在开发人员工具中看到 200 代码(没有响应标头或响应),但 fetch 始终无法进入 fetch 调用的错误处理程序,并且控制台会标记 CORS 错误。
我确实理解,因为我正在发出跨域请求,所以这应该会导致 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);
}
P.S:我知道没有办法禁用同源策略或强制其他站点发送允许所有源头。这可以通过使用 cors 代理绕过。 我想知道是否可以通过我的方式使用 google.com 或类似的现成网站来验证连接,如果没有,那么从仅获取连接信息的角度来看,是否有其他方法来处理它们。
【问题讨论】:
-
有点相关,建议你改用
http://connectivitycheck.gstatic.com/generate_204。也由 Google 制作,但创建是为了检查您是否有有效的连接。确保与状态码 204 进行比较。获取 google.com 会返回不必要的数据并且需要 90 毫秒,而 gstatic 什么也不返回并且需要 30 毫秒 -
如果您可以找到任何支持 CORS 的公开可用的 Google“端点”,并且您想假设它与 Google 主页具有相同的“可靠性”,那么您可以使用它。否则,您无能为力 - 因为使用 CORS 代理的一般“解决方法”当然会将大部分“可靠性”响应放在代理上。
-
@Zun ,谢谢伙计现在要调查一下。
-
@04FS 是的,谢谢。
-
@Zun 与 gstatic 相同的 cors 错误!
标签: javascript cors fetch