Spec-Zone.ru › Node.js 22 LTS

URL

Стабильность: 2 - Стабильный

Исходный код: lib/url.js

Модуль node:url предоставляет утилиты для разрешения и разбора URL. К нему можно обратиться с помощью:

Модули JavaScript
import url from 'node:url';
CommonJS
const url = require('node:url');

Строки URL и объекты URL

Строка URL — это структурированная строка, содержащая несколько значимых компонентов. При разборе возвращается объект URL, содержащий свойства для каждого из этих компонентов.

Модуль node:url предоставляет два API для работы с URL: устаревший API, специфичный для Node.js, и более новый API, реализующий тот же стандарт WHATWG URL, который используется веб-браузерами.

Ниже приведено сравнение API WHATWG и устаревшего API. Над схемой URL 'https://user:pass@sub.example.com:8080/p/a/t/h?query=string#hash' показаны свойства объекта, возвращаемого устаревшим url.parse(). Под ней показаны свойства объекта URL WHATWG.

Свойство origin URL WHATWG включает protocol и host, но не включает username или password.

┌────────────────────────────────────────────────────────────────────────────────────────────────┐
│                                              href                                              │
├──────────┬──┬─────────────────────┬────────────────────────┬───────────────────────────┬───────┤
│ protocol │  │        auth         │          host          │           path            │ hash  │
│          │  │                     ├─────────────────┬──────┼──────────┬────────────────┤       │
│          │  │                     │    hostname     │ port │ pathname │     search     │       │
│          │  │                     │                 │      │          ├─┬──────────────┤       │
│          │  │                     │                 │      │          │ │    query     │       │
"  https:   //    user   :   pass   @ sub.example.com : 8080   /p/a/t/h  ?  query=string   #hash "
│          │  │          │          │    hostname     │ port │          │                │       │
│          │  │          │          ├─────────────────┴──────┤          │                │       │
│ protocol │  │ username │ password │          host          │          │                │       │
├──────────┴──┼──────────┴──────────┼────────────────────────┤          │                │       │
│   origin    │                     │         origin         │ pathname │     search     │ hash  │
├─────────────┴─────────────────────┴────────────────────────┴──────────┴────────────────┴───────┤
│                                              href                                              │
└────────────────────────────────────────────────────────────────────────────────────────────────┘
(All spaces in the "" line should be ignored. They are purely for formatting.) copy

Разбор строки URL с помощью API WHATWG:

const myURL =
  new URL('https://user:pass@sub.example.com:8080/p/a/t/h?query=string#hash'); copy

Разбор строки URL с помощью устаревшего API:

Модули JavaScript
import url from 'node:url';
const myURL =
  url.parse('https://user:pass@sub.example.com:8080/p/a/t/h?query=string#hash');
CommonJS
const url = require('node:url');
const myURL =
  url.parse('https://user:pass@sub.example.com:8080/p/a/t/h?query=string#hash');

Создание URL из компонентов и получение созданной строки

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

const myURL = new URL('https://example.org');
myURL.pathname = '/a/b/c';
myURL.search = '?d=e';
myURL.hash = '#fgh'; copy
const pathname = '/a/b/c';
const search = '?d=e';
const hash = '#fgh';
const myURL = new URL(`https://example.org${pathname}${search}${hash}`); copy

Чтобы получить созданную строку URL, используйте аксессор свойства href:

console.log(myURL.href); copy

API URL WHATWG

Класс: URL

История
Версия Изменения
v10.0.0

Теперь класс доступен в глобальном объекте.

v7.0.0, v6.13.0

Добавлено в: v7.0.0, v6.13.0

Совместимый с браузерами класс URL, реализованный в соответствии со стандартом WHATWG URL. Примеры разобранных URL можно найти в самом стандарте. Класс URL также доступен в глобальном объекте.

В соответствии с соглашениями браузеров все свойства объектов URL реализованы как геттеры и сеттеры в прототипе класса, а не как свойства данных самого объекта. Поэтому, в отличие от устаревших urlObject, использование ключевого слова delete для любых свойств объектов URL (например, delete myURL.protocol, delete myURL.pathname и т. д.) не имеет эффекта, но при этом возвращает true.

new URL(input[, base])
История
Версия Изменения
v20.0.0, v18.17.0

Требование ICU снято.

  • input <string> Абсолютный или относительный входной URL для разбора. Если input является относительным, требуется base. Если input является абсолютным, base игнорируется. Если input не является строкой, сначала он преобразуется в строку.
  • base <string> Базовый URL, относительно которого выполняется разрешение, если input не является абсолютным. Если base не является строкой, сначала он преобразуется в строку.

Создает новый объект URL, разбирая input относительно base. Если base передан в виде строки, она будет разобрана так же, как new URL(base).

const myURL = new URL('/foo', 'https://example.org/');
// https://example.org/foo copy

Конструктор URL доступен как свойство глобального объекта. Его также можно импортировать из встроенного модуля url:

Модули JavaScript
import { URL } from 'node:url';
console.log(URL === globalThis.URL); // Prints 'true'.
CommonJS
console.log(URL === require('node:url').URL); // Prints 'true'.

Будет выброшено исключение TypeError, если input или base не являются допустимыми URL. Обратите внимание, что переданные значения будут преобразованы в строки. Например:

const myURL = new URL({ toString: () => 'https://example.org/' });
// https://example.org/ copy

Символы Юникода в имени хоста input автоматически преобразуются в ASCII с помощью алгоритма Punycode.

const myURL = new URL('https://測試');
// https://xn--g6w251d/ copy

Если заранее неизвестно, является ли input абсолютным URL, и передан base, рекомендуется проверить, что значение origin объекта URL соответствует ожидаемому.

let myURL = new URL('http://Example.com/', 'https://example.org/');
// http://example.com/

myURL = new URL('https://Example.com/', 'https://example.org/');
// https://example.com/

myURL = new URL('foo://Example.com/', 'https://example.org/');
// foo://Example.com/

myURL = new URL('http:Example.com/', 'https://example.org/');
// http://example.com/

myURL = new URL('https:Example.com/', 'https://example.org/');
// https://example.org/Example.com/

