Я пытаюсь сделать GET HTTP-запрос к конечной точке шлюза AWS API, подключенной к лямбда-функции.
Конечная точка и лямбда-функция работают как обычно, когда тестируются с почтальоном, что логично, поскольку почтальон не работаетиспользуйте CORS.
Однако при тестировании Firefox на Chrome я получаю следующую ошибку:
Firefox:
Блокировка перекрестного запроса: тот же источникПолитика запрещает чтение удаленного ресурса по адресу [ url ] (причина: отсутствует заголовок CORS 'Access-Control-Allow-Origin').
Chrome:
Доступ к выборке по [ url ] из источника 'http://localhost:8080' заблокирован политикой CORS: в запрошенном ресурсе отсутствует заголовок «Access-Control-Allow-Origin».Если непрозрачный ответ удовлетворяет вашим потребностям, установите режим запроса «no-cors», чтобы получить ресурс с отключенным CORS.
Но, если я посмотрю на ответ на запрос предварительной проверки CORS, яувидеть, что присутствует «Access-Control-Allow-Origin»:
HTTP / 2.0 200 OK
дата: вт, 12 марта 2019 15:22:57 GMT
content-type: application / json
длина-содержимого: 0
x-amzn-requesttid: [x-amzn-Requesttid]
access-control-allow-origin: *
access-control-allow-headers: Content-Type, X-Amz-Date, Authorization, X-Api-Key, X-Amz-Security-Token
x-amz-apigw-id: [x-amz-apigw-id]
access-control-allow-method: GET, OPTIONS
X-Firefox-Spdy: h2
Я пытался использовать и fetch и request пакетов для моего запроса со следующим кодом (я обернул вызов request в Promise, чтобы использовать асинхронный поток ожидания, такой как вызов fetch ):
const getPolicy = (baseUrl, bucketNameTranscribe, fileName, apiKey) => (
new Promise((resolve, reject) => {
request({
url: `${baseUrl}?bucketName=${bucketNameTranscribe}&key=${fileName}`,
method: "GET",
headers: {
"x-api-key": apiKey
}
}, ((error, response) => {
if (error) {
reject(error);
} else if (response.statusCode === 200) {
resolve(JSON.parse(response.body));
} else {
reject(response);
}
});
})
);
const upload = async() {
const {
policyUrl,
bucketNameTranscribe,
apiKey
} = awsConfig;
const fileName = `${Date.now()}.mp3`;
const req = new Request(
`${policyUrl}?bucketName=${bucketNameTranscribe}&key=${fileName}`,
{
method: "GET",
headers: new Headers({
"x-api-key": apiKey
})
}
);
try {
const response1 = await fetch(req);
console.log("fetch", response1);
} catch (error) {
console.error("errorFetch", error);
}
try {
const response2 = await getPolicy(policyUrl, bucketNameTranscribe, fileName, apiKey);
console.log("request", response2);
} catch (exp) {
console.error("errorRequest", exp);
}
}
Заранее спасибо за помощь