Я использую безсерверный шаблон yml для развертывания своих функций в aws.В следующем фрагменте показана конфигурация для одной из конечных точек:
functions:
publish:
handler: lambda.publish
events:
- http:
method: post
path: publish
cors:
origin: ${self:custom.origin.${self:custom.stage}}
allowCredentials: true
Это мой запрос на выборку,
fetch(`${SOME_DOMAIN}/publish`, {
method: 'POST',
credentials: 'include',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify(data),
})
Я обрабатываю заголовки ответа в моей лямбде следующим образом:
const ALLOWED_ORIGINS = [
'http://localhost:3001',
'https://staging.company.com.au',
'https://blaze-staging.company.com.au',
'https://www.company.com.au',
'https://blaze.company.com.au',
'https://direct.company.com.au',
]
const origin = event.headers.origin
let headers
if (ALLOWED_ORIGINS.includes(origin)) {
headers = {
'Content-Type': 'application/json',
'Access-Control-Allow-Origin': origin,
'Access-Control-Allow-Credentials': true,
}
} else {
headers = {
'Access-Control-Allow-Origin': 'http://localhost:3001',
}
}
const response = {
statusCode: 200,
headers,
body: JSON.stringify({ message: 'Successfully published the message.' }),
}
callback(null, response)
Я не могу заставить работать запросы перед полетом, так как не могу установить несколько источников.Как обойти эту проблему?установка mode: 'no-cors'
для запроса фактически разрешает запросы из любого домена.Любая помощь приветствуется.
Для запроса перед полетом будет отображаться следующая ошибка:
Не удалось загрузить https://o9a0130i2r.execute -api.us-east-1.amazonaws.com / development / publish : Ответ на предварительный запрос не проходит проверку контроля доступа: в запрошенном ресурсе отсутствует заголовок «Access-Control-Allow-Origin».Происхождение 'https://direct.company.com' поэтому не разрешено.Ответ имеет HTTP-код состояния 403. Если непрозрачный ответ удовлетворяет вашим потребностям, установите режим запроса «no-cors», чтобы получить ресурс с отключенным CORS.