myURL = new URL('foo:Example.com/', 'https://example.org/');
// foo:Example.com/ copy
url.hash
  • Тип: <string>

Получает и задает часть URL, содержащую фрагмент.

const myURL = new URL('https://example.org/foo#bar');
console.log(myURL.hash);
// Prints #bar

myURL.hash = 'baz';
console.log(myURL.href);
// Prints https://example.org/foo#baz copy

Недопустимые символы URL, включенные в значение, присвоенное свойству hash, кодируются в процентном представлении. Выбор символов для такого кодирования может несколько отличаться от результата, который дают методы url.parse() и url.format().

url.host
  • Тип: <string>

Получает и задает часть URL, содержащую хост.

const myURL = new URL('https://example.org:81/foo');
console.log(myURL.host);
// Prints example.org:81

myURL.host = 'example.com:82';
console.log(myURL.href);
// Prints https://example.com:82/foo copy

Недопустимые значения хоста, присвоенные свойству host, игнорируются.

url.hostname
  • Тип: <string>

Получает и задает часть URL, содержащую имя хоста. Основное различие между url.host и url.hostname состоит в том, что url.hostname не включает порт.

const myURL = new URL('https://example.org:81/foo');
console.log(myURL.hostname);
// Prints example.org

// Setting the hostname does not change the port
myURL.hostname = 'example.com';
console.log(myURL.href);
// Prints https://example.com:81/foo

// Use myURL.host to change the hostname and port
myURL.host = 'example.org:82';
console.log(myURL.href);
// Prints https://example.org:82/foo copy

Недопустимые значения имени хоста, присвоенные свойству hostname, игнорируются.

url.href
  • Тип: <string>

Получает и задает сериализованный URL.

const myURL = new URL('https://example.org/foo');
console.log(myURL.href);
// Prints https://example.org/foo

myURL.href = 'https://example.com/bar';
console.log(myURL.href);
// Prints https://example.com/bar copy

Получение значения свойства href эквивалентно вызову url.toString().

Присваивание этому свойству нового значения эквивалентно созданию нового объекта URL с помощью new URL(value). При этом изменятся все свойства объекта URL.

Если значение, присвоенное свойству href, не является допустимым URL, будет выброшено исключение TypeError.

url.origin
История
Версия Изменения
v15.0.0

Схема "gopher" больше не является специальной, и url.origin теперь возвращает для нее 'null'.

  • Тип: <string>

Получает сериализованное представление источника URL только для чтения.

const myURL = new URL('https://example.org/foo/bar?baz');
console.log(myURL.origin);
// Prints https://example.org copy
const idnURL = new URL('https://測試');
console.log(idnURL.origin);
// Prints https://xn--g6w251d

console.log(idnURL.hostname);
// Prints xn--g6w251d copy
url.password
  • Тип: <string>

Получает и задает часть URL, содержащую пароль.

const myURL = new URL('https://abc:xyz@example.com');
console.log(myURL.password);
// Prints xyz

myURL.password = '123';
console.log(myURL.href);
// Prints https://abc:123@example.com/ copy

Недопустимые символы URL, включенные в значение, присвоенное свойству password, кодируются в процентном представлении. Выбор символов для такого кодирования может несколько отличаться от результата, который дают методы url.parse() и url.format().

url.pathname
  • Тип: <string>

Получает и задает часть URL, содержащую путь.

const myURL = new URL('https://example.org/abc/xyz?123');
console.log(myURL.pathname);
// Prints /abc/xyz

myURL.pathname = '/abcdef';
console.log(myURL.href);
// Prints https://example.org/abcdef?123 copy

Недопустимые символы URL, включенные в значение, присвоенное свойству pathname, кодируются в процентном представлении. Выбор символов для такого кодирования может несколько отличаться от результата, который дают методы url.parse() и url.format().

url.port
История
Версия Изменения
v15.0.0

Схема "gopher" больше не является специальной.

  • Тип: <string>

Получает и задает часть URL, содержащую порт.

Значение порта может быть числом или строкой, содержащей число в диапазоне от 0 до 65535 (включительно). Если задано значение порта по умолчанию для объектов URL с учетом protocol, значение port станет пустой строкой ('').

Значение порта может быть пустой строкой; в этом случае порт зависит от протокола/схемы:

протокол порт
"ftp" 21
"file"
"http" 80
"https" 443
"ws" 80
"wss" 443

При присваивании значения порту оно сначала будет преобразовано в строку с помощью .toString().

Если эта строка недопустима, но начинается с числа, это начальное число присваивается port. Если число выходит за указанный выше диапазон, оно игнорируется.

const myURL = new URL('https://example.org:8888');
console.log(myURL.port);
// Prints 8888

// Default ports are automatically transformed to the empty string
// (HTTPS protocol's default port is 443)
myURL.port = '443';
console.log(myURL.port);
// Prints the empty string
console.log(myURL.href);
// Prints https://example.org/

myURL.port = 1234;
console.log(myURL.port);
// Prints 1234
console.log(myURL.href);
// Prints https://example.org:1234/

// Completely invalid port strings are ignored
myURL.port = 'abcd';
console.log(myURL.port);
// Prints 1234

// Leading numbers are treated as a port number
myURL.port = '5678abcd';
console.log(myURL.port);
// Prints 5678

// Non-integers are truncated
myURL.port = 1234.5678;
console.log(myURL.port);
// Prints 1234

// Out-of-range numbers which are not represented in scientific notation
// will be ignored.
myURL.port = 1e10; // 10000000000, will be range-checked as described below
console.log(myURL.port);
// Prints 1234 copy

Числа с десятичной точкой, например числа с плавающей точкой или числа в экспоненциальной записи, также подпадают под это правило. Начальное число до десятичной точки будет установлено в качестве порта URL, если оно допустимо:

myURL.port = 4.567e21;
console.log(myURL.port);
// Prints 4 (because it is the leading number in the string '4.567e21') copy
url.protocol
  • Тип: <string>

Получает и задает часть URL, содержащую протокол.

