处理 CSP 错误
Handling CSP Errors
我正在编写客户端程序以通过 HTTP/HTTPS 连接到网站。该程序首先尝试使用 HTTPS 连接到服务器。但是,在收到 301 响应状态代码后,只要出现 301,我就会尝试通过向 HTTP 服务器发出新请求来处理 HTTP 请求。正如通常使用数据所做的那样,我使用 http.clientRequest 的 on 方法在 http.get() 的 'data' 事件上添加了一个侦听器回调。但是,控制台输出中没有数据。我怀疑这是由于我收到的以下 CSP header 请求所致:
留言Headers:
content-type: text/html;字符集=UTF-8
服务器:Microsoft-IIS/8.0
strict-transport-security: max-age=16070400
content-security-policy: frame-ancestors *.whoscored.com; upgrade-insecure-requests;
x-content-security-policy: frame-ancestors *.whoscored.com; upgrade-insecure-requests;
日期:2017 年 10 月 29 日,星期日 02:44:33 GMT
连接:关闭
content-length: 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');
});
您无法使用 HTTP 连接到该服务器,这是您的问题;它同时使用 upgrade-insecure-requests
,更重要的是 strict-transport-security
。任何尊重 strict-transport-security
的浏览器都将拒绝通过不安全的 HTTP 进行连接。
除了在这种情况下您无法在 HTTP 中重试之外不确定要告诉您什么,或者至少,它总是会给出错误或只是重定向到 HTTPS。
CSP 应该不是真正的问题,那是为了在该页面上加载其他资源,它不会首先阻止人们下载该页面。
我正在编写客户端程序以通过 HTTP/HTTPS 连接到网站。该程序首先尝试使用 HTTPS 连接到服务器。但是,在收到 301 响应状态代码后,只要出现 301,我就会尝试通过向 HTTP 服务器发出新请求来处理 HTTP 请求。正如通常使用数据所做的那样,我使用 http.clientRequest 的 on 方法在 http.get() 的 'data' 事件上添加了一个侦听器回调。但是,控制台输出中没有数据。我怀疑这是由于我收到的以下 CSP header 请求所致:
留言Headers:
content-type: text/html;字符集=UTF-8
服务器:Microsoft-IIS/8.0
strict-transport-security: max-age=16070400
content-security-policy: frame-ancestors *.whoscored.com; upgrade-insecure-requests;
x-content-security-policy: frame-ancestors *.whoscored.com; upgrade-insecure-requests;
日期:2017 年 10 月 29 日,星期日 02:44:33 GMT
连接:关闭
content-length: 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');
});
您无法使用 HTTP 连接到该服务器,这是您的问题;它同时使用 upgrade-insecure-requests
,更重要的是 strict-transport-security
。任何尊重 strict-transport-security
的浏览器都将拒绝通过不安全的 HTTP 进行连接。
除了在这种情况下您无法在 HTTP 中重试之外不确定要告诉您什么,或者至少,它总是会给出错误或只是重定向到 HTTPS。
CSP 应该不是真正的问题,那是为了在该页面上加载其他资源,它不会首先阻止人们下载该页面。