URL
[Стабильно: 2 - Стабильно]
Стабильно: 2 Стабильность: 2 - Стабильно
Исходный код: lib/url.js
Модуль node:url
предоставляет утилиты для разрешения и анализа URL-адресов. Доступ к нему можно получить с помощью:
import url from 'node:url'
const url = require('node:url')
Строки URL и объекты URL
Строка URL — это структурированная строка, содержащая несколько осмысленных компонентов. При анализе возвращается объект URL, содержащий свойства для каждого из этих компонентов.
Модуль node:url
предоставляет два API для работы с URL-адресами: устаревший API, специфичный для Node.js, и более новый API, реализующий тот же стандарт URL WHATWG, который используется веб-браузерами.
Ниже приведено сравнение API WHATWG и устаревшего API. Над URL 'https://user:[email protected]:8080/p/a/t/h?query=string#hash'
показаны свойства объекта, возвращаемого устаревшим url.parse()
. Ниже показаны свойства объекта WHATWG URL
.
Свойство 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 │
└────────────────────────────────────────────────────────────────────────────────────────────────┘
(Все пробелы в строке "" должны игнорироваться. Они предназначены исключительно для форматирования.)
Разбор строки URL с помощью API WHATWG:
const myURL = new URL('https://user::8080/p/a/t/h?query=string#hash')
Разбор строки URL с помощью устаревшего API:
import url from 'node:url'
const myURL = url.parse('https://user::8080/p/a/t/h?query=string#hash')
const url = require('node:url')
const myURL = url.parse('https://user::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'
const pathname = '/a/b/c'
const search = '?d=e'
const hash = '#fgh'
const myURL = new URL(`https://example.org${pathname}${search}${hash}`)
Чтобы получить созданную строку URL, используйте аксессор свойства href
:
console.log(myURL.href)
API WHATWG URL
Класс: 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
<строка> Абсолютный или относительный входной URL для анализа. Еслиinput
является относительным, то требуетсяbase
. Еслиinput
является абсолютным,base
игнорируется. Еслиinput
не является строкой, он сначала преобразуется в строку.base
<строка> Базовый URL для разрешения, еслиinput
не является абсолютным. Еслиbase
не является строкой, он сначала преобразуется в строку.
Создает новый объект URL
, анализируя input
относительно base
. Если base
передается как строка, он будет анализироваться эквивалентно new URL(base)
.
const myURL = new URL('/foo', 'https://example.org/')
// https://example.org/foo
Конструктор URL доступен как свойство глобального объекта. Его также можно импортировать из встроенного модуля url:
import { URL } from 'node:url'
console.log(URL === globalThis.URL) // Выводит 'true'.
console.log(URL === require('node:url').URL) // Выводит 'true'.
Будет выброшено исключение TypeError
, если input
или base
не являются допустимыми URL. Обратите внимание, что будет предпринята попытка принудительно преобразовать заданные значения в строки. Например:
const myURL = new URL({ toString: () => 'https://example.org/' })
// https://example.org/
Символы Юникода, появляющиеся в имени хоста input
, будут автоматически преобразованы в ASCII с использованием алгоритма Punycode.
const myURL = new URL('https://測試')
// https://xn--g6w251d/
В случаях, когда заранее неизвестно, является ли 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/
url.hash
Получает и устанавливает фрагмент URL.
const myURL = new URL('https://example.org/foo#bar')
console.log(myURL.hash)
// Выводит #bar
myURL.hash = 'baz'
console.log(myURL.href)
// Выводит https://example.org/foo#baz
Недопустимые символы URL, включенные в значение, присвоенное свойству hash
, кодируются в процентном формате. Выбор символов для процентного кодирования может несколько отличаться от того, что производят методы url.parse()
и url.format()
.
url.host
Получает и устанавливает часть хоста URL.
const myURL = new URL('https://example.org:81/foo')
console.log(myURL.host)
// Выводит example.org:81
myURL.host = 'example.com:82'
console.log(myURL.href)
// Выводит https://example.com:82/foo
Недопустимые значения хоста, присвоенные свойству host
, игнорируются.
url.hostname
Получает и устанавливает часть имени хоста URL. Ключевое различие между url.host
и url.hostname
заключается в том, что url.hostname
не включает порт.
const myURL = new URL('https://example.org:81/foo')
console.log(myURL.hostname)
// Выводит example.org
// Установка имени хоста не изменяет порт
myURL.hostname = 'example.com'
console.log(myURL.href)
// Выводит https://example.com:81/foo
// Используйте myURL.host для изменения имени хоста и порта
myURL.host = 'example.org:82'
console.log(myURL.href)
// Выводит https://example.org:82/foo
Недопустимые значения имени хоста, присвоенные свойству hostname
, игнорируются.
url.href
Получает и устанавливает сериализованный URL.
const myURL = new URL('https://example.org/foo')
console.log(myURL.href)
// Выводит https://example.org/foo
myURL.href = 'https://example.com/bar'
console.log(myURL.href)
// Выводит https://example.com/bar
Получение значения свойства href
эквивалентно вызову url.toString()
.
Установка значения этого свойства в новое значение эквивалентна созданию нового объекта URL
с помощью new URL(value)
. Все свойства объекта URL
будут изменены.
Если значение, присвоенное свойству href
, не является допустимым URL, будет выброшено исключение TypeError
.
url.origin
[История]
Версия | Изменения |
---|---|
v15.0.0 | Схема "gopher" больше не является специальной, и url.origin теперь возвращает 'null' для неё. |
Возвращает доступное только для чтения сериализованное представление начала URL.
const myURL = new URL('https://example.org/foo/bar?baz')
console.log(myURL.origin)
// Выводит https://example.org
const idnURL = new URL('https://測試')
console.log(idnURL.origin)
// Выводит https://xn--g6w251d
console.log(idnURL.hostname)
// Выводит xn--g6w251d
url.password
Возвращает и устанавливает часть URL, отвечающую за пароль.
const myURL = new URL('https://abc:')
console.log(myURL.password)
// Выводит xyz
myURL.password = '123'
console.log(myURL.href)
// Выводит https://abc:/
Недопустимые символы URL, включённые в значение, присвоенное свойству password
, подвергаются процентному кодированию. Выбор символов для процентного кодирования может несколько отличаться от того, что производили бы методы url.parse()
и url.format()
.
url.pathname
Возвращает и устанавливает часть URL, отвечающую за путь.
const myURL = new URL('https://example.org/abc/xyz?123')
console.log(myURL.pathname)
// Выводит /abc/xyz
myURL.pathname = '/abcdef'
console.log(myURL.href)
// Выводит https://example.org/abcdef?123
Недопустимые символы URL, включённые в значение, присвоенное свойству pathname
, подвергаются процентному кодированию. Выбор символов для процентного кодирования может несколько отличаться от того, что производили бы методы url.parse()
и url.format()
.
url.port
[История]
Версия | Изменения |
---|---|
v15.0.0 | Схема "gopher" больше не является специальной. |
Получает и устанавливает часть порта 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)
// Выводит 8888
// Порты по умолчанию автоматически преобразуются в пустую строку
// (порт по умолчанию для протокола HTTPS — 443)
myURL.port = '443'
console.log(myURL.port)
// Выводит пустую строку
console.log(myURL.href)
// Выводит https://example.org/
myURL.port = 1234
console.log(myURL.port)
// Выводит 1234
console.log(myURL.href)
// Выводит https://example.org:1234/
// Полностью неверные строки порта игнорируются
myURL.port = 'abcd'
console.log(myURL.port)
// Выводит 1234
// Ведущие числа обрабатываются как номер порта
myURL.port = '5678abcd'
console.log(myURL.port)
// Выводит 5678
// Нецелые числа усекаются
myURL.port = 1234.5678
console.log(myURL.port)
// Выводит 1234
// Вне диапазона числа, которые не представлены в экспоненциальной записи,
// будут игнорироваться.
myURL.port = 1e10 // 10000000000, будет проверено на соответствие диапазону, как описано ниже
console.log(myURL.port)
// Выводит 1234
Числа, содержащие десятичную точку, такие как числа с плавающей точкой или числа в экспоненциальной записи, не являются исключением из этого правила. Ведущие числа до десятичной точки будут установлены в качестве порта URL, если они допустимы:
myURL.port = 4.567e21
console.log(myURL.port)
// Выводит 4 (потому что это ведущее число в строке '4.567e21')
url.protocol
Получает и устанавливает часть протокола URL-адреса.
const myURL = new URL('https://example.org')
console.log(myURL.protocol)
// Выводит https:
myURL.protocol = 'ftp'
console.log(myURL.href)
// Выводит ftp://example.org/
Неверные значения протокола 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/
Однако изменение с http
на гипотетический протокол fish
не работает, потому что новый протокол не является специальным.
const u = new URL('http://example.org')
u.protocol = 'fish'
console.log(u.href)
// http://example.org/
Аналогично, изменение с неспециального протокола на специальный протокол также не допускается:
const u = new URL('fish://example.org')
u.protocol = 'http'
console.log(u.href)
// fish://example.org
Согласно стандарту WHATWG URL, специальными схемами протоколов являются ftp
, file
, http
, https
, ws
и wss
.
url.search
Получает и устанавливает сериализованную часть запроса URL-адреса.
const myURL = new URL('https://example.org/abc?123')
console.log(myURL.search)
// Выводит ?123
myURL.search = 'abc=xyz'
console.log(myURL.href)
// Выводит https://example.org/abc?abc=xyz
Любые недопустимые символы URL-адреса, появляющиеся в значении, присвоенном свойству search
, будут процентно-кодированы. Выбор символов для процентного кодирования может несколько отличаться от того, что будут производить методы url.parse()
и url.format()
.
url.searchParams
Возвращает объект 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) // выводит ?foo=~bar
// Изменение URL через searchParams...
myURL.searchParams.sort()
console.log(myURL.search) // выводит ?foo=%7Ebar
url.username
Возвращает и устанавливает часть имени пользователя URL-адреса.
const myURL = new URL('https://abc:')
console.log(myURL.username)
// Выводит abc
myURL.username = '123'
console.log(myURL.href)
// Выводит https://123:/
Любые недопустимые символы 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))
// Выводит ["https://www.example.com/","https://test.example.org/"]
URL.createObjectURL(blob)
Добавлено в: v16.7.0
[Stable: 1 - Experimental]
Stable: 1 Stability: 1 - Experimental
Создает строку URL 'blob:nodedata:...'
, представляющую заданный объект <Blob>, который может быть использован для последующего получения Blob
.
const { Blob, resolveObjectURL } = require('node:buffer')
const blob = new Blob(['hello'])
const id = URL.createObjectURL(blob)
// позже...
const otherBlob = resolveObjectURL(id)
console.log(otherBlob.size)
Данные, хранящиеся зарегистрированным объектом <Blob>, будут храниться в памяти до тех пор, пока не будет вызван URL.revokeObjectURL()
для их удаления.
Объекты Blob
регистрируются в текущем потоке. При использовании потоков Worker, объекты Blob
, зарегистрированные в одном Worker, будут недоступны для других worker'ов или основного потока.
URL.revokeObjectURL(id)
Добавлено в: v16.7.0
[Stable: 1 - Experimental]
Stable: 1 Stability: 1 - Experimental
id
<string> Строка URL'blob:nodedata:...
, возвращенная предыдущим вызовомURL.createObjectURL()
.
Удаляет хранящийся <Blob>, идентифицированный заданным ID. Попытка отозвать не зарегистрированный ID завершится без ошибок.
URL.canParse(input[, base])
Добавлено в: v19.9.0, v18.17.0
input
<строка> Абсолютный или относительный URL-адрес для анализа. Еслиinput
является относительным, тоbase
является обязательным. Еслиinput
является абсолютным, тоbase
игнорируется. Еслиinput
не является строкой, он сначала преобразуется в строку.base
<строка> Базовый URL-адрес для разрешения, еслиinput
не является абсолютным. Еслиbase
не является строкой, он сначала преобразуется в строку.- Возвращает: <булево>
Проверяет, может ли input
относительно base
быть разобран как URL
.
const isValid = URL.canParse('/foo', 'https://example.org/') // true
const isNotValid = URL.canParse('/foo') // false
URL.parse(input[, base])
Добавлено в: v22.1.0
input
<строка> Абсолютный или относительный URL-адрес для анализа. Еслиinput
является относительным, тоbase
является обязательным. Еслиinput
является абсолютным, тоbase
игнорируется. Еслиinput
не является строкой, он сначала преобразуется в строку.base
<строка> Базовый URL-адрес для разрешения, еслиinput
не является абсолютным. Еслиbase
не является строкой, он сначала преобразуется в строку.- Возвращает: <URL> | <null>
Разбирает строку как URL. Если base
предоставлен, он будет использоваться в качестве базового URL-адреса для разрешения неабсолютных URL-адресов input
. Возвращает null
, если input
не является допустимым.
Класс: 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'))
// Выводит 123
myURL.searchParams.append('abc', 'xyz')
console.log(myURL.href)
// Выводит https://example.org/?abc=123&abc=xyz
myURL.searchParams.delete('abc')
myURL.searchParams.set('a', 'b')
console.log(myURL.href)
// Выводит https://example.org/?a=b
const newSearchParams = new URLSearchParams(myURL.searchParams)
// Вышеприведенный код эквивалентен
// const newSearchParams = new URLSearchParams(myURL.search);
newSearchParams.append('a', 'c')
console.log(myURL.href)
// Выводит https://example.org/?a=b
console.log(newSearchParams.toString())
// Выводит a=b&a=c
// newSearchParams.toString() вызывается неявно
myURL.search = newSearchParams
console.log(myURL.href)
// Выводит https://example.org/?a=b&a=c
newSearchParams.delete('a')
console.log(myURL.href)
// Выводит https://example.org/?a=b&a=c
new URLSearchParams()
Создает новый пустой объект URLSearchParams
.
new URLSearchParams(string)
string
<строка> Строка запроса
Разбирает string
как строку запроса и использует ее для создания нового объекта URLSearchParams
. Ведущий символ '?'
, если он присутствует, игнорируется.
let params
params = new URLSearchParams('user=abc&query=xyz')
console.log(params.get('user'))
// Выводит 'abc'
console.log(params.toString())
// Выводит 'user=abc&query=xyz'
params = new URLSearchParams('?user=abc&query=xyz')
console.log(params.toString())
// Выводит 'user=abc&query=xyz'
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'))
// Выведет [ 'first,second' ]
console.log(params.toString())
// Выведет 'user=abc&query=first%2Csecond'
new URLSearchParams(iterable)
Добавлено в: v7.10.0, v6.13.0
iterable
<Iterable> Итерируемый объект, элементы которого представляют собой пары «ключ-значение»
Создает новый объект URLSearchParams
с помощью итерируемой карты, подобно конструктору Map
. iterable
может быть Array
или любым итерируемым объектом. Это означает, что iterable
может быть другим URLSearchParams
, в этом случае конструктор просто создаст клон предоставленного URLSearchParams
. Элементы iterable
представляют собой пары «ключ-значение» и сами могут быть любыми итерируемыми объектами.
Дубликаты ключей допускаются.
let params
// Использование массива
params = new URLSearchParams([
['user', 'abc'],
['query', 'first'],
['query', 'second'],
])
console.log(params.toString())
// Выведет 'user=abc&query=first&query=second'
// Использование объекта Map
const map = new Map()
map.set('user', 'abc')
map.set('query', 'xyz')
params = new URLSearchParams(map)
console.log(params.toString())
// Выведет 'user=abc&query=xyz'
// Использование функции-генератора
function* getQueryPairs() {
yield ['user', 'abc']
yield ['query', 'first']
yield ['query', 'second']
}
params = new URLSearchParams(getQueryPairs())
console.log(params.toString())
// Выведет 'user=abc&query=first&query=second'
// Каждая пара ключ-значение должна содержать ровно два элемента
new URLSearchParams([['user', 'abc', 'error']])
// Выбросит TypeError [ERR_INVALID_TUPLE]:
// Каждая пара запроса должна быть итерируемым кортежем [имя, значение]
urlSearchParams.append(name, value)
Добавляет новую пару «имя-значение» в строку запроса.
urlSearchParams.delete(name[, value])
[История]
Версия | Изменения |
---|---|
v20.2.0, v18.18.0 | Добавлена поддержка необязательного аргумента value . |
Если указан value
, удаляет все пары «имя-значение», где имя — это name
, а значение — это value
.
Если value
не указан, удаляет все пары «имя-значение», имя которых равно name
.
urlSearchParams.entries()
- Возвращает: <Итератор>
Возвращает итератор ES6 для каждой пары «имя-значение» в запросе. Каждый элемент итератора — это массив JavaScript. Первый элемент массива — это name
, второй элемент массива — это value
.
Псевдоним для urlSearchParams[@@iterator]()
.
urlSearchParams.forEach(fn[, thisArg])
[История]
Версия | Изменения |
---|---|
v18.0.0 | Передача недопустимого обратного вызова в аргумент fn теперь вызывает ERR_INVALID_ARG_TYPE вместо ERR_INVALID_CALLBACK . |
fn
<Функция> Вызывается для каждой пары «имя-значение» в запросеthisArg
<Объект> Используется в качестве значения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)
})
// Выводит:
// a b true
// c d true
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 . |
Проверяет, содержит ли объект URLSearchParams
пару(ы) ключ-значение на основе name
и необязательного аргумента value
.
Если value
указан, возвращает true
, если существует пара имя-значение с тем же name
и value
.
Если value
не указан, возвращает true
, если существует хотя бы одна пара имя-значение, имя которой — name
.
urlSearchParams.keys()
- Возвращает: <Iterator>
Возвращает итератор ES6 по именам каждой пары имя-значение.
const params = new URLSearchParams('foo=bar&foo=baz')
for (const name of params.keys()) {
console.log(name)
}
// Выводит:
// foo
// foo
urlSearchParams.set(name, value)
Устанавливает значение в объекте URLSearchParams
, связанное с name
, равное value
. Если уже существуют пары «имя-значение», имена которых совпадают с name
, устанавливает значение первой такой пары равным value
и удаляет все остальные. В противном случае добавляет пару «имя-значение» к строке запроса.
const params = new URLSearchParams()
params.append('foo', 'bar')
params.append('foo', 'baz')
params.append('abc', 'def')
console.log(params.toString())
// Выводит foo=bar&foo=baz&abc=def
params.set('foo', 'def')
params.set('xyz', 'opq')
console.log(params.toString())
// Выводит foo=def&abc=def&xyz=opq
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())
// Выводит query%5B%5D=abc&query%5B%5D=123&type=search
urlSearchParams.toString()
- Возвращает: <string>
Возвращает параметры поиска, сериализованные в виде строки, с символами, закодированными в процентах, где это необходимо.
urlSearchParams.values()
- Возвращает: <Iterator>
Возвращает итератор ES6 для значений каждой пары «имя-значение».
urlSearchParams[Symbol.iterator]()
- Возвращает: <Iterator>
Возвращает итератор ES6 для каждой пары имя-значение в строке запроса. Каждый элемент итератора — это массив JavaScript. Первый элемент массива — это name
, второй элемент массива — это value
.
Псевдоним для urlSearchParams.entries()
.
const params = new URLSearchParams('foo=bar&xyz=baz')
for (const [name, value] of params) {
console.log(name, value)
}
// Выводит:
// foo bar
// xyz baz
url.domainToASCII(domain)
[История]
Версия | Изменения |
---|---|
v20.0.0, v18.17.0 | Удалено требование ICU. |
v7.4.0, v6.13.0 | Добавлено в: v7.4.0, v6.13.0 |
Возвращает ASCII-сериализацию domain
в кодировке Punycode. Если domain
— недопустимый домен, возвращается пустая строка.
Выполняет обратную операцию к url.domainToUnicode()
.
import url from 'node:url'
console.log(url.domainToASCII('español.com'))
// Выводит xn--espaol-zwa.com
console.log(url.domainToASCII('中文.com'))
// Выводит xn--fiq228c.com
console.log(url.domainToASCII('xn--iñvalid.com'))
// Выводит пустую строку
const url = require('node:url')
console.log(url.domainToASCII('español.com'))
// Выводит xn--espaol-zwa.com
console.log(url.domainToASCII('中文.com'))
// Выводит xn--fiq228c.com
console.log(url.domainToASCII('xn--iñvalid.com'))
// Выводит пустую строку
url.domainToUnicode(domain)
[История]
Версия | Изменения |
---|---|
v20.0.0, v18.17.0 | Удалено требование ICU. |
v7.4.0, v6.13.0 | Добавлено в: v7.4.0, v6.13.0 |
Возвращает Юникод-сериализацию domain
. Если domain
— недопустимый домен, возвращается пустая строка.
Выполняет обратную операцию к url.domainToASCII()
.
import url from 'node:url'
console.log(url.domainToUnicode('xn--espaol-zwa.com'))
// Выводит español.com
console.log(url.domainToUnicode('xn--fiq228c.com'))
// Выводит 中文.com
console.log(url.domainToUnicode('xn--iñvalid.com'))
// Выводит пустую строку
const url = require('node:url')
console.log(url.domainToUnicode('xn--espaol-zwa.com'))
// Выводит español.com
console.log(url.domainToUnicode('xn--fiq228c.com'))
// Выводит 中文.com
console.log(url.domainToUnicode('xn--iñvalid.com'))
// Выводит пустую строку
url.fileURLToPath(url[, options])
[История]
Версия | Изменения |
---|---|
v22.1.0, v20.13.0 | Теперь аргумент options можно использовать для определения способа анализа аргумента path . |
v10.12.0 | Добавлено в: v10.12.0 |
url
<URL> | <строка> Строка URL файла или объект URL для преобразования в путь.options
<Объект>windows
<булево> | <неопределено>true
, еслиpath
должен возвращаться как путь к файлу Windows,false
для POSIX иundefined
для системных значений по умолчанию. По умолчанию:undefined
.
Возвращает: <строка> Полностью разрешенный путь к файлу Node.js, зависящий от платформы.
Эта функция обеспечивает правильное декодирование символов, закодированных в процентах, а также гарантирует создание правильной абсолютной строки пути для разных платформ.
import { fileURLToPath } from 'node:url'
const __filename = fileURLToPath(import.meta.url)
new URL('file:///C:/path/').pathname // Неверно: /C:/path/
fileURLToPath('file:///C:/path/') // Верно: C:\path\ (Windows)
new URL('file://nas/foo.txt').pathname // Неверно: /foo.txt
fileURLToPath('file://nas/foo.txt') // Верно: \\nas\foo.txt (Windows)
new URL('file:///你好.txt').pathname // Неверно: /%E4%BD%A0%E5%A5%BD.txt
fileURLToPath('file:///你好.txt') // Верно: /你好.txt (POSIX)
new URL('file:///hello world').pathname // Неверно: /hello%20world
fileURLToPath('file:///hello world') // Верно: /hello world (POSIX)
const { fileURLToPath } = require('node:url')
new URL('file:///C:/path/').pathname // Неверно: /C:/path/
fileURLToPath('file:///C:/path/') // Верно: C:\path\ (Windows)
new URL('file://nas/foo.txt').pathname // Неверно: /foo.txt
fileURLToPath('file://nas/foo.txt') // Верно: \\nas\foo.txt (Windows)
new URL('file:///你好.txt').pathname // Неверно: /%E4%BD%A0%E5%A5%BD.txt
fileURLToPath('file:///你好.txt') // Верно: /你好.txt (POSIX)
new URL('file:///hello world').pathname // Неверно: /hello%20world
fileURLToPath('file:///hello world') // Верно: /hello world (POSIX)
url.format(URL[, options])
Добавлено в: v7.6.0
URL
<URL> Объект WHATWG URLoptions
<Object>auth
<boolean>true
, если строковое представление URL должно включать имя пользователя и пароль,false
в противном случае. По умолчанию:true
.fragment
<boolean>true
, если строковое представление URL должно включать фрагмент,false
в противном случае. По умолчанию:true
.search
<boolean>true
, если строковое представление URL должно включать поисковый запрос,false
в противном случае. По умолчанию:true
.unicode
<boolean>true
, если символы Unicode, встречающиеся в компоненте host строкового представления URL, должны кодироваться напрямую, а не кодироваться Punycode. По умолчанию:false
.
Возвращает: <string>
Возвращает настраиваемое строковое представление WHATWG URL объекта.
Объект URL имеет как метод toString()
, так и свойство href
, которые возвращают строковые представления URL. Однако они не являются настраиваемыми. Метод url.format(URL[, options])
позволяет выполнить базовую настройку вывода.
import url from 'node:url'
const myURL = new URL('https://a:b@測試?abc#foo')
console.log(myURL.href)
// Выводит https://a:b@xn--g6w251d/?abc#foo
console.log(myURL.toString())
// Выводит https://a:b@xn--g6w251d/?abc#foo
console.log(url.format(myURL, { fragment: false, unicode: true, auth: false }))
// Выводит 'https://測試/?abc'
const url = require('node:url')
const myURL = new URL('https://a:b@測試?abc#foo')
console.log(myURL.href)
// Выводит https://a:b@xn--g6w251d/?abc#foo
console.log(myURL.toString())
// Выводит https://a:b@xn--g6w251d/?abc#foo
console.log(url.format(myURL, { fragment: false, unicode: true, auth: false }))
// Выводит 'https://測試/?abc'
url.pathToFileURL(path[, options])
[История]
Версия | Изменения |
---|---|
v22.1.0, v20.13.0 | Теперь аргумент options можно использовать для определения способа возвращения значения path . |
v10.12.0 | Добавлено в: v10.12.0 |
path
<строка> Путь, который нужно преобразовать в URL файла.options
<Объект>windows
<булево> | <неопределено>true
, еслиpath
должен обрабатываться как путь к файлу в Windows,false
для POSIX иundefined
для системных значений по умолчанию. По умолчанию:undefined
.
Возвращает: <URL> Объект URL файла.
Эта функция гарантирует, что path
разрешается абсолютно, и что управляющие символы URL правильно кодируются при преобразовании в URL файла.
import { pathToFileURL } from 'node:url'
new URL('/foo#1', 'file:') // Неверно: file:///foo#1
pathToFileURL('/foo#1') // Верно: file:///foo%231 (POSIX)
new URL('/some/path%.c', 'file:') // Неверно: file:///some/path%.c
pathToFileURL('/some/path%.c') // Верно: file:///some/path%25.c (POSIX)
const { pathToFileURL } = require('node:url')
new URL(__filename) // Неверно: вызывает ошибку (POSIX)
new URL(__filename) // Неверно: C:\... (Windows)
pathToFileURL(__filename) // Верно: file:///... (POSIX)
pathToFileURL(__filename) // Верно: file:///C:/... (Windows)
new URL('/foo#1', 'file:') // Неверно: file:///foo#1
pathToFileURL('/foo#1') // Верно: file:///foo%231 (POSIX)
new URL('/some/path%.c', 'file:') // Неверно: file:///some/path%.c
pathToFileURL('/some/path%.c') // Верно: 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()
.
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'
}
*/
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 - Устаревший]
Стабильность: 3 Стабильность: 3 - Устаревший: Используйте API URL WHATWG вместо этого.
Устаревший urlObject
[История]
Версия | Изменения |
---|---|
v15.13.0, v14.17.0 | Отмена снятия с поддержки. Статус изменён на "Устаревший". |
v11.0.0 | Устаревший API URL снят с поддержки. Используйте API URL WHATWG. |
[Стабильность: 3 - Устаревший]
Стабильность: 3 Стабильность: 3 - Устаревший: Используйте API URL WHATWG вместо этого.
Устаревший 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
. Является ли свойство 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 без протокола теперь также всегда учитывается. |
v0.1.25 | Добавлено в: v0.1.25 |
[Стабильно: 3 - Устаревший]
Стабильно: 3 Стабильность: 3 - Устаревший: Используйте вместо этого API URL WHATWG.
urlObject
<Объект> | <строка> Объект 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'
Если 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 - Устарело]
Стабильность: 0 Стабильность: 0 - Устарело: Используйте API URL WHATWG вместо этого.
urlString
<строка> Строка URL для анализа.parseQueryString
<булево> Еслиtrue
, свойствоquery
всегда будет установлено в объект, возвращаемый методомparse()
модуляquerystring
. Еслиfalse
, свойствоquery
в возвращаемом объекте URL будет необработанной, нераскодированной строкой. По умолчанию:false
.slashesDenoteHost
<булево> Если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 WHATWG URL.
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 |
[Стабильность: 3 - Устаревший]
Стабильность: 3 Стабильность: 3 - Устаревший: Используйте API URL WHATWG вместо этого.
from
<строка> Базовый URL, который будет использоваться, еслиto
является относительным URL.to
<строка> Целевой 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'
Чтобы достичь того же результата с использованием API URL WHATWG:
function resolve(from, to) {
const resolvedUrl = new URL(to, new URL(from, 'resolve://'))
if (resolvedUrl.protocol === 'resolve:') {
// `from` является относительным 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'
Процентное кодирование в URL
URL допускают использование только определенного диапазона символов. Любой символ, выходящий за этот диапазон, должен быть закодирован. Способ кодирования таких символов и то, какие символы кодировать, полностью зависят от того, где символ находится в структуре URL.
Устаревший API
В устаревшем API пробелы (' '
) и следующие символы будут автоматически экранироваться в свойствах объектов URL:
< > " ` \r \n \t { } | \ ^ '
Например, символ 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)
// Выведет https://xn--1xa.example.com/foo
console.log(myURL.origin)
// Выведет https://xn--1xa.example.com