Express: зависит ли конфигурация cors от TTL сервера? - PullRequest
0 голосов
/ 11 апреля 2020

Я успешно развернул свое приложение API Express на AWS elasti c beanstalk. У меня есть интерфейс React, который размещен на S3.

Оба находятся в одном домене, а интерфейс находится на example.com и API на api.example.com Оба имеют сертификаты и защищены.

const express = require('express');
const cors = require('cors')({
  Origin: 'https://example.com'
});

// followed by required middleware
app.use(cors());

//followed by app constants

app.use((e, req, res, next) => {
  res.header("Access-Control-Allow-Origin", "https://example.com");
  res.header('Access-Control-Allow-Methods', 'DELETE, PUT, GET, POST');
  res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");

  if (e) {
    console.log(e);
    res.status(500).send(e.message);
  }
  next();
})

// followed by app routes

Когда я пытаюсь зарегистрировать пользователя на своем сайте, я получаю сообщение об ошибке:

Access to XMLHttpRequest at 'https://api.example.com/users/signup/' from origin 'https://example.com' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.

Эта топика c, конечно, была покрыта несколько раз время переполнения стека (которое я рассмотрел сегодня несколькими решениями), но мой вопрос касается реального сервера, на котором размещается API.

В размещенной зоне для api.example.com TTL составляет 172800 (48 часов). Означает ли это, что мои изменения не будут отражены в это время? Если это так, значит ли это, что каждый раз, когда вы развертываете код, он сбрасывает TTL?

Я разработчик внешнего интерфейса, работающий над сторонним проектом, так что это действительно не моя область знаний. Любые DevOps или BackEnd Devs есть идеи? Заранее спасибо!

Ответы [ 2 ]

2 голосов
/ 11 апреля 2020

В размещенной зоне для api.example.com он имеет TTL 172800 (48 часов). Означает ли это, что мои изменения не будут отражены в это время? Если это так, означает ли это, что каждый раз, когда вы развертываете код, он сбрасывает TTL?

Нет.

TTL - это время, которое ожидают, что другие DNS-серверы будут кешировать Информация DNS (например, на какой сервер указывает доменное имя).

Это не имеет никакого отношения к развертыванию кода.


Ваша проблема с этим не связана. Я бы добавил некоторые записи в код на стороне сервера, чтобы увидеть, какие маршруты и промежуточное программное обеспечение действительно были затронуты, а также отслеживать точные запросы и ответы, которые вы получаете на вкладке Сеть вашего браузера.

0 голосов
/ 11 апреля 2020

Там браузер может сделать запрос preflight OPTIONS для определенных типов междоменных запросов. Если ответ на этот запрос не был успешным или не имеет заголовков CORS, вы также получите такую ​​ошибку. Поэтому я полагаю, что вы должны добавить маршрут в ваше приложение Express для обработки предварительных запросов и отправить те же заголовки CORS или просто использовать express -cors-middleware .

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