Разрешить CORS для PUT в Node.js
Я пытаюсь сделать PUT
вызов моей конечной точки api rest и получаю эту ошибку:
Method PUT is not allowed by Access-Control-Allow-Methods in preflight response.
Я включил CORS
, используя это решение: enable-cors, оно работает для POST
.
Как мне добиться того же для PUT
?
Благодарю.
Ответы
Ответ 1
добавить это:
res.header('Access-Control-Allow-Methods', 'PUT, POST, GET, DELETE, OPTIONS');
app.use(function(req, res, next) {
res.header("Access-Control-Allow-Origin", "*");
res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
res.header('Access-Control-Allow-Methods', 'PUT, POST, GET, DELETE, OPTIONS');
next();
});
Ответ 2
Вам нужно будет поддерживать метод OPTIONS на вашем сервере, потому что браузер будет предварительно обрабатывать все запросы PUT между источниками независимо от того, какие у вас заголовки. И вам нужно убедиться, что вы явно разрешаете PUT в заголовках CORS. Об этом можно узнать на странице MDN в CORS:
Кроме того, для методов HTTP-запросов, которые могут вызывать побочные эффекты на данных сервера (в частности, для HTTP-методов, отличных от GET, или для использования POST с определенными типами MIME), спецификация предписывает браузерам "предварительно проверять" запрос, запрашивая поддерживаемые методы. с сервера с помощью метода запроса HTTP OPTIONS, а затем, после "одобрения" с сервера, отправляет фактический запрос с фактическим методом HTTP-запроса. Серверы также могут уведомлять клиентов о необходимости отправки "учетных данных" (включая файлы cookie и данные HTTP-аутентификации) с запросами.
Итак, на вашем сервере вам нужно сделать что-то вроде этого:
app.use(function(req, res, next) {
res.header('Access-Control-Allow-Origin', '*');
res.header('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE,PATCH,OPTIONS');
res.header('Access-Control-Allow-Headers', 'Content-Type, Authorization, Content-Length, X-Requested-With');
// allow preflight
if (req.method === 'OPTIONS') {
res.send(200);
} else {
next();
}
});
Вот статья на тему:
Запросы перекрестного происхождения в Express.JS