URL
소스 코드: lib/url.js
node:url
모듈은 URL 확인 및 구문 분석을 위한 유틸리티를 제공합니다. 다음을 사용하여 액세스할 수 있습니다:
import url from 'node:url'
const url = require('node:url')
URL 문자열과 URL 객체
URL 문자열은 의미 있는 여러 구성 요소를 포함하는 구조화된 문자열입니다. 구문 분석되면 이러한 각 구성 요소에 대한 속성을 포함하는 URL 객체가 반환됩니다.
node:url
모듈은 URL 작업을 위한 두 가지 API를 제공합니다. 하나는 Node.js 특정의 레거시 API이고 다른 하나는 웹 브라우저에서 사용되는 것과 동일한 WHATWG URL 표준을 구현하는 최신 API입니다.
WHATWG와 레거시 API의 비교는 아래에 제공됩니다. URL 'https://user:[email protected]:8080/p/a/t/h?query=string#hash'
위에 레거시 url.parse()
에서 반환된 객체의 속성이 표시됩니다. 아래에는 WHATWG URL
객체의 속성이 표시됩니다.
WHATWG URL의 origin
속성에는 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 │
└────────────────────────────────────────────────────────────────────────────────────────────────┘
( "" 줄의 모든 공백은 무시해야 합니다. 순전히 형식을 위한 것입니다.)
WHATWG API를 사용하여 URL 문자열 구문 분석:
const myURL = new URL('https://user::8080/p/a/t/h?query=string#hash')
레거시 API를 사용하여 URL 문자열 구문 분석:
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 구성 및 구성된 문자열 가져오기
속성 설정자 또는 템플릿 리터럴 문자열을 사용하여 구성 요소 부분에서 WHATWG URL을 구성할 수 있습니다.
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)
WHATWG URL API
클래스: URL
[기록]
버전 | 변경 사항 |
---|---|
v10.0.0 | 이제 클래스를 전역 객체에서 사용할 수 있습니다. |
v7.0.0, v6.13.0 | 다음에서 추가됨: v7.0.0, v6.13.0 |
WHATWG URL 표준에 따라 구현된 브라우저 호환 URL
클래스입니다. 구문 분석된 URL의 예는 표준 자체에서 찾을 수 있습니다. URL
클래스는 전역 객체에서도 사용할 수 있습니다.
브라우저 규칙에 따라 URL
객체의 모든 속성은 객체 자체의 데이터 속성 대신 클래스 프로토타입에서 getter 및 setter로 구현됩니다. 따라서 레거시 urlObject
와 달리 URL
객체의 모든 속성(예: delete myURL.protocol
, delete myURL.pathname
등)에서 delete
키워드를 사용해도 아무런 효과가 없지만 여전히 true
를 반환합니다.
new URL(input[, base])
[기록]
버전 | 변경 사항 |
---|---|
v20.0.0, v18.17.0 | ICU 요구 사항이 제거되었습니다. |
input
<string> 구문 분석할 절대 또는 상대 입력 URL입니다.input
이 상대적인 경우base
가 필요합니다.input
이 절대적인 경우base
는 무시됩니다.input
이 문자열이 아니면 먼저 문자열로 변환됩니다.base
<string>input
이 절대적이지 않은 경우 기준으로 확인할 기본 URL입니다.base
가 문자열이 아니면 먼저 문자열로 변환됩니다.
base
에 상대적인 input
을 구문 분석하여 새 URL
객체를 만듭니다. 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' 출력.
input
또는 base
가 유효한 URL이 아니면 TypeError
가 발생합니다. 제공된 값을 문자열로 강제 변환하려는 시도가 이루어질 것입니다. 예를 들면 다음과 같습니다.
const myURL = new URL({ toString: () => 'https://example.org/' })
// https://example.org/
input
의 호스트 이름 내에 나타나는 유니코드 문자는 Punycode 알고리즘을 사용하여 자동으로 ASCII로 변환됩니다.
const myURL = new URL('https://測試')
// https://xn--g6w251d/
input
이 절대 URL인지 미리 알 수 없고 base
가 제공되는 경우 URL
객체의 origin
이 예상한 것인지 확인하는 것이 좋습니다.
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의 fragment 부분을 가져오거나 설정합니다.
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 출력
hash
속성에 할당된 값에 포함된 유효하지 않은 URL 문자는 퍼센트 인코딩됩니다. 퍼센트 인코딩할 문자를 선택하는 것은 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()
을 호출하는 것과 같습니다.
이 속성의 값을 새 값으로 설정하는 것은 new URL(value)
를 사용하여 새 URL
객체를 만드는 것과 같습니다. 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:/ 인쇄
password
속성에 할당된 값에 포함된 유효하지 않은 URL 문자는 퍼센트 인코딩됩니다. 퍼센트 인코딩할 문자의 선택은 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 인쇄
pathname
속성에 할당된 값에 포함된 유효하지 않은 URL 문자는 퍼센트 인코딩됩니다. 퍼센트 인코딩할 문자의 선택은 url.parse()
및 url.format()
메서드에서 생성되는 것과 다소 다를 수 있습니다.
url.port
[History]
Version | Changes |
---|---|
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)
// Prints https:
myURL.protocol = 'ftp'
console.log(myURL.href)
// Prints ftp://example.org/
protocol
속성에 할당된 잘못된 URL 프로토콜 값은 무시됩니다.
특수 스킴
[기록]
버전 | 변경 사항 |
---|---|
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)
// Prints ?123
myURL.search = 'abc=xyz'
console.log(myURL.href)
// Prints https://example.org/abc?abc=xyz
search
속성에 할당된 값에 나타나는 잘못된 URL 문자는 퍼센트 인코딩됩니다. 퍼센트 인코딩할 문자의 선택은 url.parse()
및 url.format()
메서드에서 생성하는 것과 다소 다를 수 있습니다.
url.searchParams
URL의 쿼리 매개변수를 나타내는 URLSearchParams
객체를 가져옵니다. 이 속성은 읽기 전용이지만, 제공되는 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 출력
// searchParams를 통해 URL 수정...
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:/ 출력
username
속성에 할당된 값에 잘못된 URL 문자가 나타나면 퍼센트 인코딩됩니다. 퍼센트 인코딩할 문자의 선택은 url.parse()
및 url.format()
메서드가 생성하는 것과 다소 다를 수 있습니다.
url.toString()
- 반환: <string>
URL
객체의 toString()
메서드는 직렬화된 URL을 반환합니다. 반환된 값은 url.href
및 url.toJSON()
의 값과 동일합니다.
url.toJSON()
추가된 버전: v7.7.0, v6.13.0
- 반환값: <string>
URL
객체의 toJSON()
메서드는 직렬화된 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/"]
URL.createObjectURL(blob)
추가된 버전: v16.7.0
주어진 <Blob> 객체를 나타내는 'blob:nodedata:...'
URL 문자열을 생성하고 나중에 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)
등록된 <Blob>에 의해 저장된 데이터는 URL.revokeObjectURL()
이 호출되어 제거될 때까지 메모리에 보관됩니다.
Blob
객체는 현재 스레드 내에 등록됩니다. 워커 스레드를 사용하는 경우, 한 워커 내에 등록된 Blob
객체는 다른 워커 또는 메인 스레드에서 사용할 수 없습니다.
URL.revokeObjectURL(id)
추가된 버전: v16.7.0
id
<string> 이전의URL.createObjectURL()
호출에서 반환된'blob:nodedata:...
URL 문자열입니다.
주어진 ID로 식별되는 저장된 <Blob>을 제거합니다. 등록되지 않은 ID를 취소하려고 하면 아무런 오류 없이 실패합니다.
URL.canParse(input[, base])
Added in: v19.9.0, v18.17.0
input
<string> 파싱할 절대 또는 상대 입력 URL입니다.input
이 상대적인 경우,base
가 필요합니다.input
이 절대적인 경우,base
는 무시됩니다.input
이 문자열이 아니면 먼저 문자열로 변환됩니다.base
<string>input
이 절대적이지 않은 경우에 대해 확인하기 위한 기준 URL입니다.base
가 문자열이 아니면 먼저 문자열로 변환됩니다.- Returns: <boolean>
base
에 대한 상대적인 input
이 URL
로 파싱될 수 있는지 확인합니다.
const isValid = URL.canParse('/foo', 'https://example.org/') // true
const isNotValid = URL.canParse('/foo') // false
URL.parse(input[, base])
Added in: v22.1.0
input
<string> 파싱할 절대 또는 상대 입력 URL입니다.input
이 상대적인 경우,base
가 필요합니다.input
이 절대적인 경우,base
는 무시됩니다.input
이 문자열이 아니면 먼저 문자열로 변환됩니다.base
<string>input
이 절대적이지 않은 경우에 대해 확인하기 위한 기준 URL입니다.base
가 문자열이 아니면 먼저 문자열로 변환됩니다.- Returns: <URL> | <null>
문자열을 URL로 파싱합니다. base
가 제공되면, 절대적이지 않은 input
URL을 확인하기 위해 기준 URL로 사용됩니다. input
이 유효하지 않으면 null
을 반환합니다.
클래스: URLSearchParams
[기록]
버전 | 변경 사항 |
---|---|
v10.0.0 | 이제 클래스를 전역 객체에서 사용할 수 있습니다. |
v7.5.0, v6.13.0 | 추가됨: v7.5.0, v6.13.0 |
URLSearchParams
API는 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> 쿼리 문자열
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)
Added in: 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'
new URLSearchParams(iterable)
Added in: v7.10.0, v6.13.0
iterable
<Iterable> 요소가 키-값 쌍인 반복 가능한 객체
Map
의 생성자와 유사한 방식으로 반복 가능한 맵을 사용하여 새로운 URLSearchParams
객체를 인스턴스화합니다. iterable
은 Array
또는 임의의 반복 가능한 객체일 수 있습니다. 즉, iterable
은 다른 URLSearchParams
일 수도 있으며, 이 경우 생성자는 제공된 URLSearchParams
의 복사본을 생성합니다. iterable
의 요소는 키-값 쌍이며, 그 자체로 임의의 반복 가능한 객체일 수 있습니다.
중복 키는 허용됩니다.
let params
// 배열 사용
params = new URLSearchParams([
['user', 'abc'],
['query', 'first'],
['query', 'second'],
])
console.log(params.toString())
// Prints '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())
// Prints 'user=abc&query=xyz'
// 생성기 함수 사용
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'
// 각 키-값 쌍은 정확히 두 개의 요소를 가져야 합니다.
new URLSearchParams([['user', 'abc', 'error']])
// Throws TypeError [ERR_INVALID_TUPLE]:
// 각 쿼리 쌍은 반복 가능한 [name, value] 튜플이어야 합니다.
urlSearchParams.append(name, value)
새로운 이름-값 쌍을 쿼리 문자열에 추가합니다.
urlSearchParams.delete(name[, value])
[기록]
버전 | 변경 사항 |
---|---|
v20.2.0, v18.18.0 | 선택적 value 인수에 대한 지원을 추가합니다. |
value
가 제공되면 이름이 name
이고 값이 value
인 모든 이름-값 쌍을 제거합니다.
value
가 제공되지 않으면 이름이 name
인 모든 이름-값 쌍을 제거합니다.
urlSearchParams.entries()
- 반환: <Iterator>
쿼리에서 각 이름-값 쌍에 대한 ES6 Iterator
를 반환합니다. 이터레이터의 각 항목은 JavaScript Array
입니다. Array
의 첫 번째 항목은 name
이고 Array
의 두 번째 항목은 value
입니다.
urlSearchParams[@@iterator]()
의 별칭입니다.
urlSearchParams.forEach(fn[, thisArg])
[기록]
버전 | 변경 사항 |
---|---|
v18.0.0 | fn 인수에 잘못된 콜백을 전달하면 ERR_INVALID_CALLBACK 대신 ERR_INVALID_ARG_TYPE 이(가) 발생합니다. |
fn
<Function> 쿼리의 각 이름-값 쌍에 대해 호출됩니다.thisArg
<Object>fn
이(가) 호출될 때this
값으로 사용됩니다.
쿼리의 각 이름-값 쌍을 반복하고 주어진 함수를 호출합니다.
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
인 첫 번째 이름-값 쌍의 값을 반환합니다. 그러한 쌍이 없으면 null
이 반환됩니다.
urlSearchParams.getAll(name)
name
<string>- 반환 값: <string[]>
이름이 name
인 모든 이름-값 쌍의 값을 반환합니다. 그러한 쌍이 없으면 빈 배열이 반환됩니다.
urlSearchParams.has(name[, value])
[기록]
버전 | 변경 사항 |
---|---|
v20.2.0, v18.18.0 | 선택적 value 인수 지원 추가. |
name
과 선택적 value
인수를 기반으로 URLSearchParams
객체에 키-값 쌍이 있는지 확인합니다.
value
가 제공되면 동일한 name
및 value
를 가진 이름-값 쌍이 존재할 때 true
를 반환합니다.
value
가 제공되지 않으면 이름이 name
인 이름-값 쌍이 하나 이상 있으면 true
를 반환합니다.
urlSearchParams.keys()
- 반환 값: <Iterator>
각 이름-값 쌍의 이름에 대한 ES6 Iterator
를 반환합니다.
const params = new URLSearchParams('foo=bar&foo=baz')
for (const name of params.keys()) {
console.log(name)
}
// 출력:
// foo
// foo
urlSearchParams.set(name, value)
name
과 연결된 URLSearchParams
객체의 값을 value
로 설정합니다. 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
urlSearchParams.size
Added in: v19.8.0, v18.16.0
총 매개변수 항목 수입니다.
urlSearchParams.sort()
Added in: 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
urlSearchParams.toString()
- Returns: <string>
필요한 경우 문자를 퍼센트 인코딩하여 직렬화된 검색 매개변수를 문자열로 반환합니다.
urlSearchParams.values()
- Returns: <Iterator>
각 이름-값 쌍의 값에 대한 ES6 Iterator
를 반환합니다.
urlSearchParams[Symbol.iterator]()
- 반환값: <Iterator>
쿼리 문자열에 있는 각 이름-값 쌍에 대한 ES6 Iterator
를 반환합니다. 이터레이터의 각 항목은 JavaScript Array
입니다. Array
의 첫 번째 항목은 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 |
domain
의 퓨니코드 ASCII 직렬화를 반환합니다. 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])
[History]
버전 | 변경 사항 |
---|---|
v22.1.0, v20.13.0 | 이제 options 인수를 사용하여 path 인수를 구문 분석하는 방법을 결정할 수 있습니다. |
v10.12.0 | v10.12.0에 추가됨 |
options
<Object>windows
<boolean> | <undefined>path
를 windows 파일 경로로 반환해야 하는 경우true
, posix의 경우false
, 시스템 기본값의 경우undefined
입니다. 기본값:undefined
.
반환값: <string> 완전히 확인된 플랫폼별 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 URL 객체options
<Object>auth
<boolean> 직렬화된 URL 문자열에 사용자 이름과 암호를 포함해야 하는 경우true
, 그렇지 않은 경우false
. 기본값:true
.fragment
<boolean> 직렬화된 URL 문자열에 프래그먼트를 포함해야 하는 경우true
, 그렇지 않은 경우false
. 기본값:true
.search
<boolean> 직렬화된 URL 문자열에 검색 쿼리를 포함해야 하는 경우true
, 그렇지 않은 경우false
. 기본값:true
.unicode
<boolean> URL 문자열의 호스트 구성 요소에 나타나는 유니코드 문자를 Punycode로 인코딩하는 대신 직접 인코딩해야 하는 경우true
. 기본값:false
.
반환값: <string>
WHATWG URL 객체의 URL String
표현의 사용자 정의 가능한 직렬화를 반환합니다.
URL 객체에는 URL의 문자열 직렬화를 반환하는 toString()
메서드와 href
속성이 모두 있습니다. 그러나 이러한 속성은 어떤 방식으로든 사용자 정의할 수 없습니다. 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])
[History]
Version | Changes |
---|---|
v22.1.0, v20.13.0 | 이제 options 인수를 사용하여 path 값을 반환하는 방법을 결정할 수 있습니다. |
v10.12.0 | v10.12.0에 추가됨 |
path
<string> 파일 URL로 변환할 경로입니다.options
<Object>windows
<boolean> | <undefined>path
를 Windows 파일 경로로 처리해야 하는 경우true
, posix의 경우false
, 시스템 기본값의 경우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)
[History]
버전 | 변경 사항 |
---|---|
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> 기본 인증, 즉 Authorization 헤더를 계산하기 위한'user:password'
입니다.
이 유틸리티 함수는 URL 객체를 http.request()
및 https.request()
API에서 예상하는 일반 옵션 객체로 변환합니다.
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'
}
*/
레거시 URL API
[기록]
버전 | 변경 사항 |
---|---|
v15.13.0, v14.17.0 | 폐지 철회. 상태가 "레거시"로 변경되었습니다. |
v11.0.0 | 이 API는 폐지되었습니다. |
레거시 urlObject
[기록]
버전 | 변경 사항 |
---|---|
v15.13.0, v14.17.0 | 폐지 철회. 상태가 "레거시"로 변경되었습니다. |
v11.0.0 | 레거시 URL API가 폐지되었습니다. WHATWG URL API를 사용하세요. |
레거시 urlObject
(require('node:url').Url
또는 import { Url } from 'node:url'
)는 url.parse()
함수에 의해 생성되고 반환됩니다.
urlObject.auth
auth
속성은 URL의 사용자 이름 및 암호 부분이며 userinfo라고도 합니다. 이 문자열 하위 집합은 protocol
과 이중 슬래시(있는 경우)를 따르고 host
구성 요소 앞에 나오며 @
로 구분됩니다. 문자열은 사용자 이름이거나 콜론(:
)으로 구분된 사용자 이름과 암호입니다.
예: 'user:pass'
.
urlObject.hash
hash
속성은 선행 #
문자를 포함한 URL의 프래그먼트 식별자 부분입니다.
예: '#hash'
.
urlObject.host
host
속성은 지정된 경우 port
를 포함하여 URL의 전체 소문자 호스트 부분입니다.
예: 'sub.example.com:8080'
.
urlObject.hostname
hostname
속성은 port
를 포함 하지 않는 host
구성 요소의 소문자 호스트 이름 부분입니다.
예: 'sub.example.com'
.
urlObject.href
href
속성은 protocol
과 host
구성 요소가 모두 소문자로 변환된, 구문 분석된 전체 URL 문자열입니다.
예: '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 물음표(?
)가 없는 쿼리 문자열이거나 querystring
모듈의 parse()
메서드에서 반환된 객체입니다. query
속성이 문자열인지 객체인지는 url.parse()
에 전달된 parseQueryString
인수에 의해 결정됩니다.
예: 'query=string'
또는 {'query': 'string'}
.
문자열로 반환되는 경우 쿼리 문자열의 디코딩은 수행되지 않습니다. 객체로 반환되는 경우 키와 값 모두 디코딩됩니다.
urlObject.search
search
속성은 앞의 ASCII 물음표(?
) 문자를 포함하여 URL의 전체 "쿼리 문자열" 부분으로 구성됩니다.
예: '?query=string'
.
쿼리 문자열의 디코딩은 수행되지 않습니다.
urlObject.slashes
slashes
속성은 protocol
에서 콜론 뒤에 두 개의 ASCII 슬래시 문자(//
)가 필요한 경우 true
값을 갖는 boolean
입니다.
url.format(urlObject)
[기록]
버전 | 변경 사항 |
---|---|
v17.0.0 | 호스트 이름의 Punycode 변환으로 인해 URL이 다르게 재분석될 수 있는 변경 사항이 발생하는 경우 이제 ERR_INVALID_URL 예외를 throw합니다. |
v15.13.0, v14.17.0 | 더 이상 사용되지 않는 상태가 취소되었습니다. 상태가 "레거시"로 변경되었습니다. |
v11.0.0 | 레거시 URL API는 더 이상 사용되지 않습니다. WHATWG URL API를 사용하세요. |
v7.0.0 | file: 체계의 URL은 이제 slashes 옵션에 관계없이 항상 올바른 슬래시 수를 사용합니다. 프로토콜이 없는 거짓 slashes 옵션도 이제 항상 준수됩니다. |
v0.1.25 | v0.1.25에 추가됨 |
urlObject
<Object> | <string> URL 객체(url.parse()
에서 반환되거나 다른 방법으로 구성됨). 문자열인 경우url.parse()
에 전달하여 객체로 변환됩니다.
url.format()
메서드는 urlObject
에서 파생된 형식이 지정된 URL 문자열을 반환합니다.
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
를 throw합니다.
형식 지정 프로세스는 다음과 같이 작동합니다.
새 빈 문자열
result
가 생성됩니다.urlObject.protocol
이 문자열인 경우 있는 그대로result
에 추가됩니다.그렇지 않고
urlObject.protocol
이undefined
가 아니고 문자열이 아니면Error
가 throw됩니다.ASCII 콜론(
:
) 문자로 끝나지 않는urlObject.protocol
의 모든 문자열 값의 경우 리터럴 문자열:
이result
에 추가됩니다.다음 조건 중 하나라도 참이면 리터럴 문자열
//
가result
에 추가됩니다.urlObject.slashes
속성이 true입니다.urlObject.protocol
이http
,https
,ftp
,gopher
또는file
로 시작합니다.
urlObject.auth
속성의 값이 true이고urlObject.host
또는urlObject.hostname
이undefined
가 아닌 경우urlObject.auth
의 값이 문자열로 강제 변환되고 리터럴 문자열@
뒤에result
에 추가됩니다.urlObject.host
속성이undefined
이면 다음이 발생합니다.urlObject.hostname
이 문자열이면result
에 추가됩니다.- 그렇지 않고
urlObject.hostname
이undefined
가 아니고 문자열이 아니면Error
가 throw됩니다. urlObject.port
속성 값이 true이고urlObject.hostname
이undefined
가 아니면 다음이 발생합니다.- 리터럴 문자열
:
이result
에 추가되고, urlObject.port
의 값이 문자열로 강제 변환되어result
에 추가됩니다.
그렇지 않고
urlObject.host
속성 값이 true이면urlObject.host
의 값이 문자열로 강제 변환되어result
에 추가됩니다.urlObject.pathname
속성이 빈 문자열이 아닌 문자열이면 다음이 발생합니다.urlObject.pathname
이 ASCII 슬래시(/
)로 시작하지 않는 경우 리터럴 문자열'/'
이result
에 추가됩니다.urlObject.pathname
의 값이result
에 추가됩니다.
그렇지 않고
urlObject.pathname
이undefined
가 아니고 문자열이 아니면Error
가 throw됩니다.urlObject.search
속성이undefined
이고urlObject.query
속성이Object
이면 리터럴 문자열?
가result
에 추가된 다음urlObject.query
값을 전달하는querystring
모듈의stringify()
메서드를 호출한 출력이 추가됩니다.그렇지 않고
urlObject.search
가 문자열이면 다음이 발생합니다.urlObject.search
의 값이 ASCII 물음표(?
) 문자로 시작하지 않는 경우 리터럴 문자열?
가result
에 추가됩니다.urlObject.search
의 값이result
에 추가됩니다.
그렇지 않고
urlObject.search
가undefined
가 아니고 문자열이 아니면Error
가 throw됩니다.urlObject.hash
속성이 문자열이면 다음이 발생합니다.urlObject.hash
의 값이 ASCII 해시(#
) 문자로 시작하지 않는 경우 리터럴 문자열#
이result
에 추가됩니다.urlObject.hash
의 값이result
에 추가됩니다.
그렇지 않고
urlObject.hash
속성이undefined
가 아니고 문자열이 아니면Error
가 throw됩니다.result
가 반환됩니다.
url.parse(urlString[, parseQueryString[, slashesDenoteHost]])
[기록]
버전 | 변경 사항 |
---|---|
v19.0.0, v18.13.0 | 문서 전용 사용 중단. |
v15.13.0, v14.17.0 | 사용 중단 취소. 상태가 "레거시"로 변경되었습니다. |
v11.14.0 | 반환된 URL 객체의 pathname 속성이 경로가 없고 프로토콜 스키마가 ws: 또는 wss: 인 경우 이제 / 입니다. |
v11.0.0 | 레거시 URL API가 사용 중단되었습니다. WHATWG URL API를 사용하세요. |
v9.0.0 | 쿼리 문자열이 없는 경우 반환된 URL 객체의 search 속성이 이제 null 입니다. |
v0.1.25 | 추가됨: v0.1.25 |
urlString
<string> 구문 분석할 URL 문자열입니다.parseQueryString
<boolean>true
이면query
속성은 항상querystring
모듈의parse()
메서드에서 반환된 객체로 설정됩니다.false
이면 반환된 URL 객체의query
속성은 구문 분석되지 않고 디코딩되지 않은 문자열입니다. 기본값:false
.slashesDenoteHost
<boolean>true
이면 리터럴 문자열//
뒤에 오는 첫 번째 토큰과 다음/
앞에 오는 토큰이host
로 해석됩니다. 예를 들어//foo/bar
가 주어지면 결과는{host: 'foo', pathname: '/bar'}
가 되고{pathname: '//foo/bar'}
가 되지 않습니다. 기본값:false
.
url.parse()
메서드는 URL 문자열을 가져와서 구문 분석하고 URL 객체를 반환합니다.
urlString
이 문자열이 아니면 TypeError
가 발생합니다.
auth
속성이 있지만 디코딩할 수 없는 경우 URIError
가 발생합니다.
url.parse()
는 URL 문자열을 구문 분석하기 위해 관대한 비표준 알고리즘을 사용합니다. 호스트 이름 스푸핑 및 사용자 이름과 암호의 잘못된 처리와 같은 보안 문제에 취약합니다. 신뢰할 수 없는 입력에 사용하지 마십시오. url.parse()
취약점에 대해서는 CVE가 발급되지 않습니다. 대신 WHATWG URL API를 사용하세요.
url.resolve(from, to)
[기록]
버전 | 변경 사항 |
---|---|
v15.13.0, v14.17.0 | 더 이상 사용되지 않음이 취소되었습니다. 상태가 "레거시"로 변경되었습니다. |
v11.0.0 | 레거시 URL API는 더 이상 사용되지 않습니다. WHATWG URL API를 사용하세요. |
v6.6.0 | from 및 to 가 동일한 호스트를 참조하는 경우 auth 필드가 이제 그대로 유지됩니다. |
v6.0.0 | to 매개변수에 호스트 이름이 포함된 경우 auth 필드가 이제 지워집니다. |
v6.5.0, v4.6.2 | port 필드가 이제 올바르게 복사됩니다. |
v0.1.25 | 추가됨: v0.1.25 |
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'
WHATWG URL API를 사용하여 동일한 결과를 얻으려면 다음과 같이 합니다.
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
로 인코딩됩니다.
WHATWG API
WHATWG URL 표준은 레거시 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을 출력합니다.