Получить запрос к https: www.google.com не удается (очевидно) с CORS - PullRequest
0 голосов
/ 23 октября 2019

Мой вариант использования: я пытаюсь сделать простой запрос GET на https://www.google.com, чтобы проверить подключение к Интернету. Мне нужно проверить код ответа и, в зависимости от этого, решить, есть ли у пользователя подключение к Интернету. Теперь, хотя я вижу код 200 (без заголовков ответа или ответа) в инструментах разработчика, при извлечении всегда происходит сбой посадки в обработчик ошибок для вызова извлечения, и консоль отмечает ошибку 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);
    }

PS: я знаю, что нет способа отключить ту же политику происхождения или заставить другой сайт отправлять разрешение всем заголовкам происхождения. Однако это можно обойти, используя Cors Proxy. Я хочу знать, можно ли использовать google.com или аналогичные легкодоступные сайты для проверки моего соединения, или нет, а если нет, то есть ли другой способ справиться с ними с точки зрения простого получения информации о соединении.

Ответы [ 4 ]

1 голос
/ 23 октября 2019

Вы можете добавить некоторые параметры к вашему запросу на выборку с помощью объекта init. Если для свойства mode установлено значение no-cors, вы можете отправлять запросы GET и HEAD на URL-адрес, но не можете получить доступ к ответу.

networkMonitor: () => {
  const headers = new Headers();
  headers.append('Cache-Control', 'no-cache');
  const timerId = setInterval(() => {
    fetch('https://www.google.com', {
      mode: 'no-cors'
    })
    .then((response) => {
      if (response.status != 200) {
        console.log('Yay ! connected')
      }
    }, (err) => {
      console.log('error: ' + err); 
  }, 5000);
}

Также я хотел бы рассмотреть возможность отправкизапрос HEAD, так как вы не хотите использовать тело ответа

0 голосов
/ 23 октября 2019

Вы можете использовать offline.js для этой задачи. Есть несколько способов проверить состояние соединения.

Offline.check (): проверить текущее состояние соединения.

Offline.state: текущее состояние соединения 'up'или' вниз '

Обратите внимание, что этот репо не поддерживается должным образом .

ссылка на github здесь

0 голосов
/ 23 октября 2019

Вы можете использовать https://developer.mozilla.org/en-US/docs/Web/API/Request/mode, чтобы установить режим «no-cors». Это сработало для меня. Также может быть достаточно использовать запрос HEAD вместо GET для сохранения полосы пропускания.

Помните об этом предложении в документации для «no-cors»:

JavaScript можетнет доступа к каким-либо свойствам полученного ответа

В моих тестах здесь объект ответа просто пуст. Сбой проверки response.status или response.ok.

fetch('https://www.google.com', {
    method: 'HEAD',
    mode: 'no-cors'
  })
  .then((response) => {
    console.log("connected");
  }, (err) => {
    console.log("error: " + err); // (currently fetch failed)
  })
0 голосов
/ 23 октября 2019

Я хочу знать, можно ли использовать google.com или аналогичные легкодоступные сайты для проверки моего способа подключения или нет, а если нет, то есть ли другой способ справиться с ними с точки зренияпросто получить информацию о подключении.

Нет, нет.

Как вы уже определили, для этого вам необходимо разрешение CORS.

...