URL¶
Стабильность: 2 – Стабильная
АПИ является удовлетворительным. Совместимость с NPM имеет высший приоритет и не будет нарушена кроме случаев явной необходимости.
Модуль node:url предоставляет средства для разрешения и разбора URL. Подключение:
1 | |
1 | |
Строки URL и объекты URL¶
Строка URL — структурированная строка с несколькими смысловыми компонентами. После разбора возвращается объект URL со свойствами для каждого компонента.
В node:url два API: унаследованный, специфичный для Node.js, и новый, соответствующий WHATWG URL Standard, как в браузерах.
Ниже сравнение WHATWG и унаследованного API. Для URL 'https://user:[email protected]:8080/p/a/t/h?query=string#hash' сверху — свойства объекта от унаследованного url.parse(), снизу — свойства WHATWG URL.
У WHATWG origin включает protocol и host, но не username и password.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | |
Разбор строки URL через WHATWG API:
1 2 | |
Разбор через унаследованный API:
1 2 3 | |
1 2 3 | |
Сборка URL из частей и получение строки¶
WHATWG URL можно собрать из частей через сеттеры свойств или шаблонную строку:
1 2 3 4 | |
1 2 3 4 | |
Итоговую строку URL даёт свойство href:
1 | |
WHATWG API для URL¶
Класс: URL¶
Совместимый с браузерами класс URL, реализованный по WHATWG URL Standard. Примеры разобранных URL приведены в самом стандарте. Класс URL также доступен в глобальном объекте.
По соглашениям браузеров все свойства объектов URL реализованы как геттеры и сеттеры на прототипе класса, а не как свойства данных самого объекта. Поэтому, в отличие от legacy urlObject, использование ключевого слова delete для любых свойств объектов URL (например, delete myURL.protocol, delete myURL.pathname и т.д.) не даёт эффекта, но всё равно возвращает true.
new URL(input[, base])¶
input<string>Абсолютный или относительный входной URL для разбора. Еслиinputотносительный, нуженbase. Еслиinputабсолютный,baseигнорируется. Еслиinputне строка, сначала выполняется преобразование в строку.base<string>Базовый URL для разрешения, еслиinputне абсолютный. Еслиbaseне строка, сначала выполняется преобразование в строку.
Создаёт новый объект URL, разбирая input относительно base. Если base передан строкой, он разбирается так же, как new URL(base).
1 2 | |
Конструктор URL доступен как свойство глобального объекта. Его также можно импортировать из встроенного модуля url:
1 2 | |
1 | |
TypeError будет выброшен, если input или base не являются допустимыми URL. Значения при необходимости приводятся к строкам. Например:
1 2 | |
Символы Юникода в имени хоста input автоматически преобразуются в ASCII алгоритмом Punycode.
1 2 | |
Если заранее неизвестно, абсолютный ли input, а base задан, имеет смысл проверить, что origin объекта URL совпадает с ожидаемым.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | |
url.hash¶
- Тип:
<string>
Читает и задаёт фрагмент URL.
1 2 3 4 5 6 7 | |
Недопустимые символы URL в значении, присвоенном свойству hash, подвергаются процентному кодированию. Набор кодируемых символов может слегка отличаться от того, что дают url.parse() и url.format().
url.host¶
- Тип:
<string>
Читает и задаёт часть хоста URL.
1 2 3 4 5 6 7 | |
Недопустимые значения хоста, присвоенные свойству host, игнорируются.
url.hostname¶
- Тип:
<string>
Читает и задаёт имя хоста в URL. Главное отличие url.host и url.hostname: в url.hostname не входит порт.
1 2 3 4 5 6 7 8 9 10 11 12 13 | |
Недопустимые значения имени хоста, присвоенные свойству hostname, игнорируются.
url.href¶
- Тип:
<string>
Читает и задаёт сериализованный URL.
1 2 3 4 5 6 7 | |
Чтение свойства href эквивалентно вызову url.toString().
Присвоение нового значения эквивалентно созданию объекта URL через new URL(value); изменяются все свойства объекта.
Если присвоенное значение не является допустимым URL, выбрасывается TypeError.
url.origin¶
- Тип:
<string>
Возвращает только для чтения сериализацию происхождения (origin) URL.
1 2 3 | |
1 2 3 4 5 6 | |
url.password¶
- Тип:
<string>
Читает и задаёт часть пароля URL.
1 2 3 4 5 6 7 | |
Недопустимые символы URL в значении свойства password кодируются процентным кодированием. Набор кодируемых символов может слегка отличаться от url.parse() и url.format().
url.pathname¶
- Тип:
<string>
Читает и задаёт путь URL.
1 2 3 4 5 6 7 | |
Недопустимые символы URL в значении свойства pathname кодируются процентным кодированием. Набор кодируемых символов может слегка отличаться от url.parse() и url.format().
url.port¶
- Тип:
<string>
Читает и задаёт порт в URL.
Значение порта может быть числом или строкой с числом в диапазоне 0–65535 (включительно). Если задать порт по умолчанию для текущего protocol объекта URL, свойство port станет пустой строкой ('').
Порт может быть пустой строкой; тогда фактический порт определяется схемой:
| протокол | порт |
|---|---|
| "ftp" | 21 |
| "file" | |
| "http" | 80 |
| "https" | 443 |
| "ws" | 80 |
| "wss" | 443 |
При присвоении значения порту оно сначала приводится к строке через .toString().
Если строка недопустима, но начинается с цифр, в port попадает ведущее число. Если число вне указанного диапазона, оно игнорируется.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 | |
Числа с десятичной точкой (в том числе с плавающей запятой и в экспоненциальной записи) не исключение: в порт попадает ведущее число до точки, если оно допустимо:
1 2 3 | |
url.protocol¶
- Тип:
<string>
Читает и задаёт схему (протокол) URL.
1 2 3 4 5 6 7 | |
Недопустимые значения протокола, присвоенные свойству protocol, игнорируются.
Особые схемы¶
WHATWG URL Standard считает ряд схем URL особенными с точки зрения разбора и сериализации. Если URL разобран с особой схемой, свойство url.protocol можно сменить на другую особую схему, но нельзя — на неособую и наоборот.
Например, смена с http на https допустима:
1 2 3 4 | |
Смена с http на гипотетическую схему fish не срабатывает: новая схема не особая.
1 2 3 4 | |
Аналогично, переход с неособой схемы на особую запрещён:
1 2 3 4 | |
По WHATWG URL Standard особыми схемами являются ftp, file, http, https, ws и wss.
url.search¶
- Тип:
<string>
Читает и задаёт сериализованную строку запроса URL.
1 2 3 4 5 6 7 | |
Недопустимые символы URL в значении свойства search кодируются процентным кодированием. Набор кодируемых символов может слегка отличаться от url.parse() и url.format().
url.searchParams¶
- Тип:
<URLSearchParams>
Возвращает объект URLSearchParams с параметрами запроса URL. Свойство только для чтения, но через URLSearchParams можно менять экземпляр URL; чтобы полностью заменить строку запроса, используйте сеттер url.search. Подробнее см. URLSearchParams.
При изменении URL через .searchParams учитывайте: по спецификации WHATWG у URLSearchParams другие правила процентного кодирования. Например, объект URL не кодирует тильду ASCII (~), а URLSearchParams кодирует её всегда:
1 2 3 4 5 6 7 8 | |
url.username¶
- Тип:
<string>
Читает и задаёт имя пользователя в URL.
1 2 3 4 5 6 7 | |
Недопустимые символы URL в значении свойства username кодируются процентным кодированием. Набор кодируемых символов может слегка отличаться от url.parse() и url.format().
url.toString()¶
- Возвращает:
<string>
Метод toString() объекта URL возвращает сериализованный URL; результат совпадает с url.href и url.toJSON().
url.toJSON()¶
- Возвращает:
<string>
Метод toJSON() объекта URL возвращает сериализованный URL; результат совпадает с url.href и url.toString().
Метод вызывается автоматически при сериализации объекта URL через JSON.stringify().
1 2 3 4 5 6 | |
URL.createObjectURL(blob)¶
Добавлено в: v16.7.0
Создаёт строку URL 'blob:nodedata:...', представляющую переданный объект Blob; по ней позже можно получить тот же Blob.
1 2 3 4 5 6 7 8 9 10 11 12 | |
Данные зарегистрированного Blob остаются в памяти, пока не будет вызван URL.revokeObjectURL() для их удаления.
Объекты Blob регистрируются в текущем потоке. При использовании Worker Threads Blob, зарегистрированный в одном воркере, недоступен другим воркерам и главному потоку.
URL.revokeObjectURL(id)¶
Добавлено в: v16.7.0
id<string>Строка URL'blob:nodedata:..., возвращённая предыдущим вызовомURL.createObjectURL().
Удаляет сохранённый Blob с указанным идентификатором. Отзыв незарегистрированного id завершается без ошибки.
URL.canParse(input[, base])¶
input<string>Абсолютный или относительный входной URL. Еслиinputотносительный, нуженbase. Если абсолютный —baseигнорируется. Еслиinputне строка, сначала преобразуется в строку.base<string>Базовый URL, еслиinputне абсолютный. Еслиbaseне строка, сначала преобразуется в строку.- Возвращает:
<boolean>
Проверяет, можно ли разобрать input относительно base в корректный URL.
1 2 3 | |
URL.parse(input[, base])¶
input<string>Абсолютный или относительный входной URL. Еслиinputотносительный, нуженbase. Если абсолютный —baseигнорируется. Еслиinputне строка, сначала преобразуется в строку.base<string>Базовый URL, еслиinputне абсолютный. Еслиbaseне строка, сначала преобразуется в строку.- Возвращает:
<URL>| null
Разбирает строку как URL. Если задан base, он используется для разрешения неабсолютных input. Возвращает null, если параметры нельзя привести к допустимому URL.
Класс: URLPattern¶
Стабильность: 1 - Экспериментальная
API URLPattern сопоставляет URL или их части с шаблоном.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | |
new URLPattern()¶
Создаёт пустой объект URLPattern.
new URLPattern(string[, baseURL][, options])¶
Разбирает string как URL и создаёт по нему новый URLPattern.
Если baseURL не указан, по умолчанию undefined.
В options может быть булево ignoreCase для сопоставления без учёта регистра.
Конструктор может выбросить TypeError при ошибке разбора.
new URLPattern(obj[, baseURL][, options])¶
Разбирает Object как шаблон и создаёт URLPattern. Поля: protocol, username, password, hostname, port, pathname, search, hash или baseURL.
Если baseURL не указан, по умолчанию undefined.
В options может быть булево ignoreCase для сопоставления без учёта регистра.
Конструктор может выбросить TypeError при ошибке разбора.
urlPattern.exec(input[, baseURL])¶
input — строка или объект с частями URL: protocol, username, password, hostname, port, pathname, search, hash или baseURL.
Если baseURL не указан, по умолчанию undefined.
Возвращает объект с ключом inputs (массив аргументов вызова) и ключами компонентов URL с совпавшими input и группами.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | |
urlPattern.test(input[, baseURL])¶
Семантика input и baseURL такая же, как у urlPattern.exec.
Возвращает true, если input соответствует шаблону.
1 2 3 | |
Класс: URLSearchParams¶
API URLSearchParams даёт доступ на чтение и запись к строке запроса URL. Класс можно использовать отдельно — ниже четыре варианта конструктора. Класс также доступен в глобальном объекте.
Интерфейс WHATWG URLSearchParams и модуль querystring решают похожую задачу, но querystring универсальнее: можно настраивать разделители (& и =). Этот API предназначен именно для строк запроса в URL.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | |
new URLSearchParams()¶
Создаёт пустой URLSearchParams.
new URLSearchParams(string)¶
string<string>Строка запроса
Разбирает string как строку запроса и создаёт URLSearchParams. Ведущий '?, если есть, игнорируется.
1 2 3 4 5 6 7 8 9 10 11 | |
new URLSearchParams(obj)¶
obj<Object>Объект с парами ключ–значение
Создаёт URLSearchParams из обычного объекта. Ключи и значения свойств obj приводятся к строкам.
В отличие от querystring, дубликаты ключей в виде массивов не поддерживаются: массивы приводятся через array.toString() — элементы склеиваются запятыми.
1 2 3 4 5 6 7 8 | |
new URLSearchParams(iterable)¶
iterable<Iterable>Итерируемый объект с парами ключ–значение
Создаёт URLSearchParams из итерируемой карты по аналогии с конструктором Map. iterable может быть Array или любым итерируемым объектом, в том числе другим URLSearchParams — тогда получится клон. Элементы — пары ключ–значение; каждая пара может быть любым итерируемым объектом.
Дубликаты ключей допускаются.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | |
urlSearchParams.append(name, value)¶
Добавляет пару имя–значение в строку запроса.
urlSearchParams.delete(name[, value])¶
Если передан value, удаляются все пары с данным name и value.
Если value не передан, удаляются все пары с именем name.
urlSearchParams.entries()¶
- Возвращает:
<Iterator>
Возвращает ES6-итератор по парам имя–значение в запросе. Каждый элемент — массив Array: первый элемент — name, второй — value.
Синоним [urlSearchParams[Symbol.iterator]()][urlSearchParamsSymbol.iterator()].
urlSearchParams.forEach(fn[, thisArg])¶
fn<Function>Вызывается для каждой пары имя–значениеthisArg<Object>Значениеthisпри вызовеfn
Обходит пары имя–значение и вызывает fn для каждой.
1 2 3 4 5 6 7 | |
urlSearchParams.get(name)¶
Возвращает значение первой пары с именем name; если таких пар нет — null.
urlSearchParams.getAll(name)¶
name<string>- Возвращает:
<string[]>
Возвращает значения всех пар с именем name; если таких пар нет — пустой массив.
urlSearchParams.has(name[, value])¶
Проверяет наличие пар по name и необязательному value.
Если value задан, возвращает true, если есть пара с тем же name и value.
Если value не задан, возвращает true, если есть хотя бы одна пара с именем name.
urlSearchParams.keys()¶
- Возвращает:
<Iterator>
Возвращает ES6-итератор по именам в парах имя–значение.
1 2 3 4 5 6 7 | |
urlSearchParams.set(name, value)¶
Задаёт для name значение value. Если уже есть пары с именем name, у первой пары меняется значение на value, остальные с тем же именем удаляются; иначе добавляется новая пара.
1 2 3 4 5 6 7 8 9 10 11 | |
urlSearchParams.size¶
Общее число записей параметров.
urlSearchParams.sort()¶
Сортирует пары имя–значение на месте по имени. Используется устойчивый алгоритм сортировки, порядок пар с одинаковым именем сохраняется.
Метод полезен, в частности, для повышения попаданий в кэш.
1 2 3 4 | |
urlSearchParams.toString()¶
- Возвращает:
<string>
Возвращает параметры запроса в виде строки с необходимым процентным кодированием.
urlSearchParams.values()¶
- Возвращает:
<Iterator>
Возвращает ES6-итератор по значениям в парах имя–значение.
urlSearchParams[Symbol.iterator]()¶
- Возвращает:
<Iterator>
Возвращает ES6-итератор по парам имя–значение в строке запроса. Каждый элемент — массив Array: первый элемент — name, второй — value.
Синоним urlSearchParams.entries().
1 2 3 4 5 6 7 | |
url.domainToASCII(domain)¶
Возвращает ASCII-представление domain в Punycode. Если домен недопустим — пустая строка.
Обратная операция к url.domainToUnicode().
1 2 3 4 5 6 7 8 | |
1 2 3 4 5 6 7 8 | |
url.domainToUnicode(domain)¶
Возвращает Unicode-представление domain. Если домен недопустим — пустая строка.
Обратная операция к url.domainToASCII().
1 2 3 4 5 6 7 8 | |
1 2 3 4 5 6 7 8 | |
url.fileURLToPath(url[, options])¶
Добавлено в: v10.12.0
url<URL>|<string>Строка file URL или объект URL для преобразования в путь.options<Object>windows<boolean>| undefinedtrue— путь как в Windows,false— POSIX,undefined— по умолчанию для системы. По умолчанию:undefined.- Возвращает:
<string>Полностью разрешённый путь к файлу для текущей платформы.
Функция корректно декодирует процентное кодирование и возвращает допустимую абсолютную строку пути на разных платформах.
Безопасность:
Декодируются процентно закодированные символы, в том числе сегменты с точками (%2e → ., %2e%2e → ..), затем путь нормализуется. Закодированные обходы каталога (например %2e%2e) превращаются в реальный обход, при этом закодированные слэши (%2F, %5C) по-прежнему отклоняются.
Нельзя полагаться только на fileURLToPath() против атак с обходом каталога. Всегда явно проверяйте полученный путь и границы допустимых каталогов перед операциями с файловой системой.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | |
1 2 3 4 5 6 7 8 9 10 11 12 | |
url.fileURLToPathBuffer(url[, options])¶
url<URL>|<string>Строка file URL или объект URL для преобразования в путь.options<Object>windows<boolean>| undefinedtrue— путь как в Windows,false— POSIX,undefined— по умолчанию для системы. По умолчанию:undefined.- Возвращает:
<Buffer>Полностью разрешённый путь к файлу в виде Buffer.
Как url.fileURLToPath(...), но возвращается Buffer вместо строки. Удобно, если в URL есть процентно закодированные фрагменты, не являющиеся корректным UTF-8.
Безопасность:
Те же риски, что у url.fileURLToPath(): декодирование и нормализация пути. Нельзя полагаться только на эту функцию против атак с обходом каталога. Проверяйте полученный Buffer перед использованием в ФС.
url.format(URL[, options])¶
URL<URL>Объект WHATWG URLoptions<Object>auth<boolean>true— включать имя пользователя и пароль в строку, иначе нет. По умолчанию:true.fragment<boolean>true— включать фрагмент. По умолчанию:true.search<boolean>true— включать строку запроса. По умолчанию:true.unicode<boolean>true— символы Юникода в хосте кодируются напрямую, а не через Punycode. По умолчанию:false.- Возвращает:
<string>
Настраиваемая сериализация объекта WHATWG URL в строку.
У объекта URL есть toString() и href, но без настроек. url.format(URL[, options]) даёт базовую настройку вывода.
1 2 3 4 5 6 7 8 9 10 11 | |
1 2 3 4 5 6 7 8 9 10 11 | |
url.pathToFileURL(path[, options])¶
Добавлено в: v10.12.0
path<string>Путь для преобразования в file URL.options<Object>windows<boolean>| undefinedtrue— путь как в Windows,false— POSIX,undefined— по умолчанию для системы. По умолчанию:undefined.- Возвращает:
<URL>Объект file URL.
Функция разрешает path в абсолютный путь и корректно кодирует управляющие символы при преобразовании в file URL.
1 2 3 4 5 6 7 | |
1 2 3 4 5 6 7 8 9 10 11 | |
url.urlToHttpOptions(url)¶
url<URL>Объект WHATWG URL для преобразования в объект опций.- Возвращает:
<Object>Объект опций protocol<string>Протокол.hostname<string>Доменное имя или IP сервера.hash<string>Фрагмент URL.search<string>Сериализованная строка запроса.pathname<string>Путь URL.path<string>Путь запроса; при наличии строки запроса она включена. Например'/index.html?page=12'. Исключение при недопустимых символах в пути (сейчас отклоняются пробелы; правила могут измениться).href<string>Сериализованный URL.port<number>Порт удалённого сервера.auth<string>Basic-авторизация в виде'user:password'для заголовка Authorization.
Преобразует объект URL в обычный объект опций для http.request() и https.request().
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | |
Унаследованный API URL¶
Стабильность: 3 - Устаревшее
Предпочитайте WHATWG URL API.
Устаревший urlObject¶
Унаследованный urlObject (require('node:url').Url или import { Url } from 'node:url') создаётся и возвращается функцией url.parse().
urlObject.auth¶
Свойство auth — часть URL с именем пользователя и паролем (userinfo). Эта подстрока идёт после protocol и двойного слэша (если есть) и перед компонентом host, отделённая символом @. Строка — либо только имя пользователя, либо имя:пароль.
Например: 'user:pass'.
urlObject.hash¶
Свойство hash — идентификатор фрагмента URL, включая ведущий #.
Например: '#hash'.
urlObject.host¶
Свойство host — вся часть хоста в нижнем регистре, включая port, если указан.
Например: 'sub.example.com:8080'.
urlObject.hostname¶
Свойство hostname — имя хоста в нижнем регистре из компонента host без port.
Например: 'sub.example.com'.
urlObject.href¶
Свойство href — полная строка URL после разбора; компоненты protocol и host приведены к нижнему регистру.
Например: 'http://user:[email protected]:8080/p/a/t/h?query=string#hash'.
urlObject.path¶
Свойство path — конкатенация pathname и search.
Например: '/p/a/t/h?query=string'.
Декодирование path не выполняется.
urlObject.pathname¶
Свойство pathname — весь путь URL: после host (включая port) и до начала query или hash, разделители — ASCII ? или #.
Например: '/p/a/t/h'.
Декодирование строки пути не выполняется.
urlObject.port¶
Свойство port — числовая часть порта компонента host.
Например: '8080'.
urlObject.protocol¶
Свойство protocol — схема протокола URL в нижнем регистре.
Например: 'http:'.
urlObject.query¶
Свойство query — либо строка запроса без ведущего ASCII ?, либо объект из метода parse() модуля querystring. Тип задаётся аргументом parseQueryString в url.parse().
Например: 'query=string' или {'query': 'string'}.
Если это строка, декодирование не выполняется; если объект — декодируются и ключи, и значения.
urlObject.search¶
Свойство search — вся «строка запроса» URL, включая ведущий ASCII ?.
Например: '?query=string'.
Декодирование строки запроса не выполняется.
urlObject.slashes¶
Свойство slashes — boolean: true, если после двоеточия в protocol нужны два ASCII-слэша (/).
url.format(urlObject)¶
Добавлено в: v0.1.25
urlObject<Object>Объект URL (как изurl.parse()или собранный вручную).
Метод url.format() возвращает отформатированную строку URL из urlObject.
1 2 3 4 5 6 7 8 9 10 11 12 | |
Если urlObject не объект и не строка, url.format() выбросит TypeError.
Форматирование выполняется так:
- Создаётся пустая строка
result. - Если
urlObject.protocol— строка, она добавляется вresultкак есть. - Иначе, если
urlObject.protocolнеundefinedи не строка, выбрасываетсяError. - Для строковых значений
urlObject.protocol, которые не заканчиваются ASCII-двоеточием (:), кresultдобавляется литерал:. - Если выполняется одно из условий, к
resultдобавляется литерал//: - свойство
urlObject.slashesистинно; urlObject.protocolначинается сhttp,https,ftp,gopherилиfile;- Если
urlObject.authистинно иurlObject.hostилиurlObject.hostnameнеundefined, значениеurlObject.authприводится к строке, добавляется кresult, затем литерал@. - Если
urlObject.host—undefined: - если
urlObject.hostname— строка, она добавляется кresult; - иначе, если
urlObject.hostnameнеundefinedи не строка, выбрасываетсяError; - если
urlObject.portистинно иurlObject.hostnameнеundefined: кresultдобавляется:и строковое значениеurlObject.port. - Иначе, если
urlObject.hostистинно, его значение приводится к строке и добавляется кresult. - Если
urlObject.pathname— непустая строка: - если
urlObject.pathnameне начинается с ASCII/, кresultдобавляется'/'; - затем добавляется значение
urlObject.pathname. - Иначе, если
urlObject.pathnameнеundefinedи не строка, выбрасываетсяError. - Если
urlObject.search—undefined, аurlObject.query— объект, кresultдобавляется?и результат вызоваstringify()модуляquerystringдляurlObject.query. - Иначе, если
urlObject.search— строка: - если она не начинается с ASCII
?, кresultдобавляется?; - затем добавляется значение
urlObject.search. - Иначе, если
urlObject.searchнеundefinedи не строка, выбрасываетсяError. - Если
urlObject.hash— строка: - если она не начинается с ASCII
#, кresultдобавляется#; - затем добавляется значение
urlObject.hash. - Иначе, если
urlObject.hashнеundefinedи не строка, выбрасываетсяError. - Возвращается
result.
Доступна автоматическая миграция (исходники).
1 | |
url.format(urlString)¶
Добавлено в: v0.1.25
Стабильность: 0 - Устарело
Предпочитайте WHATWG URL API.
urlString<string>Строка, которая будет передана вurl.parse(), затем отформатирована.
url.format(urlString) — сокращение для url.format(url.parse(urlString)).
Внутри вызывается устаревший url.parse(), поэтому передача строки в url.format() сама по себе устарела.
Канонизацию строки URL лучше делать через WHATWG URL API: new URL(...) и url.toString().
1 2 3 4 5 6 | |
1 2 3 4 5 6 | |
url.parse(urlString[, parseQueryString[, slashesDenoteHost]])¶
Добавлено в: v0.1.25
Стабильность: 0 - Устарело
Предпочитайте WHATWG URL API.
urlString<string>Строка URL для разбора.parseQueryString<boolean>Еслиtrue, свойствоqueryвсегда будет объектом из методаparse()модуляquerystring. Еслиfalse— неразобранная строка. По умолчанию:false.slashesDenoteHost<boolean>Еслиtrue, первый фрагмент после литерала//до следующего/считаетсяhost. Например, для//foo/barполучится{host: 'foo', pathname: '/bar'}, а не{pathname: '//foo/bar'}. По умолчанию:false.
Метод url.parse() разбирает строку URL и возвращает объект URL.
Если urlString не строка, выбрасывается TypeError.
Если есть auth, но его нельзя декодировать — URIError.
url.parse() использует мягкий нестандартный алгоритм; возможны уязвимости вроде подмены имени хоста и ошибок с учётными данными. Не применяйте к недоверенным данным. Для CVE по url.parse() не выпускаются. Используйте WHATWG URL, например:
1 2 3 4 5 | |
Пример выше предполагает, что от обратного прокси передаются корректные заголовки. Без обратного прокси используйте вариант ниже:
1 2 3 | |
Доступна автоматическая миграция (исходники).
1 | |
url.resolve(from, to)¶
Добавлено в: v0.1.25
Стабильность: 0 - Устарело
Предпочитайте WHATWG URL API.
Метод url.resolve() разрешает целевой URL относительно базового примерно так же, как браузер для <a href>.
1 2 3 4 | |
Внутри вызывается устаревший url.parse(), поэтому url.resolve() устарел.
Тот же результат через WHATWG URL API:
1 2 3 4 5 6 7 8 9 10 11 12 13 | |
Процентное кодирование в URL¶
В URL допустим только определённый набор символов. Всё, что вне него, нужно кодировать. Способ и набор символов зависят от позиции символа в структуре URL.
Унаследованный API¶
В унаследованном API пробелы (' ') и перечисленные ниже символы в свойствах объектов URL экранируются автоматически:
1 | |
Например, пробел ASCII (' ') кодируется как %20. Прямой слэш ASCII (/) — как %3C.
API WHATWG¶
WHATWG URL Standard задаёт более выборочный и детальный набор кодируемых символов, чем унаследованный API.
Алгоритм WHATWG определяет четыре «набора процентного кодирования»:
-
C0 control percent-encode set — кодовые точки U+0000–U+001F (включительно) и все выше U+007E (~).
-
fragment percent-encode set — включает C0 control percent-encode set и точки U+0020 SPACE, U+0022 ("), U+003C (<), U+003E (>), U+0060 (`).
-
path percent-encode set — включает C0 control percent-encode set и точки U+0020 SPACE, U+0022 ("), U+0023 (#), U+003C (<), U+003E (>), U+003F (?), U+0060 (`), U+007B ({), U+007D (}).
-
userinfo encode set — включает path percent-encode set и точки U+002F (/), U+003A (:), U+003B (;), U+003D (=), U+0040 (@), U+005B ([)–U+005E(^), U+007C (|).
Набор userinfo percent-encode set используется для имени пользователя и пароля в URL. path percent-encode set — для пути большинства URL. fragment percent-encode set — для фрагментов. C0 control percent-encode set — для хоста и пути в особых случаях и в прочих ситуациях по правилам стандарта.
Небуквенные символы в имени хоста кодируются через Punycode. Имя хоста может содержать и Punycode, и процентное кодирование:
1 2 3 4 5 | |