Обработка ошибок CSP
Я пишу клиентскую программу для подключения к веб-сайту через HTTP/HTTPS. Программа сначала пытается подключиться к серверу, используя HTTPS. Однако после получения кода состояния ответа 301 я пытался обрабатывать запрос с HTTP каждый раз, когда есть 301, делая новый запрос к серверу HTTP. Как обычно делается для использования данных, я добавил функцию обратного вызова слушателя для события "data" в http.get(), используя метод on из http.clientRequest. Однако в выводе консоли нет данных. Я подозреваю, что это связано со следующим заголовком CSP, который я получаю с запросами:
Заголовки сообщений:
Тип контента: текст / HTML; кодировка =UTF-8
местоположение: http://www.whoscored.com/
сервер: Microsoft-IIS/8.0
строгая транспортная безопасность: максимальный возраст =16070400
политика безопасности контента: фрейм-предки *.whoscored.com; обновить-небезопасные-запросы;
x-content-security-policy: frame-ancestors *.whoscored.com; обновить-небезопасные-запросы;
дата: вс, 29 окт 2017 02:44:33 GMT
соединение: закрыть
длина контента: 148
Регистрация данных:
Код представлен ниже:
Https.get(options, (res: Http.IncomingMessage): void => {
logger.log('HTTPS Client for ScrapeX');
logger.log('-------------------------');
logger.logHeaders(res.headers);
switch(res.statusCode) {
case 200:
(() => {
//
logger.log('The connection was established successfully');
})();
break;
case 301:
(() => {
// fallback to http
let buf = '';
httpClient((res1) => {
logger.log('HTTP Client');
logger.log('----------------');
logger.logHeaders(res1.headers);
}, n_options)
.on('error', (err) => {
logger.log('Error: ' + err.message);
logger.printStack(err);
})
.on('data', (chunk: string): void => {
buf += chunk;
})
.on('close', () => {
logger.log('Logging the data: ');
logger.log(buf);
});
})();
break;
}
})
.on('error', (err) => {
logger.log(err.message);
logger.log(err.stack);
})
.on('close', () => {
logger.log('Connection closed');
});
1 ответ
Вы не можете подключиться к этому серверу с помощью HTTP, это ваша проблема; он использует оба upgrade-insecure-requests
и что более важно strict-transport-security
, Любой браузер, который уважает strict-transport-security
просто откажется подключиться через незащищенный HTTP.
Не уверен, что сказать вам, кроме этого, в этом случае вы просто не можете повторить попытку в HTTP, или, по крайней мере, он всегда выдаст либо ошибку, либо просто перенаправит на HTTPS.
CSP на самом деле не должен быть проблемой, он предназначен для загрузки других ресурсов на этой странице, он не блокирует людей от загрузки страницы в первую очередь.