Пожарная служба долго получает запрос - PullRequest
0 голосов
/ 24 ноября 2018

Я использую Firebase и ReactJS для создания сайта, использующего Firestore.Когда я читаю из Firestore, используя следующий код Javascript, это успешно, однако, есть дополнительный запрос GET, который происходит через минуту после обновления страницы.

firestore
  .collection("users")
  .doc(uid)
  .get()
  .then(doc => {
    if (!doc.exists) {
      console.error("User " + uid + " does not exist. Cannot retrieve document");
    } else {
      const { avatar, displayName } = doc.data();
      this.setState({ avatar: avatar, displayName: displayName });
    }
  })
  .catch(err => {
    console.error("Error getting document", err);
  });

Firefox screenshot

Если я обновляю страницу перед этим последним GET, я получаю предупреждение Cross-Origin Request Blocked в консоли.У меня все еще никогда не возникало проблем с получением данных из Firestore.

Запрос перекрестного источника заблокирован: та же политика происхождения запрещает чтение удаленного ресурса в https://firestore.googleapis.com/google.firestore.v1beta1.Firestore/Listen/channel?database=projects%2Fsword-pear%2Fdatabases%2F(default)&gsessionid=QbGcouT4k6BUq5C33CSi25Ih6UQR6QI2&VER=8&RID=rpc&SID=wLKF3u5yBNBdMKhPjNHJwQ&CI=0&AID=6&TYPE=xmlhttp&zx=7mjvphigpy5i&t=2. (Причина: запрос CORS не был выполнен успешно)

Я предполагаю, что сервер все еще пытается отправить данные на исходную веб-страницу до обновления, но я не знаю, почему GET занимает так много времени, если я получаю данные в пределахвсе равно первые миллисекунды.

Ответы [ 2 ]

0 голосов
/ 18 апреля 2019

Это звучит в основном ожидаемо.Firestore оптимизирован для связи в реальном времени с бэкэндом и выполняет это с помощью формы длительного опроса, который включает в себя длительные запросы GET.Таким образом, даже если вы звоните только get(), внутри SDK раскручивает соединение с длинным опросом к бэкэнду в случае, если вы выполняете последующие вызовы get() или onSnapshot().Я считаю, что если вы не выполняете больше запросов в течение ~ 1 минуты, то соединение будет очищено, и вы не увидите больше запросов GET, если не выполните другую операцию.

Я не могу объяснитьпочему браузер регистрирует сообщение «Cross-Origin Request Blocked» при перезагрузке страницы, но это должно быть мягким и может быть проигнорировано.

0 голосов
/ 24 ноября 2018

это сначала localhost, а затем перекрестный GET запрос, который, по-видимому, истек.запуск этого скрипта с Firebase Hosting сделает его законным запросом не из разных источников.проблема заключается в том, что вместо того, чтобы использовать эмулятор, который запускается на localhost.

при обновлении SDK Google Cloud (команда alias gcloud), я видел следующее:

Cloud Firestore Emulator
▪ Release Cloud Firestore Emulator version 1.2.1
  ◆ This is the first beta release of the emulator.

, который мог бы обойти запрос перекрестного происхождения без его разрешения.

см. Концепция веб-происхождения .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...