Я пытаюсь включить новостную ленту в приложение Ionic, которое разрабатываю, консультируясь по каналам с других веб-сайтов. Но для некоторых URL каналов приложение жалуется на отсутствие параметра Access-Control-Allow-Origin. Поэтому я создал лямбда-функцию, которая получает содержимое из параметра канала url и возвращает его клиенту, добавляя Access-Control-Allow-Origin в заголовок ответа. Вы можете увидеть код ниже:
const https = require('https');
exports.handler = (event, context, callback) => {
var url = event.queryStringParameters.url;
https.get(url, (res) => {
console.log('statusCode:', res.statusCode);
console.log('headers:', res.headers);
res.setEncoding('utf8');
let rawData = '';
res.on('data', (chunk) => {
rawData += chunk;
});
res.on('end', () => {
try {
const response = {
statusCode: 200,
headers: {
'Content-Type': 'text/xml, application/xml',
'Access-Control-Allow-Origin': '*',
'Access-Control-Allow-Headers': '*'
},
body: rawData,
};
// callback is sending HTML back
callback(null, response);
} catch (e) {
console.error(e.message);
callback(e);
}
});
}).on('error', (e) => {
console.error(e);
callback(e);
});
};
Это работает для большинства URL, но только для одного (https://www.passblue.com/feed/) Я заблокирован их брандмауэром. Он возвращает мне следующее сообщение:
Доступ запрещен - брандмауэр веб-сайта Sucuri - если вы владелец сайта (или управляете этим сайтом), внесите в белый список свой IP-адрес или если вы считаете, что этот блок является ошибкой, откройте заявку в службу поддержки и обязательно включите сведения о блоке (отображаются в поле ниже), поэтому мы можем помочь вам в устранении проблемы.
Я также проверил это из моего локального браузера, и он работает правильно. Я также создал локальный скрипт на моем компьютере, чтобы имитировать лямбда-функцию aws, и он также блокируется брандмауэром. Я предполагаю, что есть некоторая информация заголовка, которую я должен отправить в запросе.
Кто-нибудь видел такое поведение раньше?