Экспресс CORS поддомен - PullRequest
1 голос
/ 05 июля 2019

У меня есть сайт - https://example.com - который выполняет вызовы API - https://api.example.com -.API написан на Express и использует пакет CORS , чтобы разрешить запросы с сайта:

app.use(
    cors({
        credentials: true,
        origin: "https://example.com",
    })
);

Доступ к сайту можно получить через https://example.com или https://www.example.com.Как видите, в API я разрешаю явно запросы, поступающие с первого адреса, но не с последнего.Поэтому, если кто-то получит доступ к нему по последнему адресу, запросы к API будут отклонены.

Как обычно это можно решить?Разрешить явно как https://example.com и https://www.example.com?Или, может быть, есть способ игнорировать поддомен www?

Заранее спасибо!

-

РЕДАКТИРОВАТЬ:

Как предложено, я добавилhttps://www.example.com явно для конфигурации cors

app.use(
    cors({
        credentials: true,
        origin: ["https://example.com", "https://www.example.com"],
    })
);

Но это не сработало.В качестве обходного пути я только что перенаправил с условием перезаписи в файл .htaccess - сервер Apache - из домена www в домен не www.

Но теперь возникает вопрос: почему даже разрешение www.example.com не сработало?Есть ли для этого какая-то общая причина?

Ответы [ 2 ]

0 голосов
/ 05 июля 2019

Вам необходимо разрешить оба домена. API для этого немного сложнее. В основном вам необходимо прочитать документацию пакета CORS :

app.use(
    cors({
        credentials: true,
        origin: function (origin callback) {
            switch (origin) {
                case "https://example.com":
                case "https://www.example.com":
                    callback(null, true); // allow these domains
                    break;
                default:
                    callback(new Error('Now allowed')); // block others
            }
        },
    })
);

Значение origin может быть только строкой или вашей собственной пользовательской логикой, реализованной как функция.

0 голосов
/ 05 июля 2019

Обычным способом было бы избежать использования двух веб-сайтов разного происхождения с идентичным содержимым.

Настройка www.example.com для выдачи HTTP 301-перенаправления на example.com.


Разрешить явно как https://example.com, так и https://www.example.com?

Это тоже сработает.origin может быть передан массив.

Или, может быть, есть способ игнорировать поддомен www?

origin также может быть передано регулярное выражение.

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