const myURL = new URL('https://example.org');
console.log(myURL.protocol);
// Prints https:

myURL.protocol = 'ftp';
console.log(myURL.href);
// Prints ftp://example.org/ copy

Недопустимые значения протокола URL, присвоенные свойству protocol, игнорируются.

Специальные схемы
История
Версия Изменения
v15.0.0

Схема "gopher" больше не является специальной.

Стандарт WHATWG URL считает несколько схем протоколов URL специальными с точки зрения их разбора и сериализации. При разборе URL с использованием одного из этих специальных протоколов свойство url.protocol можно изменить на другой специальный протокол, но нельзя изменить на неспециальный протокол, и наоборот.

Например, изменение http на https работает:

const u = new URL('http://example.org');
u.protocol = 'https';
console.log(u.href);
// https://example.org/ copy

Однако изменение http на гипотетический протокол fish не работает, поскольку новый протокол не является специальным.

const u = new URL('http://example.org');
u.protocol = 'fish';
console.log(u.href);
// http://example.org/ copy

Аналогично, изменение неспециального протокола на специальный также запрещено:

const u = new URL('fish://example.org');
u.protocol = 'http';
console.log(u.href);
// fish://example.org copy

Согласно стандарту WHATWG URL, специальными схемами протоколов являются ftp, file, http, https, ws и wss.

url.search
  • Тип: <string>

Получает и задает сериализованную часть URL, содержащую строку запроса.

const myURL = new URL('https://example.org/abc?123');
console.log(myURL.search);
// Prints ?123

myURL.search = 'abc=xyz';
console.log(myURL.href);
// Prints https://example.org/abc?abc=xyz copy

Любые недопустимые символы URL, встречающиеся в значении, присвоенном свойству search, будут закодированы в процентном представлении. Выбор символов для такого кодирования может несколько отличаться от результата, который дают методы url.parse() и url.format().

url.searchParams
  • Тип: <URLSearchParams>

Получает объект URLSearchParams, представляющий параметры строки запроса URL. Это свойство доступно только для чтения, но предоставленный им объект URLSearchParams можно использовать для изменения экземпляра URL; чтобы полностью заменить параметры строки запроса URL, используйте сеттер url.search. Подробности см. в документации URLSearchParams.

Будьте осторожны при использовании .searchParams для изменения URL, поскольку согласно спецификации WHATWG объект URLSearchParams использует другие правила определения символов, которые необходимо кодировать в процентном представлении. Например, объект URL не кодирует символ ASCII-тильды (~), тогда как URLSearchParams всегда его кодирует:

const myURL = new URL('https://example.org/abc?foo=~bar');

console.log(myURL.search);  // prints ?foo=~bar

// Modify the URL via searchParams...
myURL.searchParams.sort();

console.log(myURL.search);  // prints ?foo=%7Ebar copy
url.username
  • Тип: <string>

Получает и задает часть URL, содержащую имя пользователя.

const myURL = new URL('https://abc:xyz@example.com');
console.log(myURL.username);
// Prints abc

myURL.username = '123';
console.log(myURL.href);
// Prints https://123:xyz@example.com/ copy

Любые недопустимые символы URL, встречающиеся в значении, присвоенном свойству username, будут закодированы в процентном представлении. Выбор символов для такого кодирования может несколько отличаться от результата, который дают методы url.parse() и url.format().

url.toString()
  • Возвращает: <string>

Метод toString() объекта URL возвращает сериализованный URL. Возвращаемое значение эквивалентно значениям url.href и url.toJSON().

url.toJSON()
Добавлено в: v7.7.0, v6.13.0
  • Возвращает: <string>

Метод toJSON() объекта URL возвращает сериализованный URL. Возвращаемое значение эквивалентно значениям url.href и url.toString().

Этот метод вызывается автоматически, когда объект URL сериализуется с помощью JSON.stringify().

const myURLs = [
  new URL('https://www.example.com'),
  new URL('https://test.example.org'),
];
console.log(JSON.stringify(myURLs));
// Prints ["https://www.example.com/","https://test.example.org/"] copy
URL.createObjectURL(blob)
История
Версия Изменения
v22.17.0

API переведен в стабильный статус.

v16.7.0

Добавлено в: v16.7.0

  • blob <Blob>
  • Возвращает: <string>

Создает строку URL 'blob:nodedata:...', представляющую переданный объект <Blob> и позволяющую впоследствии получить Blob.

const {
  Blob,
  resolveObjectURL,
} = require('node:buffer');

const blob = new Blob(['hello']);
const id = URL.createObjectURL(blob);

// later...

const otherBlob = resolveObjectURL(id);
console.log(otherBlob.size); copy

Данные, хранящиеся в зарегистрированном <Blob>, будут оставаться в памяти до вызова URL.revokeObjectURL() для их удаления.

Объекты Blob регистрируются в текущем потоке. При использовании рабочих потоков объекты Blob, зарегистрированные в одном рабочем потоке, будут недоступны другим рабочим потокам и основному потоку.

URL.revokeObjectURL(id)
История
Версия Изменения
v22.17.0

API переведен в стабильный статус.

v16.7.0

Добавлено в: v16.7.0

  • id <string> Строка URL 'blob:nodedata:..., возвращенная предыдущим вызовом URL.createObjectURL().

Удаляет сохраненный объект <Blob>, идентифицируемый указанным идентификатором. Попытка отозвать незарегистрированный идентификатор завершается без каких-либо сообщений.

URL.canParse(input[, base])
Добавлено в: v19.9.0, v18.17.0
  • input <string> Абсолютный или относительный входной URL для разбора. Если input является относительным, требуется base. Если input является абсолютным, base игнорируется. Если input не является строкой, сначала он преобразуется в строку.
  • base <string> Базовый URL, относительно которого выполняется разрешение, если input не является абсолютным. Если base не является строкой, сначала он преобразуется в строку.
  • Возвращает: <boolean>

Проверяет, можно ли разобрать input относительно base как URL.

const isValid = URL.canParse('/foo', 'https://example.org/'); // true

const isNotValid = URL.canParse('/foo'); // false copy
URL.parse(input[, base])
Добавлено в: v22.1.0
  • input <string> Абсолютный или относительный входной URL для разбора. Если input является относительным, требуется base. Если input является абсолютным, base игнорируется. Если input не является строкой, сначала он преобразуется в строку.
  • base <string> Базовый URL, относительно которого выполняется разрешение, если input не является абсолютным. Если base не является строкой, сначала он преобразуется в строку.
  • Возвращает: <URL> | <null>

Разбирает строку как URL. Если передан base, он будет использоваться в качестве базового URL для разрешения не абсолютных URL input. Возвращает null, если параметры нельзя разрешить в допустимый URL.

Класс: URLSearchParams

История
Версия Изменения
v10.0.0

Теперь класс доступен в глобальном объекте.

v7.5.0, v6.13.0

Добавлено в: v7.5.0, v6.13.0

API URLSearchParams предоставляет доступ для чтения и записи к строке запроса URL. Класс URLSearchParams также можно использовать отдельно с одним из следующих четырех конструкторов. Класс URLSearchParams также доступен в глобальном объекте.

Интерфейс WHATWG URLSearchParams и модуль querystring имеют схожее назначение, но назначение модуля querystring более общее, поскольку он позволяет настраивать символы-разделители (& и =). С другой стороны, этот API предназначен исключительно для строк запроса URL.

const myURL = new URL('https://example.org/?abc=123');
console.log(myURL.searchParams.get('abc'));
// Prints 123

myURL.searchParams.append('abc', 'xyz');
console.log(myURL.href);
// Prints https://example.org/?abc=123&abc=xyz

myURL.searchParams.delete('abc');
myURL.searchParams.set('a', 'b');
console.log(myURL.href);
// Prints https://example.org/?a=b

const newSearchParams = new URLSearchParams(myURL.searchParams);
// The above is equivalent to
// const newSearchParams = new URLSearchParams(myURL.search);

newSearchParams.append('a', 'c');
console.log(myURL.href);
// Prints https://example.org/?a=b
console.log(newSearchParams.toString());
// Prints a=b&a=c

// newSearchParams.toString() is implicitly called
myURL.search = newSearchParams;
console.log(myURL.href);
// Prints https://example.org/?a=b&a=c
newSearchParams.delete('a');
console.log(myURL.href);
// Prints https://example.org/?a=b&a=c copy
new URLSearchParams()

Создает новый пустой объект URLSearchParams.

new URLSearchParams(string)
  • string <string> Строка запроса

Разбирает string как строку запроса и использует ее для создания нового объекта URLSearchParams. Начальный символ '?', если он присутствует, игнорируется.

let params;

params = new URLSearchParams('user=abc&query=xyz');
console.log(params.get('user'));
// Prints 'abc'
console.log(params.toString());
// Prints 'user=abc&query=xyz'

params = new URLSearchParams('?user=abc&query=xyz');
console.log(params.toString());
// Prints 'user=abc&query=xyz' copy
new URLSearchParams(obj)
Добавлено в: v7.10.0, v6.13.0
  • obj <Object> Объект, представляющий набор пар «ключ-значение»

Создает новый объект URLSearchParams с хеш-таблицей запроса. Ключ и значение каждого свойства obj всегда приводятся к строкам.

В отличие от модуля querystring, повторяющиеся ключи в виде значений-массивов не допускаются. Массивы преобразуются в строки с помощью array.toString(), которая просто объединяет все элементы массива запятыми.

const params = new URLSearchParams({
  user: 'abc',
  query: ['first', 'second'],
});
console.log(params.getAll('query'));
// Prints [ 'first,second' ]
console.log(params.toString());
// Prints 'user=abc&query=first%2Csecond' copy
new URLSearchParams(iterable)
Добавлено в: v7.10.0, v6.13.0
  • iterable <Iterable> Итерируемый объект, элементы которого являются парами «ключ-значение»

Создает новый объект URLSearchParams с итерируемой коллекцией аналогично конструктору <Map>. iterable может быть Array или любым итерируемым объектом. Это означает, что iterable может быть другим URLSearchParams; в этом случае конструктор просто создаст копию переданного URLSearchParams. Элементы iterable являются парами «ключ-значение» и сами могут быть любыми итерируемыми объектами.

Повторяющиеся ключи допускаются.

let params;

// Using an array
params = new URLSearchParams([
  ['user', 'abc'],
  ['query', 'first'],
  ['query', 'second'],
]);
console.log(params.toString());
// Prints 'user=abc&query=first&query=second'

// Using a Map object
const map = new Map();
map.set('user', 'abc');
map.set('query', 'xyz');
params = new URLSearchParams(map);
console.log(params.toString());
// Prints 'user=abc&query=xyz'

// Using a generator function
function* getQueryPairs() {
  yield ['user', 'abc'];
  yield ['query', 'first'];
  yield ['query', 'second'];
}
params = new URLSearchParams(getQueryPairs());
console.log(params.toString());
// Prints 'user=abc&query=first&query=second'

// Each key-value pair must have exactly two elements
new URLSearchParams([
  ['user', 'abc', 'error'],
]);
// Throws TypeError [ERR_INVALID_TUPLE]:
//        Each query pair must be an iterable [name, value] tuple copy
urlSearchParams.append(name, value)
  • name <string>
  • value <string>

Добавляет новую пару «имя-значение» в строку запроса.

urlSearchParams.delete(name[, value])
История
Версия Изменения
v20.2.0, v18.18.0

Добавлена поддержка необязательного аргумента value.

  • name <string>
  • value <string>

Если указан value, удаляет все пары «имя-значение», в которых имя равно name, а значение — value.

Если value не указан, удаляет все пары «имя-значение», имя которых равно name.

urlSearchParams.entries()
  • Возвращает: <Iterator>

Возвращает итератор ES6 Iterator для каждой пары «имя-значение» в запросе. Каждый элемент итератора является массивом JavaScript Array. Первый элемент Array — это name, второй элемент Array — это value.

Псевдоним для urlSearchParams[Symbol.iterator]().

urlSearchParams.forEach(fn[, thisArg])
История
Версия Изменения
v18.0.0

Передача недопустимого обратного вызова в аргумент fn теперь вызывает ERR_INVALID_ARG_TYPE вместо ERR_INVALID_CALLBACK.

  • fn <Function> Вызывается для каждой пары «имя-значение» в запросе
  • thisArg <Object> Используется как значение this при вызове fn

Перебирает каждую пару «имя-значение» в запросе и вызывает заданную функцию.

const myURL = new URL('https://example.org/?a=b&c=d');
myURL.searchParams.forEach((value, name, searchParams) => {
  console.log(name, value, myURL.searchParams === searchParams);
});
// Prints:
//   a b true
//   c d true copy
urlSearchParams.get(name)
  • name <string>
  • Возвращает: <string> | <null> Строку или null, если пары «имя-значение» с указанным name нет.

Возвращает значение первой пары «имя-значение», имя которой равно name. Если таких пар нет, возвращается null.

urlSearchParams.getAll(name)
  • name <string>
  • Возвращает: <string[]>

Возвращает значения всех пар «имя-значение», имя которых равно name. Если таких пар нет, возвращается пустой массив.

urlSearchParams.has(name[, value])
История
Версия Изменения
v20.2.0, v18.18.0

Добавлена поддержка необязательного аргумента value.

  • name <string>
  • value <string>
  • Возвращает: <boolean>

Проверяет, содержит ли объект URLSearchParams пары «ключ-значение» на основе name и необязательного аргумента value.

Если указан value, возвращает true, когда существует пара «имя-значение» с теми же name и value.

Если value не указан, возвращает true, если существует хотя бы одна пара «имя-значение» с именем name.

urlSearchParams.keys()
  • Возвращает: <Iterator>

Возвращает итератор ES6 Iterator по именам каждой пары «имя-значение».

const params = new URLSearchParams('foo=bar&foo=baz');
for (const name of params.keys()) {
  console.log(name);
}
// Prints:
//   foo
//   foo copy
urlSearchParams.set(name, value)
  • name <string>
  • value <string>

Устанавливает в объекте URLSearchParams значение value, связанное с name. Если уже существуют пары «имя-значение» с именем name, значение первой такой пары устанавливается в value, а все остальные удаляются. Если таких пар нет, пара «имя-значение» добавляется в строку запроса.

const params = new URLSearchParams();
params.append('foo', 'bar');
params.append('foo', 'baz');
params.append('abc', 'def');
console.log(params.toString());
// Prints foo=bar&foo=baz&abc=def

params.set('foo', 'def');
params.set('xyz', 'opq');
console.log(params.toString());
// Prints foo=def&abc=def&xyz=opq copy
urlSearchParams.size
Добавлено в: v19.8.0, v18.16.0

Общее количество записей параметров.

urlSearchParams.sort()
Добавлено в: v7.7.0, v6.13.0

Сортирует на месте все существующие пары «имя-значение» по их именам. Сортировка выполняется с помощью устойчивого алгоритма сортировки, поэтому относительный порядок пар «имя-значение» с одинаковым именем сохраняется.

Этот метод можно использовать, в частности, для увеличения числа попаданий в кэш.

const params = new URLSearchParams('query[]=abc&type=search&query[]=123');
params.sort();
console.log(params.toString());
// Prints query%5B%5D=abc&query%5B%5D=123&type=search copy
urlSearchParams.toString()
  • Возвращает: <string>

Возвращает параметры поиска в сериализованном виде в виде строки; при необходимости символы кодируются с помощью процентного кодирования.

urlSearchParams.values()
  • Возвращает: <Iterator>

Возвращает итератор ES6 Iterator по значениям каждой пары «имя-значение».

urlSearchParams[Symbol.iterator]()
  • Возвращает: <Iterator>

Возвращает итератор ES6 Iterator для каждой пары «имя-значение» в строке запроса. Каждый элемент итератора является массивом JavaScript Array. Первый элемент Array — это name, второй элемент Array — это value.

Псевдоним для urlSearchParams.entries().

const params = new URLSearchParams('foo=bar&xyz=baz');
for (const [name, value] of params) {
  console.log(name, value);
}
// Prints:
//   foo bar
//   xyz baz copy

url.domainToASCII(domain)

История
Версия Изменения
v20.0.0, v18.17.0

Требование ICU отменено.

v7.4.0, v6.13.0

Добавлено в: v7.4.0, v6.13.0

  • domain <string>
  • Возвращает: <string>

Возвращает ASCII-представление domain в формате Punycode. Если domain является недопустимым доменом, возвращается пустая строка.

Выполняет операцию, обратную url.domainToUnicode().

Модули JavaScript
import url from 'node:url';

console.log(url.domainToASCII('español.com'));
// Prints xn--espaol-zwa.com
console.log(url.domainToASCII('中文.com'));
// Prints xn--fiq228c.com
console.log(url.domainToASCII('xn--iñvalid.com'));
// Prints an empty string
CommonJS
const url = require('node:url');

console.log(url.domainToASCII('español.com'));
// Prints xn--espaol-zwa.com
console.log(url.domainToASCII('中文.com'));
// Prints xn--fiq228c.com
console.log(url.domainToASCII('xn--iñvalid.com'));
// Prints an empty string

url.domainToUnicode(domain)

История
Версия Изменения
v20.0.0, v18.17.0

Требование ICU отменено.

v7.4.0, v6.13.0

Добавлено в: v7.4.0, v6.13.0

  • domain <string>
  • Возвращает: <string>

Возвращает представление domain в кодировке Unicode. Если domain является недопустимым доменом, возвращается пустая строка.

Выполняет операцию, обратную url.domainToASCII().

Модули JavaScript
import url from 'node:url';

console.log(url.domainToUnicode('xn--espaol-zwa.com'));
// Prints español.com
console.log(url.domainToUnicode('xn--fiq228c.com'));
// Prints 中文.com
console.log(url.domainToUnicode('xn--iñvalid.com'));
// Prints an empty string
CommonJS
const url = require('node:url');

console.log(url.domainToUnicode('xn--espaol-zwa.com'));
// Prints español.com
console.log(url.domainToUnicode('xn--fiq228c.com'));
// Prints 中文.com
console.log(url.domainToUnicode('xn--iñvalid.com'));
// Prints an empty string

url.fileURLToPath(url[, options])

История
Версия Изменения
v22.1.0

Теперь аргумент options можно использовать для определения способа разбора аргумента path.

v10.12.0

Добавлено в: v10.12.0

  • url <URL> | <string> Строка URL файла или объект URL, преобразуемый в путь.
  • options <Object>
    • windows <boolean> | <undefined> true, если path следует вернуть как путь к файлу Windows, false — для POSIX, а undefined — для системного значения по умолчанию. По умолчанию: undefined.
  • Возвращает: <string> Полностью разрешенный платформозависимый путь к файлу Node.js.

Эта функция обеспечивает правильное декодирование символов, закодированных с помощью процентного кодирования, а также гарантирует получение допустимой абсолютной строки пути для разных платформ.

Модули JavaScript
import { fileURLToPath } from 'node:url';

const __filename = fileURLToPath(import.meta.url);

new URL('file:///C:/path/').pathname;      // Incorrect: /C:/path/
fileURLToPath('file:///C:/path/');         // Correct:   C:\path\ (Windows)

new URL('file://nas/foo.txt').pathname;    // Incorrect: /foo.txt
fileURLToPath('file://nas/foo.txt');       // Correct:   \\nas\foo.txt (Windows)

new URL('file:///你好.txt').pathname;      // Incorrect: /%E4%BD%A0%E5%A5%BD.txt
fileURLToPath('file:///你好.txt');         // Correct:   /你好.txt (POSIX)

new URL('file:///hello world').pathname;   // Incorrect: /hello%20world
fileURLToPath('file:///hello world');      // Correct:   /hello world (POSIX)
CommonJS
const { fileURLToPath } = require('node:url');
new URL('file:///C:/path/').pathname;      // Incorrect: /C:/path/
fileURLToPath('file:///C:/path/');         // Correct:   C:\path\ (Windows)

new URL('file://nas/foo.txt').pathname;    // Incorrect: /foo.txt
fileURLToPath('file://nas/foo.txt');       // Correct:   \\nas\foo.txt (Windows)

new URL('file:///你好.txt').pathname;      // Incorrect: /%E4%BD%A0%E5%A5%BD.txt
fileURLToPath('file:///你好.txt');         // Correct:   /你好.txt (POSIX)

new URL('file:///hello world').pathname;   // Incorrect: /hello%20world
fileURLToPath('file:///hello world');      // Correct:   /hello world (POSIX)

url.fileURLToPathBuffer(url[, options])

  • url <URL> | <string> Строка URL файла или объект URL, преобразуемый в путь.
  • options <Object>
    • windows <boolean> | <undefined> true, если path следует вернуть как путь к файлу Windows, false — для POSIX, а undefined — для системного значения по умолчанию. По умолчанию: undefined.
  • Возвращает: <Buffer> Полностью разрешенный платформозависимый путь к файлу Node.js в виде <Buffer>.

Подобно url.fileURLToPath(...), но вместо строкового представления пути возвращается Buffer. Это преобразование полезно, когда входной URL содержит сегменты с процентным кодированием, которые не являются допустимыми последовательностями UTF-8 / Unicode.

url.format(URL[, options])

Добавлено в: v7.6.0
  • URL <URL> Объект WHATWG URL
  • options <Object>
    • auth <boolean> true, если сериализованная строка URL должна включать имя пользователя и пароль, и false в противном случае. По умолчанию: true.
    • fragment <boolean> true, если сериализованная строка URL должна включать фрагмент, и false в противном случае. По умолчанию: true.
    • search <boolean> true, если сериализованная строка URL должна включать поисковый запрос, и false в противном случае. По умолчанию: true.
    • unicode <boolean> true, если символы Unicode в компоненте узла строки URL следует кодировать напрямую, а не преобразовывать в Punycode. По умолчанию: false.
  • Возвращает: <string>

Возвращает настраиваемое сериализованное представление URL String объекта WHATWG URL.

У объекта URL есть метод toString() и свойство href, которые возвращают строки с сериализованным представлением URL. Однако настроить их каким-либо образом нельзя. Метод url.format(URL[, options]) позволяет выполнять базовую настройку вывода.

Модули JavaScript
import url from 'node:url';
const myURL = new URL('https://a:b@測試?abc#foo');

console.log(myURL.href);
// Prints https://a:b@xn--g6w251d/?abc#foo

console.log(myURL.toString());
// Prints https://a:b@xn--g6w251d/?abc#foo

console.log(url.format(myURL, { fragment: false, unicode: true, auth: false }));
// Prints 'https://測試/?abc'
CommonJS
const url = require('node:url');
const myURL = new URL('https://a:b@測試?abc#foo');

console.log(myURL.href);
// Prints https://a:b@xn--g6w251d/?abc#foo

console.log(myURL.toString());
// Prints https://a:b@xn--g6w251d/?abc#foo

console.log(url.format(myURL, { fragment: false, unicode: true, auth: false }));
// Prints 'https://測試/?abc'

url.pathToFileURL(path[, options])

История
Версия Изменения
v22.1.0

Теперь аргумент options можно использовать для определения способа возврата значения path.

v10.12.0

Добавлено в: v10.12.0

  • path <string> Путь, преобразуемый в URL файла.
  • options <Object>
    • windows <boolean> | <undefined> true, если path следует трактовать как путь к файлу Windows, false — для POSIX, а undefined — для системного значения по умолчанию. По умолчанию: undefined.
  • Возвращает: <URL> Объект URL файла.

Эта функция гарантирует, что path преобразуется в абсолютный путь, а управляющие символы URL правильно кодируются при преобразовании в URL файла.

Модули JavaScript
import { pathToFileURL } from 'node:url';

new URL('/foo#1', 'file:');           // Incorrect: file:///foo#1
pathToFileURL('/foo#1');              // Correct:   file:///foo%231 (POSIX)

