URL¶
Стабильность: 2 – Стабильная
АПИ является удовлетворительным. Совместимость с NPM имеет высший приоритет и не будет нарушена кроме случаев явной необходимости.
Модуль node:url
предоставляет утилиты для разрешения и разбора URL. Доступ к нему можно получить, используя:
1 |
|
1 |
|
Строки URL и объекты URL¶
Строка URL - это структурированная строка, содержащая несколько значимых компонентов. При разборе возвращается объект URL, содержащий свойства для каждого из этих компонентов.
Модуль node:url
предоставляет два API для работы с URL: устаревший API, специфичный для Node.js, и более новый API, реализующий тот же WHATWG URL Standard, который используется веб-браузерами.
Сравнение между WHATWG и унаследованным API представлено ниже. Над URL 'https://user:pass@sub.example.com:8080/p/a/t/h?query=string#hash'
показаны свойства объекта, возвращаемого традиционным url.parse()
. Ниже показаны свойства объекта WHATWG URL
.
Свойство origin
WHATWG URL включает 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 3 |
|
Разбор строки URL с помощью унаследованного API:
1 2 3 4 |
|
1 2 3 4 |
|
Конструирование URL из составных частей и получение сконструированной строки¶
Можно построить URL WHATWG из составных частей, используя либо параметры свойств, либо литеральную строку шаблона:
1 2 3 4 |
|
1 2 3 4 5 6 |
|
Чтобы получить построенную строку URL, используйте аксессор свойства href
:
1 |
|
WHATWG URL API¶
Класс: URL
¶
Совместимый с браузером класс URL
, реализованный в соответствии со стандартом URL WHATWG. Примеры разобранных URL можно найти в самом Стандарте. Класс URL
также доступен в глобальном объекте.
В соответствии с традициями браузеров, все свойства объектов URL
реализованы как геттеры и сеттеры прототипа класса, а не как свойства данных самого объекта. Таким образом, в отличие от legacy urlObject
s, использование ключевого слова delete
для любых свойств объектов URL
(например, delete myURL.protocol
, delete myURL.pathname
и т.д.) не имеет никакого эффекта, но все равно вернет true
.
новый 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 3 4 |
|
Символы юникода, появляющиеся в имени хоста input
, будут автоматически преобразованы в ASCII с помощью алгоритма Punycode.
1 2 |
|
Эта возможность доступна только в том случае, если исполняемый файл node
был скомпилирован с включенным ICU. В противном случае доменные имена передаются без изменений.
В случаях, когда заранее неизвестно, является ли input
абсолютным URL и предоставляется base
, рекомендуется проверить, что origin
объекта 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 31 32 |
|
url.hash
¶
Получает и задает фрагмент части URL.
1 2 3 4 5 6 7 |
|
Недопустимые символы URL, включенные в значение, присвоенное свойству hash
, кодируются percent-encoded. Выбор символов для кодирования может несколько отличаться от того, что выдают методы url.parse()
и url.format()
.
url.host
¶
Получает и устанавливает часть URL, содержащую хост.
1 2 3 4 5 6 7 |
|
Неверные значения хоста, присвоенные свойству host
, игнорируются.
url.hostname
¶
Получает и устанавливает часть имени хоста в URL. Ключевое различие между url.host
и url.hostname
заключается в том, что url.hostname
не включает порт.
1 2 3 4 5 6 7 8 9 10 11 12 13 |
|
Неверные значения имени хоста, присвоенные свойству hostname
, игнорируются.
url.href
¶
Получает и устанавливает сериализованный URL.
1 2 3 4 5 6 7 |
|
Получение значения свойства href
эквивалентно вызову url.toString()
.
Установка значения этого свойства на новое значение эквивалентна созданию нового объекта URL
с помощью new URL(value)
. Каждое из свойств объекта URL
будет изменено.
Если значение, присвоенное свойству href
, не является действительным URL, будет выдана ошибка TypeError
.
url.origin
¶
Получает доступную только для чтения сериализацию происхождения URL.
1 2 3 |
|
1 2 3 4 5 6 |
|
url.password
¶
Получает и устанавливает часть URL, содержащую пароль.
1 2 3 4 5 6 7 |
|
Недопустимые символы URL, включенные в значение, присвоенное свойству password
, кодируются percent-encoded. Выбор символов для кодирования может несколько отличаться от того, что выдают методы url.parse()
и url.format()
.
url.pathname
¶
Получает и устанавливает часть пути URL.
1 2 3 4 5 6 7 |
|
Недопустимые символы URL, включенные в значение, присвоенное свойству pathname
, percent-encoded. Выбор символов для кодирования может несколько отличаться от того, что выдают методы url.parse()
и url.format()
.
url.port
¶
Получает и устанавливает порт части URL.
Значение порта может быть числом или строкой, содержащей число в диапазоне от 0
до 65535
(включительно). Установка значения порта по умолчанию для объектов URL
, заданных protocol
, приведет к тому, что значение port
станет пустой строкой (''
).
Значение порта может быть пустой строкой, в этом случае порт зависит от протокола/схемы:
протокол | port |
---|---|
"ftp" | 21 |
"файл" | |
"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 |
|
Числа, содержащие десятичную точку, такие как числа с плавающей точкой или числа в научной нотации, не являются исключением из этого правила. Ведущие числа до десятичной точки будут установлены в качестве порта URL, если они действительны:
1 2 3 |
|
url.protocol
¶
Получает и устанавливает протокольную часть URL.
1 2 3 4 5 6 7 |
|
Неверные значения протокола URL, присвоенные свойству protocol
, игнорируются.
Специальные схемы¶
В WHATWG URL Standard несколько схем протоколов URL считаются специальными с точки зрения того, как они анализируются и сериализуются. Когда URL анализируется с использованием одного из этих специальных протоколов, свойство url.protocol
может быть изменено на другой специальный протокол, но не может быть изменено на неспециальный протокол, и наоборот.
Например, изменение http
на https
работает:
1 2 3 4 |
|
Однако переход от протокола http
к гипотетическому протоколу fish
не приводит к этому, поскольку новый протокол не является специальным.
1 2 3 4 |
|
Аналогично, переход от неспециального протокола к специальному также не разрешен:
1 2 3 4 |
|
Согласно стандарту URL WHATWG, специальными схемами протоколов являются ftp
, file
, http
, https
, ws
и wss
.
url.search
¶
Получает и задает сериализованный запрос части URL.
1 2 3 4 5 6 7 |
|
Любые недопустимые символы URL, появляющиеся в значении, присвоенном свойству search
, будут percent-encoded. Выбор символов для кодирования может несколько отличаться от того, что выдают методы url.parse()
и url.format()
.
url.searchParams
¶
- {URLSearchParams}
Получает объект URLSearchParams
, представляющий параметры запроса URL. Это свойство доступно только для чтения, но объект URLSearchParams
, который оно предоставляет, может быть использован для изменения экземпляра URL; чтобы заменить все параметры запроса URL, используйте сеттер url.search
. Подробнее см. документацию по URLSearchParams
.
Будьте осторожны при использовании .searchParams
для изменения URL
, поскольку, согласно спецификации WHATWG, объект URLSearchParams
использует различные правила для определения того, какие символы следует кодировать. Например, объект URL
не будет кодировать в процентах символ ASCII тильда (~
), в то время как URLSearchParams
всегда будет его кодировать:
1 2 3 4 5 6 7 8 |
|
url.username
¶
Получает и устанавливает часть имени пользователя URL.
1 2 3 4 5 6 7 |
|
Любые недопустимые символы URL, появляющиеся в значении, присвоенном свойству username
, будут percent-encoded. Выбор символов для процентного кодирования может несколько отличаться от того, что выдают методы 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)
¶
Стабильность: 1 – Экспериментальная
Экспериментальный
Создает URL-строку 'blob:nodedata:...'
, которая представляет данный объект <Blob>
и может быть использована для получения Blob
позже.
1 2 3 4 5 6 7 8 9 |
|
Данные, хранящиеся в зарегистрированном <Blob>
, будут оставаться в памяти до тех пор, пока не будет вызвана функция URL.revokeObjectURL()
для их удаления.
Объекты Blob
регистрируются в текущем потоке. При использовании рабочих потоков объекты Blob
, зарегистрированные в одном рабочем потоке, будут недоступны для других рабочих или главного потока.
URL.revokeObjectURL(id)
¶
Стабильность: 1 – Экспериментальная
Экспериментальный
id
<string>
Строка URL'blob:nodedata:...
, возвращенная предыдущим вызовомURL.createObjectURL()
.
Удаляет сохраненный <Blob>
, идентифицированный заданным ID. Попытка отозвать ID, который не зарегистрирован, завершится молчаливым отказом.
Класс: URLSearchParams
¶
API URLSearchParams
предоставляет доступ на чтение и запись к запросу URL
. Класс URLSearchParams
также может быть использован отдельно с помощью одного из четырех следующих конструкторов. Класс URLSearchParams
также доступен в глобальном объекте.
Интерфейс 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 31 32 |
|
new URLSearchParams()
¶
Создает новый пустой объект URLSearchParams
.
новый 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
или любым итерируемым объектом. Это означает, что iterable
может быть другим URLSearchParams
, в этом случае конструктор просто создаст клон предоставленного URLSearchParams
. Элементы iterable
представляют собой пары ключ-значение и сами могут быть любыми объектами итерабельного типа.
Допускается дублирование ключей.
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 |
|
urlSearchParams.append(name, value)
¶
Добавляет новую пару имя-значение к строке запроса.
urlSearchParams.delete(name)
¶
name
<string>
Удаляет все пары имя-значение, имя которых равно name
.
urlSearchParams.entries()
¶
- Возвращает:
<Iterator>
Возвращает ES6 итератор
по каждой из пар имя-значение в запросе. Каждый элемент итератора представляет собой JavaScript массив
. Первый элемент массива
- это имя
, второй элемент массива
- это значение
.
Псевдоним для urlSearchParams[@@iterator]()
.
urlSearchParams.forEach(fn[, thisArg])
¶
fn
<Function>
Вызывается для каждой пары имя-значение в запросеthisArg
<Object>
Используется в качестве значенияthis
при вызовеfn
.
Итерация по каждой паре имя-значение в запросе и вызов заданной функции.
1 2 3 4 5 6 7 8 9 10 11 |
|
urlSearchParams.get(name)
¶
Возвращает значение первой пары имя-значение, имя которой равно name
. Если таких пар нет, возвращается null
.
urlSearchParams.getAll(name)
¶
name
<string>
- Возвращает:
<string[]>
Возвращает значения всех пар имя-значение, имя которых равно name
. Если таких пар нет, возвращается пустой массив.
urlSearchParams.has(name)
¶
Возвращает true
, если существует хотя бы одна пара имя-значение, имя которой равно name
.
urlSearchParams.keys()
¶
- Возвращает:
<Iterator>
Возвращает ES6 итератор
над именами каждой пары имя-значение.
1 2 3 4 5 6 7 |
|
urlSearchParams.set(name, value)
¶
Устанавливает значение в объекте URLSearchParams
, связанном с name
, в value
. Если существуют уже существующие пары имя-значение, имена которых равны name
, установите значение первой такой пары в value
и удалите все остальные. Если нет, добавьте пару имя-значение к строке запроса.
1 2 3 4 5 6 7 8 9 10 11 |
|
urlSearchParams.size
¶
Общее количество записей параметров.
urlSearchParams.sort()
¶
Сортирует все существующие пары имя-значение на месте по их именам. Сортировка выполняется с помощью стабильного алгоритма сортировки, поэтому относительный порядок между парами имя-значение с одинаковыми именами сохраняется.
Этот метод может быть использован, в частности, для увеличения количества просмотров кэша.
1 2 3 4 5 6 |
|
urlSearchParams.toString()
¶
- Возвращает:
<string>
Возвращает параметры поиска, сериализованные в виде строки, с кодировкой символов в процентах, где это необходимо.
urlSearchParams.values()
¶
- Возвращает:
<Iterator>
Возвращает ES6 итератор
над значениями каждой пары имя-значение.
urlSearchParams[Symbol.iterator]()
¶
- Возвращает:
<Iterator>
Возвращает ES6 Итератор
по каждой из пар имя-значение в строке запроса. Каждый элемент итератора представляет собой JavaScript массив
. Первый элемент массива
- это имя
, второй элемент массива
- это значение
.
Псевдоним для urlSearchParams.entries()
.
1 2 3 4 5 6 7 |
|
url.domainToASCII(domain)
¶
Возвращает Punycode ASCII сериализацию домена
. Если domain
является недопустимым доменом, возвращается пустая строка.
Выполняется обратная операция по отношению к url.domainToUnicode()
.
Эта функция доступна, только если исполняемый файл node
был скомпилирован с включенным ICU. В противном случае доменные имена передаются без изменений.
1 2 3 4 5 6 7 8 |
|
1 2 3 4 5 6 7 8 |
|
url.domainToUnicode(domain)
¶
Возвращает Unicode сериализацию домена
. Если domain
является недопустимым доменом, возвращается пустая строка.
Выполняется обратная операция по отношению к url.domainToASCII()
.
Эта функция доступна, только если исполняемый файл node
был скомпилирован с включенным ICU. В противном случае доменные имена передаются без изменений.
1 2 3 4 5 6 7 8 |
|
1 2 3 4 5 6 7 8 |
|
url.fileURLToPath(url)
¶
url
{URL | string} Строка URL файла или объект URL для преобразования в путь.- Возвращает:
<string>
Полностью преобразованный специфичный для платформы Node.js путь к файлу.
Эта функция обеспечивает правильное декодирование символов с процентным кодированием, а также обеспечивает кроссплатформенную корректную строку абсолютного пути.
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.format(URL[, options])
¶
URL
<URL>
объект WHATWG URLoptions
<Object>
auth
<boolean>
true
, если сериализованная строка URL должна включать имя пользователя и пароль,false
в противном случае. По умолчанию:true
.фрагмент
<boolean>
true
, если сериализованная строка URL должна включать фрагмент,false
в противном случае. По умолчанию:true
.search
<boolean>
true
, если сериализованная строка URL должна включать поисковый запрос,false
в противном случае. По умолчанию:true
.unicode
<boolean>
true
, если символы Unicode, появляющиеся в компоненте host строки URL, должны быть закодированы напрямую, а не в кодировке Punycode. По умолчанию:false
.
- Возвращает:
<string>
Возвращает настраиваемую сериализацию представления URL String
объекта WHATWG URL.
Объект URL имеет метод toString()
и свойство href
, которые возвращают строковую сериализацию URL. Однако они никак не настраиваются. Метод url.format(URL[, options])
позволяет выполнить базовую настройку вывода.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
|
url.pathToFileURL(path)
¶
Эта функция гарантирует, что path
разрешается абсолютно, и что управляющие символы URL правильно кодируются при преобразовании в 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>
Сериализованный запрос части URL.pathname
<string>
Часть URL, содержащая путь.path
<string>
Путь запроса. Должен включать строку запроса, если таковая имеется. Например,'/index.htm?page=12'
. Исключение возникает, если путь запроса содержит недопустимые символы. В настоящее время отклоняются только пробелы, но в будущем это может измениться.href
<string>
Сериализованный URL.port
<number>
Порт удаленного сервера.auth
<string>
Базовая аутентификация, т.е.'user:password'
для вычисления заголовка Authorization.
Эта служебная функция преобразует объект URL в обычный объект options, как ожидается API 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 |
|
Legacy URL API¶
Стабильность: 3 – Закрыто
Устаревший: Вместо него используйте API URL WHATWG.
Legacy urlObject
¶
Стабильность: 3 – Закрыто
Устаревший: Вместо этого используйте WHATWG URL API.
Унаследованный 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
- это полная часть URL, написанная строчными буквами, включая port
, если он указан.
Например: 'sub.example.com:8080'
.
urlObject.hostname
¶
Свойство hostname
- это часть имени хоста, написанная строчными буквами в компоненте host
без включенного port
.
Например: 'sub.example.com'
.
urlObject.href
¶
Свойство href
- это полная строка URL, которая была разобрана с компонентами protocol
и host
, преобразованными в нижний регистр.
Например: 'http://user:pass@sub.example.com:8080/p/a/t/h?query=string#hash'
.
urlObject.path
¶
Свойство path
представляет собой конкатенацию компонентов pathname
и search
.
Например: '/p/a/t/h?query=string'
.
Декодирование пути
не производится.
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
. Является ли свойство query
строкой или объектом, определяется аргументом parseQueryString
, переданным в url.parse()
.
Например: 'query=string'
или {'query': 'string'}
.
Если запрос возвращается как строка, то декодирование строки запроса не производится. Если запрос возвращается как объект, то декодируются и ключи, и значения.
urlObject.search
¶
Свойство search
состоит из всей части URL "строка запроса", включая ведущий символ ASCII вопросительный знак (?
).
Например: '?query=string'
.
Декодирование строки запроса не производится.
urlObject.slashes
¶
Свойство slashes
представляет собой булево
со значением true
, если после двоеточия в протоколе
требуется два ASCII символа прямой косой черты (/
).
url.format(urlObject)
¶
Стабильность: 3 – Закрыто
Наследие: Вместо этого используйте WHATWG URL API.
urlObject
{Object|string} Объект URL (возвращенный функциейurl.parse()
или построенный иным образом). Если это строка, она преобразуется в объект путем передачи вurl.parse()
.
Метод url.format()
возвращает отформатированную строку URL, полученную из urlObject
.
1 2 3 4 5 6 7 8 9 10 11 12 13 |
|
Если 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
преобразуется в строку и добавляется кresult
.
- Буквальная строка
- Если
- В противном случае, если значение свойства
urlObject.host
истинно, значениеurlObject.host
принудительно преобразуется в строку и добавляется кresult
. - Если свойство
urlObject.pathname
является строкой, которая не является пустой строкой:- Если
urlObject.pathname
не начинается с прямой косой черты ASCII (/
), то кresult
добавляется литеральная строка'/'
. - Значение
urlObject.pathname
добавляется кresult
.
- Если
- В противном случае, если
urlObject.pathname
не являетсяundefined
и не является строкой, выдаетсяError
. - Если свойство
urlObject.search
являетсяundefined
и если свойствоurlObject.query
являетсяObject
, кresult
добавляется литеральная строка?
, за которой следует результат вызова методаstringify()
модуляquerystring
, передающего значениеurlObject.query
. - Иначе, если
urlObject.search
является строкой:- Если значение
urlObject.search
не начинается с символа ASCII вопросительного знака (?
), то кresult
добавляется литеральная строка?
. - Значение
urlObject.search
добавляется кresult
.
- Если значение
- В противном случае, если
urlObject.search
не являетсяundefined
и не является строкой, будет выдана ошибкаError
. - Если свойство
urlObject.hash
является строкой:- Если значение
urlObject.hash
не начинается с символа ASCII hash (#
), кresult
добавляется литеральная строка#
. - Значение
urlObject.hash
добавляется кresult
.
- Если значение
- В противном случае, если свойство
urlObject.hash
не являетсяundefined
и не является строкой, выдается ошибкаError
. - Возвращается
result
.
url.parse(urlString[, parseQueryString[, slashesDenoteHost]])
¶
Стабильность: 0 – устарело или набрало много негативных отзывов
Вместо этого используйте WHATWG URL API.
urlString
<string>
Строка URL для разбора.parseQueryString
<boolean>
Еслиtrue
, свойствоquery
всегда будет установлено в объект, возвращаемый методомparse()
модуляquerystring
. Еслиfalse
, свойствоquery
возвращаемого объекта URL будет представлять собой непарсированную, не декодированную строку. По умолчанию:false
.slashesDenoteHost
<boolean>
Еслиtrue
, то первая лексема после литеральной строки///
и перед следующей/
будет интерпретироваться какhost
. Например, если задано//foo/bar
, результатом будет{host: 'foo', pathname: '/bar'}
, а не{pathname: '//foo/bar'}
. По умолчанию:false
.
Метод url.parse()
принимает строку URL, разбирает ее и возвращает объект URL.
Если urlString
не является строкой, возникает TypeError
.
Ошибка URIError
возникает, если свойство auth
присутствует, но не может быть декодировано.
url.parse()
использует мягкий, нестандартный алгоритм для разбора строк URL. Он подвержен таким проблемам безопасности, как подмена имени хоста и некорректная обработка имен пользователей и паролей. Не используйте с недоверенными входными данными. CVE не выдаются для уязвимостей url.parse()
. Вместо этого используйте API WHATWG URL.
url.resolve(from, to)
¶
Стабильность: 3 – Закрыто
Наследие: Вместо этого используйте WHATWG URL API.
from
<string>
Базовый URL, который следует использовать, еслиto
- относительный URL.to
<string>
Целевой URL для преобразования.
Метод url.resolve()
разрешает целевой URL относительно базового URL аналогично тому, как веб-браузер разрешает тег якоря.
1 2 3 4 |
|
Для достижения того же результата с помощью WHATWG URL API:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
|
Процентное кодирование в URL-адресах¶
URL-адреса могут содержать только определенный диапазон символов. Любой символ, выходящий за пределы этого диапазона, должен быть закодирован. Как кодировать такие символы и какие символы кодировать, полностью зависит от того, где символ находится в структуре URL.
Legacy API¶
В Legacy API пробелы (' '
) и следующие символы будут автоматически экранироваться в свойствах объектов URL:
1 |
|
Например, символ пробела ASCII (' '
) кодируется как %20
. Символ прямой косой черты ASCII (/
) кодируется как %3C
.
WHATWG API¶
В WHATWG URL Standard используется более избирательный и тонкий подход к выбору кодированных символов, чем в Legacy API.
Алгоритм WHATWG определяет четыре "набора процентного кодирования", которые описывают диапазоны символов, которые должны быть закодированы в процентах:
- Набор C0 control percent-encode set включает кодовые точки в диапазоне от U+0000 до U+001F (включительно) и все кодовые точки больше U+007E.
- Набор фрагментных процентов кодирования включает набор C0 управляющих процентов кодирования и кодовые точки U+0020, U+0022, U+003C, U+003E и U+0060.
- Набор кодов path percent-encode set включает набор кодов C0 control percent-encode set и кодовые точки U+0020, U+0022, U+0023, U+003C, U+003E, U+003F, U+0060, U+007B и U+007D.
- Набор кодов userinfo включает набор кодов path percent-encode set и кодовые точки U+002F, U+003A, U+003B, U+003D, U+0040, U+005B, U+005C, U+005D, U+005E и U+007C.
Набор кодировок userinfo percent-encode set используется исключительно для имени пользователя и паролей, закодированных в URL. Набор кодировок path percent-encode set используется для пути большинства URL. Набор fragment percent-encode set используется для фрагментов URL. Набор кодировок C0 control percent-encode set используется для хоста и пути при определенных условиях, а также во всех остальных случаях.
Когда в имени хоста появляются символы, не относящиеся к кодировке ASCII, имя хоста кодируется с использованием алгоритма Punycode. Заметим, однако, что имя хоста может содержать как кодированные Punycode, так и кодированные процентами символы:
1 2 3 4 5 |
|