@dev_b

Yandex Cloud Functions Post Request как победить CORS?

Приветствую. Есть функция, которая отправляет письмо на почту.

exports.handler = async (event, context) => {
  const { name, phone, email } = JSON.parse(event.body);

  ... отправка письма ...

  return {
    statusCode: 200
  };
};


Через Postman - все ок.
Через CORS Anywhere - все ок.

Через axios, fetch и т.д. (все, что с фронта):

Access to fetch at 'https://functions.yandexcloud.net/***********' from origin 'https://xd71v.***********.io' 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.

POST https://functions.yandexcloud.net/*********** net::ERR_FAILED


Заголовок "Access-Control-Allow-Origin" в тело ответа добавлял - без изменений.

Подскажите в какую сторону смотреть, куда копать. Спасибо.
  • Вопрос задан
  • 2916 просмотров
Пригласить эксперта
Ответы на вопрос 2
@lmx
Dev_by

Попробуйте сделать вот так:
1. Уберите headers, если устанавливали в ответе Яндекс функции, она делает это за вас.
2. Кодируйте body в строку при отправке через fetch/axios.
3. Установите Content-Type: text/plain если он отличается от text/plain.

Пример вызова функции с клиента:

fetch('https://functions.yandexcloud.net/<id функции>', {
    method: 'POST',
    body: JSON.stringify({ name: 'Max' })
})


Пример получения и обработки body на стороне функции:
const formData = JSON.parse(Buffer.from(event.body, 'base64').toString());
Ответ написан
@dnagafonov
Как указано доках Яндекса:

«No 'Access-Control-Allow-Origin' ...» при генерации запроса браузером
API Яндекс.Погоды не предназначено для отправки запросов из браузера пользователя. Данные действия не безопасны, так как позволяют увидеть ваш API-ключ через инструменты браузера.

Если вам необходимо осуществлять запросы из браузера, используйте промежуточный сервер, который будет принимать клиентские запросы, добавлять к ним ключ доступа и отправлять запросы к API Яндекс.Погоды.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы