Длинный URI запроса усекается при вызове функции redirect () объекта ответа - PullRequest
0 голосов
/ 24 апреля 2018

В конкретном коде Node.js, реализующем пользовательскую стратегию аутентификации для Passport.js (в которой используется Express 4.6.13), в какой-то момент выполняется следующая строка:

return res.redirect(global.config.applicationEndpoint + '?user=' + queryUserString);

Он работает нормально, пока URL не передается на res.redirect() достаточно коротким.Если передается особенно длинный queryUserString (~ 8000 символов или более), он по-прежнему выдает ответ о перенаправлении с длинным и одинаково верным запросом uri, но этот uri явно усекается (заканчивается превентивно) ближе к концу.Несколько вещей, на которые следует обратить внимание:

  1. Инструкция по ведению журнала, расположенная непосредственно перед этой строкой, позволяет сделать вывод, что непосредственно перед тем, как queryUserString передается в res.redirect(), она еще не усечена.

  2. В ответе на перенаправление это действие генерируется в случае длинного queryUserString, хотя request uri IS обрезано, uris, переданные в теле ответа, НЕ являются (они одинаковыURIs).Тем не менее, это все еще мешает моему приложению работать должным образом (мне нужно, чтобы этот длинный uri был передан в заголовке запроса)

Понятно, что здесь вводится какое-то ограничение.Но я не могу найти ничего, что я мог бы подправить, чтобы в запросах было больше времени для уриса.

Любая помощь приветствуется, у меня нет идей.

1 Ответ

0 голосов
/ 24 апреля 2018

Не уверен, поможет ли это, но я провел некоторое расследование по этому поводу.

Внутренне res.redirect звонки res.location:

Что мы можем видеть, что res.location просто звонит res.set:

Но вы можете видеть там, что есть вызов encodeUrl, внешняя зависимость которого

Проверка источника здесь показывает, что происходит некоторая замена регулярного выражения:

function encodeUrl (url) {
  return String(url)
    .replace(UNMATCHED_SURROGATE_PAIR_REGEXP, UNMATCHED_SURROGATE_PAIR_REPLACE)
    .replace(ENCODE_CHARS_REGEXP, encodeURI)
}

Я догадываюсь, что ваши символы в вашем URI заменяются, и это заставляет вас поверить, что оно усекается.

Я бы сравнил ваш URI с шаблонами регулярных выражений, которые использует модуль:

...