new URL('/some/path%.c', 'file:');    // Incorrect: file:///some/path%.c
pathToFileURL('/some/path%.c');       // Correct:   file:///some/path%25.c (POSIX)
CommonJS
const { pathToFileURL } = require('node:url');
new URL(__filename);                  // Incorrect: throws (POSIX)
new URL(__filename);                  // Incorrect: C:\... (Windows)
pathToFileURL(__filename);            // Correct:   file:///... (POSIX)
pathToFileURL(__filename);            // Correct:   file:///C:/... (Windows)

new URL('/foo#1', 'file:');           // Incorrect: file:///foo#1
pathToFileURL('/foo#1');              // Correct:   file:///foo%231 (POSIX)

new URL('/some/path%.c', 'file:');    // Incorrect: file:///some/path%.c
pathToFileURL('/some/path%.c');       // Correct:   file:///some/path%25.c (POSIX)

url.urlToHttpOptions(url)

История
Версия Изменения
v19.9.0, v18.17.0

Возвращаемый объект теперь также будет содержать все собственные перечисляемые свойства аргумента url.

v15.7.0, v14.18.0

Добавлено в: v15.7.0, v14.18.0

  • url <URL> Объект WHATWG URL, преобразуемый в объект параметров.
  • Возвращает: <Object> Объект параметров
    • protocol <string> Используемый протокол.
    • hostname <string> Доменное имя или IP-адрес сервера, которому будет отправлен запрос.
    • hash <string> Фрагмент URL.
    • search <string> Сериализованная часть URL с запросом.
    • pathname <string> Часть URL, содержащая путь.
    • path <string> Путь запроса. При наличии должен включать строку запроса. Например: '/index.html?page=12'. Если путь запроса содержит недопустимые символы, возникает исключение. В настоящее время отклоняются только пробелы, но в будущем это может измениться.
    • href <string> Сериализованный URL.
    • port <number> Порт удаленного сервера.
    • auth <string> Простая аутентификация, то есть 'user:password' для формирования заголовка Authorization.

Эта вспомогательная функция преобразует объект URL в обычный объект параметров, ожидаемый API http.request() и https.request().

Модули JavaScript
import { urlToHttpOptions } from 'node:url';
const myURL = new URL('https://a:b@測試?abc#foo');

console.log(urlToHttpOptions(myURL));
/*
{
  protocol: 'https:',
  hostname: 'xn--g6w251d',
  hash: '#foo',
  search: '?abc',
  pathname: '/',
  path: '/?abc',
  href: 'https://a:b@xn--g6w251d/?abc#foo',
  auth: 'a:b'
}
*/
CommonJS
const { urlToHttpOptions } = require('node:url');
const myURL = new URL('https://a:b@測試?abc#foo');

console.log(urlToHttpOptions(myURL));
/*
{
  protocol: 'https:',
  hostname: 'xn--g6w251d',
  hash: '#foo',
  search: '?abc',
  pathname: '/',
  path: '/?abc',
  href: 'https://a:b@xn--g6w251d/?abc#foo',
  auth: 'a:b'
}
*/

Устаревший API URL

История
Версия Изменения
v15.13.0, v14.17.0

Статус устаревания отозван. Статус изменён на «Устаревший».

v11.0.0

Этот API объявлен устаревшим.

Стабильность: 3 - Устаревший: вместо него используйте API URL WHATWG.

Устаревший urlObject

История
Версия Изменения
v15.13.0, v14.17.0

Статус устаревания отозван. Статус изменён на «Устаревший».

v11.0.0

Устаревший API URL объявлен устаревшим. Используйте API URL WHATWG.

Устаревший urlObject (require('node:url').Url или import { Url } from 'node:url') создаётся и возвращается функцией url.parse().

urlObject.auth

Свойство auth представляет собой часть URL с именем пользователя и паролем, также называемую информацией пользователя. Эта часть строки следует за 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'.

Декодирование 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. Является ли свойство query строкой или объектом, определяется аргументом parseQueryString, переданным в url.parse().

Например: 'query=string' или {'query': 'string'}.

Если возвращается строка, декодирование строки запроса не выполняется. Если возвращается объект, декодируются и ключи, и значения.

urlObject.search

Свойство search содержит всю часть URL со «строкой запроса», включая начальный вопросительный знак ASCII (?).

Например: '?query=string'.

Декодирование строки запроса не выполняется.

urlObject.slashes

Свойство slashes — это boolean со значением true, если после двоеточия в protocol должны следовать две косые черты ASCII (/).

url.format(urlObject)

История
Версия Изменения
v17.0.0

Теперь выбрасывает исключение ERR_INVALID_URL, если преобразование имени хоста в Punycode приводит к изменениям, из-за которых URL может быть повторно разобран иначе.

v15.13.0, v14.17.0

Статус устаревания отозван. Статус изменён на «Устаревший».

v11.0.0

Устаревший API URL объявлен устаревшим. Используйте API URL WHATWG.

v7.0.0

Для URL со схемой file: теперь всегда используется правильное количество косых черт, независимо от параметра slashes. Параметр slashes со значением false при отсутствии протокола теперь также всегда учитывается.

v0.1.25

Добавлено в: v0.1.25

  • urlObject <Object> | <string> Объект URL (возвращаемый функцией url.parse() или созданный иным способом). Если передана строка, она преобразуется в объект посредством передачи в url.parse().

Метод url.format() возвращает отформатированную строку URL, полученную из urlObject.

const url = require('node:url');
url.format({
  protocol: 'https',
  hostname: 'example.com',
  pathname: '/some/path',
  query: {
    page: 1,
    format: 'json',
  },
});

// => 'https://example.com/some/path?page=1&format=json' copy

Если urlObject не является объектом или строкой, url.format() выбрасывает TypeError.

