Я столкнулся с некоторыми трудностями, заставив мое приложение Express
выйти с Nginx, чтобы сообщить о csp violations
, и две вещи, которые я узнал из вышеприведенного ответа:
- Должен быть
POST
метод иnot GET
method req.body
содержит отчет
Но вышеприведенного было недостаточно, и я продолжал пустовать req.body
, и я не мог найти другой постопишите, как это исправить.После некоторого исследования я наткнулся на этот пост , а также полностью изолированный github выпуск , где dougwilson
дают подсказки, куда поместить маршрут, который обрабатывает csp report
.
Причина, по которой req.body
была для меня пустой, была в том, что я поместил обработчик маршрута csp report
после следующих конфигов:
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));
app.use(cookieParser());
Я переместил обработчик маршрута csp report
над нимино я все еще продолжал получать пустое значение req.body
, затем я добавил следующий выше csp report
обработчик маршрута, чтобы получить отчет в req.body
app.use(bodyParser.json({ type: 'application/csp-report' }));
После добавления вышеуказанной строки выше csp report
обработчик запроса,Express
понял, что он должен анализировать запросы с Content-type как application/csp-report
.
Может быть Express
по умолчанию не анализирует application/csp-report
, и добавление указанного выше решено вопрос для меня.Я также погуглил, если Express
анализирует application/csp-report
по умолчанию, и наткнулся на эту gist , утверждая, что Chrome
отправляет application/csp-report
, тогда как Firefox отправляет application/json
(и я использую Chrome - вы можете включитьapplication/json
также, если у вас есть проблемы с FF
).
Вот как это выглядит в моем app.js
// without following csp-report don't get parsed.
app.use(bodyParser.json({ type: 'application/csp-report' }));
app.get('/vehicle/cspreport', function(req, res) {
res.status(403);
});
app.post('/vehicle/cspreport', function(req, res) {
console.log('csp report > ' + JSON.stringify(req.body));
});
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));
app.use(cookieParser());
...
Принятый ответ, отправленный OP, получен от 2011
, и я подумал о добавлении ответа, чтобы показать, как я решил эту проблемупроблема в 2016
со следующими версиями Node.js, Express и Nginx
Node: v4.2.4
Express: 4.13.1
Nginx: 1.8.1