Я знаю, здесь есть миллиард вопросов CORS. Я прошел через десятки. Я все еще не уверен, в чем проблема, и я думаю, что достаточно хорошо понимаю CORS, но, очевидно, мне что-то здесь не хватает.
Я пытаюсь получить свой (Node / Express) API работает на реальном URL-адресе (т.е. развернут, не использует origin: "*"
), и сообщает браузеру, что нужно выполнять запросы с моего GUI URL-адреса.
Для некоторых маршрутов мне нужна аутентификация, поэтому мне нужна добавить туда credentials
.
Это довольно стандартный вариант использования, но, возможно, что-то изменилось в API с тех пор, как я делал это в последний раз, или, может быть, я просто забыл, но, несмотря на это, я не могу получить это работает, и я не уверен, что мне не хватает.
Кажется, есть несколько способов go включить CORS для всех запросов в моем приложении Express. В настоящее время я использую промежуточное ПО cors
с его объектом параметров.
В частности, вот код, который я использую.
const app: express.Application = express();
const corsOptions = {
credentials: true,
origin: 'https://my-gui.example.com',
methods: 'GET,HEAD,PUT,PATCH,POST,DELETE,OPTIONS',
preflightContinue: true,
}
app.use(cors(corsOptions));
Что я делаю не так? Когда я делаю запрос fetch
из своего браузера, я получаю следующую ошибку:
Access to fetch at 'https://my-api.example.com/graphql' from origin 'https://my-gui.example.com'
has been blocked by CORS policy: Response to preflight request doesn't pass access control
check: No 'Access-Control-Allow-Origin' header is present on the requested resource. If an
opaque response serves your needs, set the request's mode to 'no-cors' to fetch the resource
with CORS disabled.
Если я добавляю app.options('*', cors(corsOptions));
перед вызовом app.use
(зачем мне это нужно, когда я указал OPTIONS
в списке method
, я не знаю), я получаю другую ошибку (которая заставляет меня думать, что мне это по какой-то причине нужно).
Access to fetch at 'https://my-api.example.com/graphql' from origin 'https://my-gui.example.com'
has been blocked by CORS policy: Response to preflight request doesn't pass access control
check: It does not have HTTP ok status.