Форматирование выполняется следующим образом:

  • Создаётся новая пустая строка result.
  • Если urlObject.protocol является строкой, она добавляется в result без изменений.
  • В противном случае, если urlObject.protocol не равно undefined и не является строкой, выбрасывается Error.
  • Для всех строковых значений urlObject.protocol, которые не заканчиваются двоеточием ASCII (:), в result добавляется строка :.
  • Если выполняется хотя бы одно из следующих условий, в result добавляется строка //:
    • свойство urlObject.slashes равно true;
    • 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 (#), в result добавляется строка #.
    • Значение urlObject.hash добавляется в result.
  • В противном случае, если свойство urlObject.hash не равно undefined и не является строкой, выбрасывается Error.
  • Возвращается result.

url.parse(urlString[, parseQueryString[, slashesDenoteHost]])

История
Версия Изменения
v19.0.0, v18.13.0

Устаревание только в документации.

v15.13.0, v14.17.0

Статус устаревания отозван. Статус изменён на «Устаревший».

v11.14.0

Свойство pathname в возвращённом объекте URL теперь равно /, если путь отсутствует, а схема протокола — ws: или wss:.

v11.0.0

Устаревший API URL объявлен устаревшим. Используйте API URL WHATWG.

v9.0.0

Свойство search в возвращённом объекте URL теперь равно null, если строка запроса отсутствует.

v0.1.25

Добавлено в: v0.1.25

Стабильность: 0 - Устаревший: вместо него используйте API URL WHATWG.
  • 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.

Выбрасывается TypeError, если urlString не является строкой.

Выбрасывается URIError, если свойство auth присутствует, но не может быть декодировано.

url.parse() использует снисходительный нестандартный алгоритм разбора строк URL. Он подвержен проблемам безопасности, таким как подмена имени хоста и неправильная обработка имён пользователей и паролей. Не используйте его с недоверенными данными. Для уязвимостей url.parse() CVE не присваиваются. Вместо него используйте API URL WHATWG.

url.resolve(from, to)

История
Версия Изменения
v15.13.0, v14.17.0

Статус устаревания отозван. Статус изменён на «Устаревший».

v11.0.0

Устаревший API URL объявлен устаревшим. Используйте API URL WHATWG.

v6.6.0

Поля auth теперь сохраняются без изменений, если from и to указывают на один и тот же хост.

v6.0.0

Поля auth теперь очищаются, если параметр to содержит имя хоста.

v6.5.0, v4.6.2

Поле port теперь копируется правильно.

v0.1.25

Добавлено в: v0.1.25

  • from <string> Базовый URL, используемый, если to является относительным URL.
  • to <string> Целевой URL для разрешения.

Метод url.resolve() разрешает целевой URL относительно базового URL аналогично тому, как веб-браузер разрешает адрес ссылки.

const url = require('node:url');
url.resolve('/one/two/three', 'four');         // '/one/two/four'
url.resolve('http://example.com/', '/one');    // 'http://example.com/one'
url.resolve('http://example.com/one', '/two'); // 'http://example.com/two' copy

Чтобы получить тот же результат с помощью API URL WHATWG:

function resolve(from, to) {
  const resolvedUrl = new URL(to, new URL(from, 'resolve://'));
  if (resolvedUrl.protocol === 'resolve:') {
    // `from` is a relative URL.
    const { pathname, search, hash } = resolvedUrl;
    return pathname + search + hash;
  }
  return resolvedUrl.toString();
}

resolve('/one/two/three', 'four');         // '/one/two/four'
resolve('http://example.com/', '/one');    // 'http://example.com/one'
resolve('http://example.com/one', '/two'); // 'http://example.com/two' copy

Процентное кодирование в URL

В URL разрешено использовать только определённый диапазон символов. Любой символ за пределами этого диапазона необходимо закодировать. Способ кодирования таких символов и выбор символов для кодирования полностью зависят от положения символа в структуре URL.

Устаревший API

В устаревшем API пробелы (' ') и следующие символы автоматически экранируются в свойствах объектов URL:

< > " ` \r \n \t { } | \ ^ ' copy

Например, символ пробела ASCII (' ') кодируется как %20. Косая черта ASCII (/) кодируется как %3C.

API WHATWG

Стандарт URL WHATWG использует более избирательный и точный подход к выбору кодируемых символов, чем устаревший API.

Алгоритм WHATWG определяет четыре «набора процентного кодирования», описывающих диапазоны символов, которые необходимо кодировать с помощью процентного кодирования:

  • Набор процентного кодирования управляющих символов C0 включает кодовые точки в диапазоне от U+0000 до U+001F (включительно), а также все кодовые точки выше U+007E (~).

  • Набор процентного кодирования фрагмента включает набор процентного кодирования управляющих символов C0 и кодовые точки U+0020 SPACE, U+0022 ("), U+003C (<), U+003E (>) и U+0060 (`).

  • Набор процентного кодирования пути включает набор процентного кодирования управляющих символов C0 и кодовые точки U+0020 SPACE, U+0022 ("), U+0023 (#), U+003C (<), U+003E (>), U+003F (?), U+0060 (`), U+007B ({) и U+007D (}).

  • Набор кодирования информации пользователя включает набор процентного кодирования пути и кодовые точки U+002F (/), U+003A (:), U+003B (;), U+003D (=), U+0040 (@), от U+005B ([) до U+005E(^), а также U+007C (|).

Набор процентного кодирования информации пользователя используется исключительно для кодирования имён пользователей и паролей в URL. Набор процентного кодирования пути используется для путей большинства URL. Набор процентного кодирования фрагмента используется для фрагментов URL. Набор процентного кодирования управляющих символов C0 используется для хоста и пути в некоторых случаях, а также во всех остальных ситуациях.

Если в имени хоста встречаются символы, не относящиеся к ASCII, имя хоста кодируется с помощью алгоритма Punycode. Однако обратите внимание, что имя хоста может содержать одновременно символы, закодированные в Punycode, и символы, закодированные с помощью процентного кодирования:

const myURL = new URL('https://%CF%80.example.com/foo');
console.log(myURL.href);
// Prints https://xn--1xa.example.com/foo
console.log(myURL.origin);
// Prints https://xn--1xa.example.com copy

© Joyent, Inc. and other Node contributors
Licensed under the MIT License.
Node.js is a trademark of Joyent, Inc. and is used with its permission.
We are not endorsed by or affiliated with Joyent.
https://nodejs.org/dist/latest-v22.x/docs/api/url.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API