Соблюдает ли ExpressJs / использует стандарт RFC-3986 при декодировании параметров строки запроса?
Почему прямой символ "è" принят, а кодированная версия "% E8" - нет?
Проверка Expressjs http-сервера
'use strict';
const express = require('express');
const bodyParser = require('body-parser');
// parse application/x-www-form-urlencoded
app.use(bodyParser.urlencoded({ extended: false }));
app.get('/test?', (req, res, next) => {
console.log(req.query);
res.status(200);
});
app.listen(4567, '127.0.0.1', () => {
console.log('test http server started');
});
Запрос
GET localhost:4567/test?message=lorem+ipsum%2C%20foo+%E8+bar
Ожидаемый журнал
{ message: 'lorem ipsum, foo è bar' }
Журналы сервера
{ message: 'lorem+ipsum%2C%20foo+%E8+bar' }
Если удалить символ% E8 "è"
Запрос
GET localhost:4567/test?message=lorem+ipsum%2C%20foo+bar
Журналы сервера
{ message: 'lorem ipsum, foo bar' }
Здесь (https://www.url -encode-decode.com / ) я могу прочитать, что для URI может применяться RFC-3986, который не допускает символы типа è, é, à .. .
Так что, кажется, что Экспресс отказывается от этих символов, но если мы попробуем
Запрос
GET localhost:4567/test?message=lorem+ipsum%2C%20foo+è+bar
Ожидаемый журнал
{ message: 'lorem+ipsum%2C%20foo+è+bar' }
Журналы сервера
{ message: 'lorem ipsum, foo è bar' }
То есть прямой символ "è" принят, а кодированная версия% E8 - нет?
Я пытался читать источники ExpressJS, но не могу найти ответ.