๋ชฉํ
URL ํ์ค์ URL์ ์์ ํ ์ํธ ์ด์ฉ์ฑ์ ๋ฌ์ฑํ๊ธฐ ์ํด ๋ค์๊ณผ ๊ฐ์ ์ ๊ทผ ๋ฐฉ์์ ์ทจํฉ๋๋ค:
-
RFC 3986 ๋ฐ RFC 3987์ ์ต์ ๊ตฌํ๊ณผ ์ผ์น์ํค๊ณ , ์ด ๊ณผ์ ์์ ํด๋น RFC๋ฅผ ํ๊ธฐํฉ๋๋ค. (์: ๊ณต๋ฐฑ, ๊ธฐํ "๋ถ๋ฒ" ์ฝ๋ ํฌ์ธํธ, ์ฟผ๋ฆฌ ์ธ์ฝ๋ฉ, ๋๋ฑ์ฑ, ์ ์คํ๋ ๋ชจ๋ ์์ ํ ๊ณต์ ๋๊ฑฐ๋ ์ ์๋ ๊ฐ๋ ์ด ์๋๋๋ค.) URL ํ์ฑ์ HTML ํ์ฑ๋งํผ ๊ฒฌ๊ณ ํด์ ธ์ผ ํฉ๋๋ค. [RFC3986] [RFC3987]
-
URL ์ฉ์ด๋ฅผ ํ์คํํฉ๋๋ค. URI์ IRI๋ ํผ๋์ ์ผ๊ธฐํฉ๋๋ค. ์ค์ ๋ก ๋ ๊ฐ์ง ๋ชจ๋์ ๋จ์ผ ์๊ณ ๋ฆฌ์ฆ์ด ์ฌ์ฉ๋๋ฏ๋ก ๊ตฌ๋ถํ๋ ๊ฒ์ ๋์์ด ๋์ง ์์ต๋๋ค. URL์ ๋ํ ๊ฒ์ ๊ฒฐ๊ณผ ์ธ๊ธฐ ๊ฒฝ์์์๋ ์ฝ๊ฒ ์ฐ์นํฉ๋๋ค.
-
URI์ Origin [sic]์ ๋์ฒดํฉ๋๋ค. [RFC6454]
-
URL์ ๊ธฐ์กด JavaScript API๋ฅผ ์์ ํ๊ฒ ์ ์ํ๊ณ , ๋ ์ฝ๊ฒ ์ฌ์ฉํ ์ ์๋๋ก ๊ฐ์ ์ฌํญ์ ์ถ๊ฐํฉ๋๋ค. HTML ์์๋ฅผ ์ฌ์ฉํ์ง ์๊ณ URL์ ์กฐ์ํ ์ ์๋๋ก ์๋ก์ด
URL๊ฐ์ฒด๋ ์ถ๊ฐํฉ๋๋ค. (JavaScript ์์ปค ํ๊ฒฝ์์ ์ ์ฉํฉ๋๋ค.) -
ํ์, ์ง๋ ฌํ๊ธฐ, API์ ์กฐํฉ์ด ๋ฉฑ๋ฑ์ฑ์ ๋ณด์ฅํ๋๋ก ํฉ๋๋ค. ์๋ฅผ ๋ค์ด, ํ์ฑ ํ ์ง๋ ฌํ ์์ ์ ์คํจํ์ง ์๋ ๊ฒฐ๊ณผ๋ ์ถ๊ฐ์ ์ธ ํ์ฑ-์ง๋ ฌํ ์์ ์ ์ ์ฉํด๋ ๋ณ๊ฒฝ๋์ง ์์ต๋๋ค. ๋ง์ฐฌ๊ฐ์ง๋ก, API๋ฅผ ํตํด ์คํจํ์ง ์๋ ๊ฒฐ๊ณผ๋ฅผ ์กฐ์ํด๋, ์ง๋ ฌํ-ํ์ฑ ์์ ์ ์ฌ๋ฌ ๋ฒ ์ ์ฉํด๋ ๋ณ๊ฒฝ๋์ง ์์ต๋๋ค.
ํธ์ง์๊ฐ ์ฃผ์ ๋ฅผ ๋ ๊น์ด ํ์ตํจ์ ๋ฐ๋ผ ๋ชฉํ์ ๋ฒ์๊ฐ ๋ค์ ์ฆ๊ฐํ ์ ์์ต๋๋ค.
1. ์ธํ๋ผ์คํธ๋ญ์ฒ
์ด ๋ช ์ธ๋ Infra์ ์์กดํฉ๋๋ค. [INFRA]
์ด ๋ช ์ธ์์ ์ฌ์ฉ๋๋ ์ผ๋ถ ์ฉ์ด๋ค์ ๋ค์ ํ์ค ๋ฐ ๋ช ์ธ์์ ์ ์๋ฉ๋๋ค:
- Encoding [ENCODING]
- File API [FILEAPI]
- HTML [HTML]
- Unicode IDNA Compatibility Processing [UTS46]
- Web IDL [WEBIDL]
์ ์๋ฅผ ์ง๋ ฌํํ๋ค๋, ๊ฐ๋ฅํ ๊ฐ์ฅ ์งง์ ์ญ์ง์๋ก ํํํ๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค.
1.1. ์์ฑ
๊ฒ์ฆ ์ค๋ฅ๋ ์ ๋ ฅ๊ณผ ์ ํจํ ์ ๋ ฅ์ด ์ผ์นํ์ง ์์์ ๋ํ๋ ๋๋ค. ์ฌ์ฉ์ ์์ด์ ํธ, ํนํ ์ ํฉ์ฑ ๊ฒ์ฌ๊ธฐ๋ ์ด๋ฌํ ์ค๋ฅ๋ฅผ ์ด๋๊ฐ์ ๋ณด๊ณ ํ๋ ๊ฒ์ด ๊ถ์ฅ๋ฉ๋๋ค.
๊ฒ์ฆ ์ค๋ฅ๊ฐ ๋ฐ์ํด๋ ํ์๊ฐ ์ข ๋ฃ๋๋ค๋ ์๋ฏธ๋ ์๋๋๋ค. ํ์์ ์ข ๋ฃ๋ ํญ์ ๋ช ์์ ์ผ๋ก, ์๋ฅผ ๋ค์ด return ๋ฌธ์ ํตํด ๋ํ๋ฉ๋๋ค.
๊ฒ์ฆ ์ค๋ฅ๋ฅผ ์๋ฆฌ๋ ๊ฒ์ ์ค๋ฅ ์ฒ๋ฆฌ ๋ฐฉ์์ด ์ง๊ด์ ์ด์ง ์์ ์ ์๊ณ , ๋ ๊ฑฐ์ ์ฌ์ฉ์ ์์ด์ ํธ๊ฐ ์ฌ๋ฐ๋ฅธ ์ค๋ฅ ์ฒ๋ฆฌ๋ฅผ ๊ตฌํํ์ง ์์ ์ ์์ผ๋ฉฐ, ์์ฑ๋ ์๋๊ฐ ๋ค๋ฅธ ๊ฐ๋ฐ์์๊ฒ ๋ช ํํ์ง ์์ ์ ์์ผ๋ฏ๋ก ์ ์ฉํฉ๋๋ค.
| ์ค๋ฅ ์ ํ | ์ค๋ฅ ์ค๋ช | ์คํจ ์ฌ๋ถ |
|---|---|---|
| IDNA | ||
| domain-to-ASCII |
Unicode ToASCII๋ CheckHyphens, UseSTD3ASCIIRules, ๊ทธ๋ฆฌ๊ณ VerifyDnsLength๊ฐ ๋ชจ๋ true๋ก ์ค์ ๋์์ ๋ ์ค๋ฅ๋ฅผ ๊ธฐ๋กํ๋ค. [UTS46] Unicode ToASCII ์ค๋ฅ์ ๊ดํ ์ธ๋ถ ์ ๋ณด๊ฐ ๊ธฐ๋ก๋ ๊ฒฝ์ฐ, ์ฌ์ฉ์ ์์ด์ ํธ๋ ์ด๋ฅผ ์ ๋ฌํ๋ ๊ฒ์ด ๊ถ์ฅ๋๋ค. URL์ด
ํน์ํจ์ผ ๋,
์ฒ๋ฆฌ๋๊ธฐ ์ ์ ํธ์คํธ๋ ํผ์ผํธ ๋์ฝ๋ฉ๋๋ฉฐ, ์ด๋ก ์ธํด ๋ค์ ํธ์คํธ ๋ถ๋ถ์
" " | ์ (beStrict๊ฐ true์ด๊ฑฐ๋, domain์ด ASCII ๋ฌธ์์ด์ด ์๋๋ฉฐ ์ํ๋ ๋งค๊ฐ๋ณ์๋ฅผ ์ฌ์ฉํ Unicode ToASCII๋ ์คํจํ๋ ๊ฒฝ์ฐ) |
| ํธ์คํธ ๊ตฌ๋ฌธ ๋ถ์ | ||
| domain-percent-encoded |
๋๋ฉ์ธ์ผ๋ก ์ฒ๋ฆฌ๋ ์ ๋ ฅ์ ํธ์คํธ์ ํผ์ผํธ ์ธ์ฝ๋ฉ๋ ๋ฐ์ดํธ๊ฐ ํฌํจ๋์ด ์๋ค. | ยท |
| host-invalid-code-point |
(ํน์ํ์ง ์์ URL ์์) ๋ถํฌ๋ช ํธ์คํธ์ ๊ธ์ง๋ ํธ์คํธ ์ฝ๋ ํฌ์ธํธ๊ฐ ํฌํจ๋์ด ์๋ค. | ์ |
| IPv4-empty-part |
IPv4 ์ฃผ์๊ฐ U+002E (.)๋ก ๋๋๋ค. | ยท |
| IPv4-too-few-parts |
IPv4 ์ฃผ์๊ฐ 4๊ฐ๋ณด๋ค ์ ์ ๋ถ๋ถ์ ๊ฐ์ง๋ค. | ยท |
| IPv4-too-many-parts |
IPv4 ์ฃผ์๊ฐ 4๊ฐ๋ณด๋ค ๋ง์ ๋ถ๋ถ์ ๊ฐ์ง๋ค. | ์ |
| IPv4-non-numeric-part |
IPv4 ์ฃผ์ ๋ถ๋ถ์ด ์ซ์๊ฐ ์๋๋ค. | ์ |
| IPv4-non-decimal-part |
IPv4 ์ฃผ์์ 16์ง์ ๋๋ 8์ง์ ์ซ์๋ฅผ ์ฌ์ฉํด ํํ๋ ์ซ์๊ฐ ํฌํจ๋์ด ์๋ค. | ยท |
| IPv4-out-of-range-part |
IPv4 ์ฃผ์ ๋ถ๋ถ์ด 255๋ฅผ ์ด๊ณผํ๋ค. | ์ (๋ง์ง๋ง ๋ถ๋ถ์ ์ ์ฉ๋๋ ๊ฒฝ์ฐ์ ํํจ) |
| IPv4-non-ASCII-input |
IPv4 ์ฃผ์๊ฐ IDNA ์ฒ๋ฆฌ ๊ณผ์ ์ ํตํด ๋น-ASCII ๋ฌธ์์ด๋ก๋ถํฐ ํ์๋๋ค. | ยท |
| IPv6-unclosed |
IPv6 ์ฃผ์์ ๋ซ๋ U+005D (])๊ฐ ์๋ค. | ์ |
| IPv6-invalid-compression |
IPv6 ์ฃผ์๊ฐ ๋ถ์ ์ ํ ์์ถ์ผ๋ก ์์ํ๋ค. | ์ |
| IPv6-too-many-pieces |
IPv6 ์ฃผ์์ 8๊ฐ๋ณด๋ค ๋ง์ ์กฐ๊ฐ์ด ํฌํจ๋์ด ์๋ค. | ์ |
| IPv6-multiple-compression |
IPv6 ์ฃผ์๊ฐ ๋ ์ด์์ ์์น์์ ์์ถ๋์ด ์๋ค. | ์ |
| IPv6-invalid-code-point |
IPv6 ์ฃผ์์ ASCII 16์ง ์ซ์ ๋ ์๋๊ณ U+003A (:)๋ ์๋ ์ฝ๋ ํฌ์ธํธ๊ฐ ํฌํจ๋์ด ์๋ค. ๋๋ ์์์น ๋ชปํ๊ฒ ๋๋๋ค. | ์ |
| IPv6-too-few-pieces |
์์ถ๋์ง ์์ IPv6 ์ฃผ์์ 8๊ฐ๋ณด๋ค ์ ์ ์กฐ๊ฐ์ด ํฌํจ๋์ด ์๋ค. | ์ |
| IPv6-piece-leading-zero |
IPv6 ์ฃผ์ ์กฐ๊ฐ์ ์ ํ U+0030 (0)์ด ํฌํจ๋์ด ์๋ค. | ยท |
| IPv4-in-IPv6-too-many-pieces |
IPv6 ์ฃผ์๊ฐ IPv4 ์ฃผ์ ๋ฌธ๋ฒ์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ: IPv6 ์ฃผ์๊ฐ 6๊ฐ๋ณด๋ค ๋ง์ ์กฐ๊ฐ์ ๊ฐ์ง๋ค. | ์ |
| IPv4-in-IPv6-invalid-code-point |
IPv6 ์ฃผ์๊ฐ IPv4 ์ฃผ์ ๋ฌธ๋ฒ์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ:
| ์ |
| IPv4-in-IPv6-out-of-range-part |
IPv6 ์ฃผ์๊ฐ IPv4 ์ฃผ์ ๋ฌธ๋ฒ์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ: IPv4 ๋ถ๋ถ์ด 255๋ฅผ ์ด๊ณผํ๋ค. | ์ |
| IPv4-in-IPv6-too-few-parts |
IPv6 ์ฃผ์๊ฐ IPv4 ์ฃผ์ ๋ฌธ๋ฒ์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ: IPv4 ์ฃผ์์ ๋๋ฌด ์ ์ ๋ถ๋ถ์ด ํฌํจ๋์ด ์๋ค. | ์ |
| URL ๊ตฌ๋ฌธ ๋ถ์ | ||
| invalid-URL-unit |
URL ๋จ์๊ฐ ์๋ ์ฝ๋ ํฌ์ธํธ๊ฐ ๋ฐ๊ฒฌ๋๋ค. | ยท |
| special-scheme-missing-following-solidus |
์
๋ ฅ์ ์คํด ๋ค์ " | ยท |
| missing-scheme-non-relative-URL |
์ ๋ ฅ์ ์คํด์ด ์๋ค. ์ด๋ ์ ๋ ฅ์ด ASCII ์ํ๋ก ์์ํ์ง ์์ผ๋ฉฐ, ๊ธฐ๋ฐ URL์ด ์ ๊ณต๋์ง ์์๊ฑฐ๋ ๊ธฐ๋ฐ URL์ ๋ถํฌ๋ช ๊ฒฝ๋ก๊ฐ ์์ด ๊ธฐ๋ฐ URL๋ก ์ฌ์ฉํ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค. ์ ๋ ฅ์ ์คํด์ด ์๊ณ ๊ธฐ๋ฐ URL๋ ์ ๊ณต๋์ง ์์ ๊ฒฝ์ฐ:
์ ๋ ฅ์ ์คํด์ ์์ง๋ง, ๊ธฐ๋ฐ URL์ ๋ถํฌ๋ช ๊ฒฝ๋ก๊ฐ ์๋ ๊ฒฝ์ฐ.
| ์ |
| invalid-reverse-solidus |
URL์ด ํน์ ์คํด์ ๊ฐ์ง๊ณ ์์ผ๋ฉฐ, U+002F (/) ๋์ U+005C (\)๋ฅผ ์ฌ์ฉํ๋ค. | ยท |
| invalid-credentials |
์ ๋ ฅ์ด ์๊ฒฉ ์ฆ๋ช ์ ํฌํจํ๋ค. | ยท |
| host-missing |
์ ๋ ฅ์ด ํน์ ์คํด์ ๊ฐ์ง๊ณ ์์ง๋ง, ํธ์คํธ๋ฅผ ํฌํจํ์ง ์๋๋ค. | ์ |
| port-out-of-range |
์ ๋ ฅ์ ํฌํธ๊ฐ ๋๋ฌด ํฌ๋ค. | ์ |
| port-invalid |
์ ๋ ฅ์ ํฌํธ๊ฐ ์ ํจํ์ง ์๋ค. | ์ |
| file-invalid-Windows-drive-letter |
์
๋ ฅ์ด ์๋
URL ๋ฌธ์์ด์ด๊ณ , Windows ๋๋ผ์ด๋ธ ๋ฌธ์๋ก ์์ํ๋ฉฐ,
๊ธฐ๋ฐ
URL์ ์คํด์ด "
| ยท |
| file-invalid-Windows-drive-letter-host |
| ยท |
1.2. ํ์
EOF ์ฝ๋ ํฌ์ธํธ๋ ๋ฌธ์์ด์ด๋ ์ฝ๋ ํฌ์ธํธ ์คํธ๋ฆผ์ ๋์ ๋ํ๋ด๋ ๊ฐ๋ ์ ์ธ ์ฝ๋ ํฌ์ธํธ์ ๋๋ค.
๋ฌธ์์ด input์ ๋ํ ํฌ์ธํฐ๋ input ๋ด์ ์ฝ๋ ํฌ์ธํธ๋ฅผ ๊ฐ๋ฆฌํค๋ ์ ์์ ๋๋ค. ์ฒ์์๋ input์ ์์์ ๊ฐ๋ฆฌํต๋๋ค. ๋ง์ฝ ๊ฐ์ด โ1์ด๋ฉด ์๋ฌด ๊ณณ๋ ๊ฐ๋ฆฌํค์ง ์์ต๋๋ค. input์ ์ฝ๋ ํฌ์ธํธ ๊ธธ์ด๋ณด๋ค ํฌ๊ฑฐ๋ ๊ฐ์ผ๋ฉด EOF ์ฝ๋ ํฌ์ธํธ๋ฅผ ๊ฐ๋ฆฌํต๋๋ค.
ํฌ์ธํฐ๊ฐ ์ฌ์ฉ๋ ๋, c๋ ์ฝ๋ ํฌ์ธํธ ์ค ํฌ์ธํฐ๊ฐ ๊ฐ๋ฆฌํค๋ ์์น๋ฅผ ์ฐธ์กฐํฉ๋๋ค. ๋จ, ์๋ฌด ๊ณณ๋ ๊ฐ๋ฆฌํค์ง ์์ ๋๋ ์ฌ์ฉํ ์ ์์ต๋๋ค. ํฌ์ธํฐ๊ฐ ์๋ฌด ๊ณณ๋ ๊ฐ๋ฆฌํฌ ๋ c๋ ์ฌ์ฉํ ์ ์์ต๋๋ค.
ํฌ์ธํฐ๊ฐ ์ฌ์ฉ๋ ๋, remaining์ ๋ฌธ์์ด์ ๋๊น์ง์ ์ฝ๋ ํฌ์ธํธ ์๋ธ์คํธ๋ง์ ํฌ์ธํฐ + 1 ๋ถํฐ ์ฐธ์กฐํฉ๋๋ค. ๋จ, c๊ฐ EOF ์ฝ๋ ํฌ์ธํธ๊ฐ ์๋ ๋๋ง ์ฌ์ฉํ ์ ์์ต๋๋ค. c๊ฐ EOF ์ฝ๋ ํฌ์ธํธ์ผ ๋ remaining์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
"mailto:username@example"๊ฐ ์ฒ๋ฆฌ ์ค์ธ ๋ฌธ์์ด์ด๊ณ ํฌ์ธํฐ๊ฐ @์ ๊ฐ๋ฆฌํจ๋ค๋ฉด, c๋ U+0040 (@)์ด๊ณ remaining์
"example"์
๋๋ค.
๋น ๋ฌธ์์ด์ ์ฒ๋ฆฌ ์ค์ด๊ณ ํฌ์ธํฐ๊ฐ ์์์ ๊ฐ๋ฆฌํค๋ค๊ฐ โ1๋ก ๊ฐ์๋๋ค๋ฉด, c๋ remaining์ ์ฌ์ฉํ๋ ๊ฒ์ ์ค๋ฅ์ ๋๋ค.
1.3. ํผ์ผํธ ์ธ์ฝ๋ฉ ๋ฐ์ดํธ
ํผ์ผํธ ์ธ์ฝ๋ฉ๋ ๋ฐ์ดํธ๋ U+0025 (%) ๋ค์ ๋ ๊ฐ์ ASCII 16์ง์ ์ซ์๊ฐ ์ค๋ ๋ฌธ์์ด์ด๋ค.
์ผ๋ฐ์ ์ผ๋ก ํผ์ผํธ ์ธ์ฝ๋ฉ๋ ๋ฐ์ดํธ์ ์ํ์ค๋ ํผ์ผํธ ๋์ฝ๋ฉ๋ ๋ค์ BOM ์์ด UTF-8 ๋์ฝ๋ฉ ๋๋ ์คํจ์ ์ ๋ฌ๋์์ ๋, ์ต์ข ์ ์ผ๋ก ์คํจ๊ฐ ๋์ง ์๋ ๊ฒ์ด ์ข๋ค. ์ด๊ฒ์ด ์ผ๋ง๋ ์ค์ํ์ง๋ ํผ์ผํธ ์ธ์ฝ๋ฉ๋ ๋ฐ์ดํธ๊ฐ ์ฌ์ฉ๋๋ ์์น์ ๋ฐ๋ผ ๋ค๋ฅด๋ค. ์๋ฅผ ๋ค์ด, ํธ์คํธ ํ์์ ๊ฒฝ์ฐ ์ด ์กฐ์ธ์ ๋ฐ๋ฅด์ง ์์ผ๋ฉด ์น๋ช ์ ์ด์ง๋ง, URL ๋ ๋๋ง์ ๊ฒฝ์ฐ ํผ์ผํธ ์ธ์ฝ๋ฉ๋ ๋ฐ์ดํธ๋ ํผ์ผํธ ๋์ฝ๋ฉ๋์ด ๋ ๋๋ง๋์ง ์๋๋ค.
๋ฐ์ดํธ byte ๋ฅผ ํผ์ผํธ ์ธ์ฝ๋ฉ ํ๋ ค๋ฉด U+0025(%) ๋ค์ byte ๋ฅผ ๋ํ๋ด๋ ๋ ๊ฐ์ ASCII ๋๋ฌธ์ 16์ง์ ์ซ์ ๊ฐ ์ค๋ ๋ฌธ์์ด ์ ๋ฐํํฉ๋๋ค.
๋ฐ์ดํธ ์ํ์ค input ์ ํผ์ผํธ ๋์ฝ๋ฉ ํ๋ ค๋ฉด ๋ค์ ๋จ๊ณ๋ฅผ ์คํํฉ๋๋ค:
input์ ASCII ๋ฐ์ดํธ๊ฐ ์๋ ๋ฐ์ดํธ๊ฐ ํฌํจ๋์ด ์์ ๋ BOM ์์ด UTF-8 ๋์ฝ๋ ์ธ์ ๊ฒ์ ์ฌ์ฉํ๋ ๊ฒ์ ์์ ํ์ง ์์ผ๋ฉฐ ๊ถ์ฅ๋์ง ์์ต๋๋ค.
-
output์ ๋น byte sequence๋ก ๋ก๋๋ค.
-
input์ ๊ฐ byte์ ๋ํด:
-
byte๊ฐ 0x25 (%)๊ฐ ์๋๋ฉด output์ byte๋ฅผ ์ถ๊ฐํฉ๋๋ค.
-
๊ทธ๋ ์ง ์๊ณ , byte๊ฐ 0x25 (%)์ด๋ฉฐ input์ byte ๋ค์ ๋ ๋ฐ์ดํธ๊ฐ 0x30(0)~0x39(9), 0x41(A)~0x46(F), 0x61(a)~0x66(f) ๋ฒ์์ ์ํ์ง ์์ผ๋ฉด output์ byte๋ฅผ ์ถ๊ฐํฉ๋๋ค.
-
๊ทธ ์ธ์ ๊ฒฝ์ฐ:
-
bytePoint๋ฅผ input์ byte ๋ค์ ๋ ๋ฐ์ดํธ๋ฅผ ๋์ฝ๋ฉ ํ 16์ง์ ์ซ์๋ก ํด์ํ ๊ฐ์ผ๋ก ๋ก๋๋ค.
-
bytePoint ๊ฐ์ ๊ฐ์ง๋ ๋ฐ์ดํธ๋ฅผ output์ ์ถ๊ฐํฉ๋๋ค.
-
input์ ๋ค์ ๋ ๋ฐ์ดํธ๋ฅผ ๊ฑด๋๋๋๋ค.
-
-
-
output์ ๋ฐํํฉ๋๋ค.
์ค์นผ๋ผ ๊ฐ ๋ฌธ์์ด input ์ ํผ์ผํธ ๋์ฝ๋ฉ ํ๋ ค๋ฉด:
-
bytes๋ฅผ input์ UTF-8 ์ธ์ฝ๋ฉ ๊ฒฐ๊ณผ๋ก ๋ก๋๋ค.
-
bytes์ ํผ์ผํธ ๋์ฝ๋ฉ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํฉ๋๋ค.
์ผ๋ฐ์ ์ผ๋ก ํผ์ผํธ ์ธ์ฝ๋ฉ ๊ฒฐ๊ณผ๋ ์ ๋ ฅ๋ณด๋ค U+0025 (%) ์ฝ๋ ํฌ์ธํธ๊ฐ ๋ ๋ง๊ณ , ํผ์ผํธ ๋์ฝ๋ฉ ๊ฒฐ๊ณผ๋ ์ ๋ ฅ๋ณด๋ค 0x25 (%) ๋ฐ์ดํธ๊ฐ ๋ ์ ์ต๋๋ค.
percent-encode set์ ์งํฉ์ด๋ฉฐ, ์ฝ๋ ํฌ์ธํธ์ ์งํฉ์ด๋ค.
C0 control percent-encode set์ percent-encode set์ด๋ฉฐ, C0 ์ ์ด ๋ฌธ์์ U+007E (~)๋ณด๋ค ํฐ ๋ชจ๋ ์ฝ๋ ํฌ์ธํธ๋ก ๊ตฌ์ฑ๋๋ค.
fragment percent-encode set์ percent-encode set์ด๋ฉฐ, C0 control percent-encode set๊ณผ U+0020 SPACE, U+0022 ("), U+003C (<), U+003E (>), U+0060 (`)์ผ๋ก ์ด๋ฃจ์ด์ง๋ค.
query percent-encode set์ percent-encode set์ด๋ฉฐ, C0 control percent-encode set๊ณผ U+0020 SPACE, U+0022 ("), U+0023 (#), U+003C (<), U+003E (>)๋ก ์ด๋ฃจ์ด์ง๋ค.
query percent-encode set์ fragment percent-encode set์์ U+0060 (`)์ด ๋น ์ ธ์์ผ๋ฏ๋ก ๊ทธ์ ๊ฐ์ ๊ด์ ์์ ์ ์ํ ์ ์๋ค.
special-query percent-encode set์ percent-encode set์ด๋ฉฐ, query percent-encode set๊ณผ U+0027 (')์ผ๋ก ์ด๋ฃจ์ด์ง๋ค.
path percent-encode set์ percent-encode set์ด๋ฉฐ, query percent-encode set๊ณผ U+003F (?), U+005E (^), U+0060 (`), U+007B ({), U+007D (})๋ก ์ด๋ฃจ์ด์ง๋ค.
userinfo percent-encode set์ percent-encode set์ด๋ฉฐ, path percent-encode set๊ณผ U+002F (/), U+003A (:), U+003B (;), U+003D (=), U+0040 (@), U+005B ([)๋ถํฐ U+005D (])๊น์ง ํฌํจํ์ฌ, U+007C (|)๋ ํฌํจํ๋ค.
component percent-encode set์ percent-encode set์ด๋ฉฐ, userinfo percent-encode set๊ณผ U+0024 ($)๋ถํฐ U+0026 (&)๊น์ง, U+002B (+), U+002C (,)์ ํฌํจํ๋ค.
์ด๊ฒ์ HTML์
registerProtocolHandler()์์
์ฌ์ฉ๋๊ณ ,
๋ค๋ฅธ ํ์ค์์ ๋ฐ์ดํฐ๋ฅผ percent-encode ํ์ฌ
URL์
๊ฒฝ๋ก(path),
์ฟผ๋ฆฌ(query),
ํ๋๊ทธ๋จผํธ(fragment)
ํน์ ๋ถํฌ๋ช
ํธ์คํธ(opaque host)์
์ฝ์
ํ๋ ๋ฐ์๋ ์ฌ์ฉ๋ ์ ์๋ค.
UTF-8
percent-encode์
ํจ๊ป ์ฌ์ฉํ๋ฉด JavaScript์
encodeURIComponent()์
๋์ผํ ๊ฒฐ๊ณผ๋ฅผ ์ค๋ค. [HTML]
[ECMA-262]
application/x-www-form-urlencoded
percent-encode set์
percent-encode
set์ด๋ฉฐ,
component percent-encode set๊ณผ
U+0021 (!), U+0027 (')๋ถํฐ U+0029 ์ค๋ฅธ์ชฝ ๊ดํธ, ๊ทธ๋ฆฌ๊ณ U+007E (~)๋ฅผ ํฌํจํ๋ค.
application/x-www-form-urlencoded
percent-encode set์
ASCII ์์ซ์,
U+002A (*), U+002D (-), U+002E (.), U+005F (_)๋ฅผ ์ ์ธํ
๋ชจ๋ ์ฝ๋ ํฌ์ธํธ๋ฅผ ํฌํจํ๋ค.
percent-encode after encoding ์ ๋ค์๊ณผ ๊ฐ์ด ์ฃผ์ด์ง ์ธ์ฝ๋ฉ(encoding) encoding, ์ค์นผ๋ผ ๊ฐ ๋ฌธ์์ด(scalar value string) input, ๊ทธ๋ฆฌ๊ณ percent-encode set percentEncodeSet์ ์ฌ์ฉํ๋ค:
-
๋จ์ธ: encoding์ UTF-8์ด๊ฑฐ๋ percentEncodeSet์ด special-query percent-encode set ๋๋
application/x-www-form-urlencodedpercent-encode set์ด์ด์ผ ํ๋ค. -
spaceAsPlus๋ฅผ percentEncodeSet์ด
application/x-www-form-urlencodedpercent-encode set์ด๋ฉด true๋ก, ๊ทธ๋ ์ง ์์ผ๋ฉด false๋ก ํ๋ค. -
encoder๋ฅผ ์ธ์ฝ๋ ๊ฐ์ ธ์ค๊ธฐ๋ฅผ encoding์ ๋ํด ์คํํ ๊ฒฐ๊ณผ๋ก ํ๋ค.
-
inputQueue๋ฅผ input์ I/O ํ๋ก ๋ณํํ ๊ฐ์ผ๋ก ํ๋ค.
-
output์ ๋น ๋ฌธ์์ด๋ก ํ๋ค.
-
potentialError๋ฅผ 0์ผ๋ก ํ๋ค.
while ๋ฃจํ๋ฅผ ์์ํ๋ ค๋ฉด ์ด ๊ฐ์ด null์ด ์๋์ด์ผ ํ๋ค.
-
potentialError๊ฐ null์ด ์๋ ๋์:
-
encodeOutput์ ๋น์ด ์๋ I/O ํ๋ก ํ๋ค.
-
potentialError๋ฅผ encode or fail์ inputQueue, encoder, encodeOutput์ผ๋ก ์คํํ ๊ฒฐ๊ณผ๋ก ํ๋ค.
-
encodeOutput์ ๋ฐ์ดํธ ์ํ์ค๋ก ๋ณํํ ๊ฐ byte์ ๋ํด:
-
spaceAsPlus๊ฐ true์ด๊ณ byte๊ฐ 0x20 (SP)์ด๋ฉด, output์ U+002B (+)๋ฅผ ์ถ๊ฐํ๊ณ ๊ณ์ํ๋ค.
-
isomorph๋ฅผ ์ฝ๋ ํฌ์ธํธ๋ก ๋๊ณ , ๊ทธ ๊ฐ์ byte์ ๊ฐ์ด ๋๋ค.
-
๋จ์ธ: percentEncodeSet์ ASCII ์ฝ๋ ํฌ์ธํธ๊ฐ ์๋ ๋ชจ๋ ๊ฐ์ ํฌํจํ๋ค.
-
isomorph๊ฐ percentEncodeSet์ ์๋ค๋ฉด output์ isomorph๋ฅผ ์ถ๊ฐํ๋ค.
-
๊ทธ๋ ์ง ์์ผ๋ฉด, percent-encode byte๋ฅผ ํด์ ๊ฒฐ๊ณผ๋ฅผ output์ ์ถ๊ฐํ๋ค.
-
-
๋ง์ฝ potentialError๊ฐ null์ด ์๋๋ผ๋ฉด, output์ โ
%26%23โ, ๊ทธ๋ฆฌ๊ณ ASCII ์ซ์๋ก potentialError๋ฅผ 10์ง์๋ก ๊ฐ์ฅ ์งง์ ์ํ์ค๋ก ๋ํ๋ธ ๋ค, โ%3Bโ๋ฅผ ๋ง๋ถ์ธ๋ค.์ด๊ฒ์ encoding์ด UTF-8์ด ์๋ ๋ ๋ฐ์ํ ์ ์๋ค.
-
-
output์ ๋ฐํํ๋ค.
percentEncodeSet ์ธ์ ๊ฐ ์ค U+0025 (%)๋ฅผ ์ธ์ฝ๋ฉํ์ฌ
โ์๋ณต ๊ฐ๋ฅํ ๋ฐ์ดํฐ(roundtripable data)โ๋ฅผ ์ ๊ณตํ๋ ๊ฒ์
component percent-encode set๊ณผ
application/x-www-form-urlencoded
percent-encode set
๋ ๊ฐ์ง ๋ฟ์ด๋ค. percentEncodeSet ์ธ์์ ๋ค๋ฅธ ๊ฐ๋ค
(์ฆ, URL ํ์์์
์ฌ์ฉ๋๋ ๊ฐ)์ U+0025 (%)๋ฅผ ๋ณํํ์ง ์๊ณ ๋๊ฒจ์
์ ์ ํ๊ฒ ํํํ๋ ค๋ฉด ๋จผ์
percent-encode ํด์ผ ํ๋ค.
UTF-8 percent-encode๋ ์ค์นผ๋ผ ๊ฐ scalarValue์ percentEncodeSet์ ๋ํด percent-encode after encoding์ UTF-8, scalarValue(๋ฌธ์์ด), percentEncodeSet์ ๋ํด ์ํํ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํ๋ค.
UTF-8 percent-encode๋ ์ค์นผ๋ผ ๊ฐ ๋ฌธ์์ด input๊ณผ percentEncodeSet์ ์ฌ์ฉํด percent-encode after encoding์ UTF-8, input, percentEncodeSet์ผ๋ก ์ํํ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํ๋ค.
์๋๋ ์์์ ์ ์๋ ์ฐ์ฐ๋ค์ ์์ ์์ฝ์ด๋ค:
| Operation | Input | Output |
|---|---|---|
| Percent-encode input | 0x23 | "%23"
|
| 0x7F | "%7F"
| |
| Percent-decode input | `%25%s%1G`
| `%%s%1G`
|
| Percent-decode input | "โฝ%25%2E"
| 0xE2 0x80 0xBD 0x25 0x2E |
| Percent-encode after encoding with Shift_JIS, input, and the special-query percent-encode set | " "
| "%20"
|
"โก"
| "%81%DF"
| |
"โฝ"
| "%26%238253%3B"
| |
| Percent-encode after encoding with ISO-2022-JP, input, and the special-query percent-encode set | "ยฅ"
| "%1B(J\%1B(B"
|
Percent-encode after encoding
with Shift_JIS, input, and
the application/x-www-form-urlencoded
percent-encode set
| "1+1 โก 2%20โฝ"
| "1%2B1+%81%DF+2%2520%26%238253%3B"
|
| UTF-8 percent-encode input using the userinfo percent-encode set | U+2261 (โก) | "%E2%89%A1"
|
| U+203D (โฝ) | "%E2%80%BD"
| |
| UTF-8 percent-encode input using the userinfo percent-encode set | "Say whatโฝ"
| "Say%20what%E2%80%BD"
|
2. ๋ณด์ ๊ณ ๋ ค์ฌํญ
URL์ ๋ณด์์ ๊ทธ ํ๊ฒฝ์ ๋ฐ๋ผ ๋ฌ๋ผ์ง๋๋ค. URL์ ๋ ๋๋ง, ํด์, ์ ๋ฌํ ๋ ์ฃผ์ํด์ผ ํฉ๋๋ค.
์ URL์ ๋ ๋๋งํ๊ฑฐ๋ ํ ๋นํ ๋ "์คํธํ"์ ๊ณ ๋ คํด์ผ ํ๋ค. ํ ํธ์คํธ ๋๋ URL์ด ๋ค๋ฅธ ๊ฒ๊ณผ ํผ๋๋ ์ ์๋ ๊ณต๊ฒฉ์ด ์์ ์ ์๋ค. ์๋ฅผ ๋ค์ด, 1/l/I, m/rn/rri, 0/O, ๊ทธ๋ฆฌ๊ณ ะฐ/a๊ฐ ๋ชจ๋ ์์ฃผ ๋น์ทํ๊ฒ ๋ณด์ผ ์ ์๋ค. ๋ ์ฌ๊ฐํ๊ฒ๋, U+202A ์ขโ์ฐ ์๋ฒ ๋ฉ(LEFT-TO-RIGHT EMBEDDING) ๋ฑ๊ณผ ๊ฐ์ ์ฝ๋ ํฌ์ธํธ๊ฐ ๋ณด์ด์ง ์๋ ๊ฒฝ์ฐ๋ ์๋ค. [UTR36]
URL์ A์์ B๋ก ์ ๋ฌํ ๋ ๋ ์ชฝ ๋ชจ๋ ์ ์คํ๊ฒ ์ํฉ์ ๊ณ ๋ คํด์ผ ํฉ๋๋ค. A๋ ์ํ์ง ์๋ ๋ฐ์ดํฐ๋ฅผ ์ ์ถํ ์ ์๊ณ , B๋ ์์์น ๋ชปํ ์ ๋ ฅ์ ๋ฐ์ ์ฌ์ฉ์์๊ฒ ํด๋ฅผ ๋ผ์น ์ ์์ต๋๋ค. ํนํ B๋ A๋ฅผ ์ ๋ ์ ๋ขฐํด์๋ ์ ๋๋ฉฐ, ์ธ์ ๋ ์ง A๋ก๋ถํฐ ์ค๋ URL์ด ์ ๋ขฐํ ์ ์๋ ์์ค์ผ ์ ์์ต๋๋ค.
3. ํธ์คํธ (๋๋ฉ์ธ ๋ฐ IP ์ฃผ์)
์์ ์์ค์์ ํธ์คํธ, ์ ํจํ ํธ์คํธ ๋ฌธ์์ด, ํธ์คํธ ํ์, ํธ์คํธ ์ง๋ ฌํ๊ธฐ๋ ๋ค์๊ณผ ๊ฐ์ด ์ฐ๊ด๋ฉ๋๋ค:
-
ํธ์คํธ ํ์๋ ์์์ ์ค์นผ๋ผ ๊ฐ ๋ฌธ์์ด์ ๋ฐ์ ์คํจ ๋๋ ํธ์คํธ๋ฅผ ๋ฐํํฉ๋๋ค.
-
ํธ์คํธ๋ ๋ฉ๋ชจ๋ฆฌ ๋ด ํํ์ผ๋ก ๋ณผ ์ ์์ต๋๋ค.
-
์ ํจํ ํธ์คํธ ๋ฌธ์์ด์ ํธ์คํธ ํ์์ ์ ๋ ฅ๋ ๋ ๊ฒ์ฆ ์ค๋ฅ๋ ์คํจ๋ฅผ ์ผ์ผํค์ง ์๋ ์ ๋ ฅ์ ์ ์ํฉ๋๋ค. ์ฆ, ๊ท๋ฒ์ ์ด๊ณ ์ ํจํ ์ ๋ ฅ์ ๋๋ค.
-
ํธ์คํธ ์ง๋ ฌํ๊ธฐ๋ ํธ์คํธ๋ฅผ ๋ฐ์ ASCII ๋ฌธ์์ด์ ๋ฐํํฉ๋๋ค. (์ด ๋ฌธ์์ด์ ํ์ฑํ๋ฉด ๊ฒฐ๊ณผ๊ฐ ์ง๋ ฌํ๋ ํธ์คํธ์ ๋๋ฑํด์ผ ํฉ๋๋ค.)
ํ์ฑ-์ง๋ ฌํ ๋ผ์ด๋ํธ๋ฆฝ์ ๊ฒฐ๊ณผ๋ ํธ์คํธ ํ์์ isOpaque ์ธ์์ ๋ฐ๋ผ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
| ์ ๋ ฅ | ์ถ๋ ฅ (isOpaque = false) | ์ถ๋ ฅ (isOpaque = true) |
|---|---|---|
EXAMPLE.COM
| example.com (๋๋ฉ์ธ)
| EXAMPLE.COM (๋ถํฌ๋ช
ํธ์คํธ)
|
example%2Ecom
| example%2Ecom (๋ถํฌ๋ช
ํธ์คํธ)
| |
faร.example
| xn--fa-hia.example (๋๋ฉ์ธ)
| fa%C3%9F.example (๋ถํฌ๋ช
ํธ์คํธ)
|
0
| 0.0.0.0 (IPv4)
| 0 (๋ถํฌ๋ช
ํธ์คํธ)
|
%30
| %30 (๋ถํฌ๋ช
ํธ์คํธ)
| |
0x
| 0x (๋ถํฌ๋ช
ํธ์คํธ)
| |
0xffffffff
| 255.255.255.255 (IPv4)
| 0xffffffff (๋ถํฌ๋ช
ํธ์คํธ)
|
[0:0::1]
| [::1] (IPv6)
| |
[0:0::1%5D
| ์คํจ | |
[0:0::%31]
| ||
09
| ์คํจ | 09 (๋ถํฌ๋ช
ํธ์คํธ)
|
example.255
| example.255 (๋ถํฌ๋ช
ํธ์คํธ)
| |
example^example
| ์คํจ | |
3.1. ํธ์คํธ ํํ
ํธ์คํธ๋ ๋๋ฉ์ธ, IP ์ฃผ์, ๋ถํฌ๋ช ํธ์คํธ, ๋๋ ๋น ํธ์คํธ์ ๋๋ค. ์ผ๋ฐ์ ์ผ๋ก ํธ์คํธ๋ ๋คํธ์ํฌ ์ฃผ์๋ก ์ฌ์ฉ๋์ง๋ง, ๋คํธ์ํฌ ์ฃผ์๊ฐ ํ์ํ์ง ์์ URL์์ ๋ถํฌ๋ช ์๋ณ์๋ก ์ฌ์ฉ๋๊ธฐ๋ ํฉ๋๋ค.
์ ํ์ ์ธ URL์์ host๊ฐ ๋ถํฌ๋ช
ํธ์คํธ์ธ ์์๋
git://github.com/whatwg/url.git์
๋๋ค.
์๋ ๋ฌธ๋จ์์ ์ฐธ์กฐ๋ RFC๋ ์ ๋ณด ์ ๊ณต์ฉ์ ๋๋ค. ํน๋ณํ ๋ช ์ํ์ง ์๋ ํ ํธ์คํธ ์์ฑ, ํ์ฑ, ์ง๋ ฌํ์ ์ํฅ์ ์ฃผ์ง ์์ต๋๋ค.
๋๋ฉ์ธ์ ๋คํธ์ํฌ ๋ด ์์ญ์ ์๋ณํ๋ ๋น์ด ์์ง ์์ ASCII ๋ฌธ์์ด์ ๋๋ค. [RFC1034]
๋๋ฉ์ธ ๋ ์ด๋ธ์ ๋๋ฉ์ธ domain์ U+002E(.)๋ก ์๊ฒฉํ๊ฒ ๋ถํ ํ ๊ฒฐ๊ณผ์ ๋๋ค.
example.com๊ณผ example.com. ๋๋ฉ์ธ์ ๋๋ฑํ์ง ์์ผ๋ฉฐ, ์ผ๋ฐ์ ์ผ๋ก ๋ณ๊ฐ์ ๊ฒ์ผ๋ก ์ทจ๊ธ๋ฉ๋๋ค.
IP ์ฃผ์๋ IPv4 ์ฃผ์ ๋๋ IPv6 ์ฃผ์์ ๋๋ค.
IPv4 ์ฃผ์๋ ๋คํธ์ํฌ ์ฃผ์๋ฅผ ์๋ณํ๋ 32๋นํธ ๋ถํธ ์๋ ์ ์์ ๋๋ค. [RFC791]
IPv6 ์ฃผ์๋ ๋คํธ์ํฌ ์ฃผ์๋ฅผ ์๋ณํ๋ 128๋นํธ ๋ถํธ ์๋ ์ ์์ ๋๋ค. ์ด ์ ์๋ ๋ฆฌ์คํธ๋ก ์ด๋ฃจ์ด์ง 8๊ฐ์ 16๋นํธ ๋ถํธ ์๋ ์ ์๋ก ๊ตฌ์ฑ๋๋ฉฐ, IPv6 ์ฃผ์์ ์กฐ๊ฐ์ด๋ผ ๋ถ๋ฆ ๋๋ค. [RFC4291]
<zone_id> ์ง์์ ์๋์ ์ผ๋ก ์๋ต๋์์ต๋๋ค.
๋ถํฌ๋ช ํธ์คํธ๋ ์ถ๊ฐ ์ฒ๋ฆฌ๊ฐ ๊ฐ๋ฅํ ๋น์ด ์์ง ์์ ASCII ๋ฌธ์์ด์ ๋๋ค.
๋น ํธ์คํธ๋ ๋น ๋ฌธ์์ด์ ๋๋ค.
3.2. ํธ์คํธ ๊ธฐํ
๊ธ์ง๋ ํธ์คํธ ์ฝ๋ ํฌ์ธํธ๋ U+0000(NULL), U+0009(TAB), U+000A(LF), U+000D(CR), U+0020(๊ณต๋ฐฑ), U+0023(#), U+002F(/), U+003A(:), U+003C(<), U+003E(>), U+003F(?), U+0040(@), U+005B([), U+005C(\), U+005D(]), U+005E(^), ๋๋ U+007C(|) ์ ๋๋ค.
๊ธ์ง๋ ๋๋ฉ์ธ ์ฝ๋ ํฌ์ธํธ๋ ๊ธ์ง๋ ํธ์คํธ ์ฝ๋ ํฌ์ธํธ, C0 ์ ์ด ๋ฌธ์, U+0025(%), ๋๋ U+007F(DELETE)์ ๋๋ค.
ํธ์คํธ์ public suffix๋ฅผ ์ป์ผ๋ ค๋ฉด host host์ ๋ํด ๋ค์ ์ ์ฐจ๋ฅผ ์คํํฉ๋๋ค. ๊ฒฐ๊ณผ๋ null ๋๋ Public Suffix List์ ํฌํจ๋ host์ ์ผ๋ถ๋ฅผ ๋ํ๋ด๋ ๋๋ฉ์ธ์ ๋๋ค. [PSL]
-
host๊ฐ ๋๋ฉ์ธ์ด ์๋๋ฉด null์ ๋ฐํํฉ๋๋ค.
-
trailingDot์ host๊ฐ "."๋ก ๋๋๋ฉด "
.", ์๋๋ฉด ๋น ๋ฌธ์์ด๋ก ๋ก๋๋ค. -
publicSuffix๋ฅผ host๋ฅผ ๋๋ฉ์ธ์ผ๋ก ํ์ฌ Public Suffix List ์๊ณ ๋ฆฌ์ฆ์ ์คํํ ๊ฒฐ๊ณผ๋ก ๋ก๋๋ค. [PSL]
-
๋จ์ธ(Assert): publicSuffix๋ ASCII ๋ฌธ์์ด์ด๋ฉฐ, ๋์ด trailingDot์ผ๋ก ๋๋ฉ๋๋ค.
-
publicSuffix๋ฅผ ๋ฐํํฉ๋๋ค.
ํธ์คํธ์ ๋ฑ๋ก ๊ฐ๋ฅ ๋๋ฉ์ธ์ ์ป์ผ๋ ค๋ฉด host host์ ๋ํด ๋ค์ ์ ์ฐจ๋ฅผ ์คํํฉ๋๋ค. ๊ฒฐ๊ณผ๋ null ๋๋ host์ public suffix์ ๊ทธ ์์ ๋๋ฉ์ธ ๋ ์ด๋ธ(์๋ค๋ฉด)๋ก ๊ตฌ์ฑ๋ ๋๋ฉ์ธ์ ๋๋ค.
-
host์ public suffix๊ฐ null์ด๊ฑฐ๋ host์ public suffix๊ฐ host์ ๋๋ฑํ๋ค๋ฉด null์ ๋ฐํํฉ๋๋ค.
-
trailingDot์ host๊ฐ "."๋ก ๋๋๋ฉด "
.", ์๋๋ฉด ๋น ๋ฌธ์์ด๋ก ๋ก๋๋ค. -
registrableDomain์ host๋ฅผ ๋๋ฉ์ธ์ผ๋ก ํ์ฌ Public Suffix List ์๊ณ ๋ฆฌ์ฆ์ ์คํํ ๊ฒฐ๊ณผ๋ก ๋ก๋๋ค. [PSL]
-
๋จ์ธ(Assert): registrableDomain์ ASCII ๋ฌธ์์ด์ด๋ฉฐ, ๋์ด trailingDot์ผ๋ก ๋๋ฉ๋๋ค.
-
registrableDomain์ ๋ฐํํฉ๋๋ค.
| ํธ์คํธ ์ ๋ ฅ | Public suffix | ๋ฑ๋ก ๊ฐ๋ฅ ๋๋ฉ์ธ |
|---|---|---|
com
| com
| null |
example.com
| com
| example.com
|
www.example.com
| com
| example.com
|
sub.www.example.com
| com
| example.com
|
EXAMPLE.COM
| com
| example.com
|
example.com.
| com.
| example.com.
|
github.io
| github.io
| null |
whatwg.github.io
| github.io
| whatwg.github.io
|
ุฅุฎุชุจุงุฑ
| xn--kgbechtv
| null |
example.ุฅุฎุชุจุงุฑ
| xn--kgbechtv
| example.xn--kgbechtv
|
sub.example.ุฅุฎุชุจุงุฑ
| xn--kgbechtv
| example.xn--kgbechtv
|
[2001:0db8:85a3:0000:0000:8a2e:0370:7334]
| null | null |
๋ช ์ธ์์๋ ๋ณด์ ๊ฒฐ์ ์ ์ํด origin ๊ฐ๋ ์ ์ฐ์ ์ ์ผ๋ก ์ฌ์ฉํด์ผ ํฉ๋๋ค. "public suffix"์ "๋ฑ๋ก ๊ฐ๋ฅ ๋๋ฉ์ธ" ๊ฐ๋ ์ ํ์คํ ๋ณด์ ๊ฒฝ๊ณ๋ฅผ ์ ๊ณตํ์ง ์์ผ๋ฏ๋ก ์ ๋ขฐํ ์ ์์ต๋๋ค. public suffix list๋ ํด๋ผ์ด์ธํธ๋ง๋ค ๋ค๋ฅผ ์ ์์ต๋๋ค. ์ด ๊ถ๊ณ ๋ฅผ ๋ฌด์ํ๋ ๋ช ์ธ๋ URL์ scheme์ ๊ฒฐ์ ์ ํฌํจํด์ผ ํ ์ง ์ ์คํ๊ฒ ๊ณ ๋ คํด์ผ ํ๋ฉฐ, ์ฆ same site ๋๋ schemelessly same site ๊ฐ๋ ์ ์ฌ์ฉํ ์ง ๊ณ ๋ คํด์ผ ํฉ๋๋ค.
3.3. IDNA
๋๋ฉ์ธ ํ์ ์๊ณ ๋ฆฌ์ฆ์ ์ค์นผ๋ผ ๊ฐ ๋ฌธ์์ด domain๊ณผ ๋ถ๋ฆฌ์ธ beStrict๊ฐ ์ฃผ์ด์ก์ ๋, ๋ค์ ๋จ๊ณ๋ฅผ ์คํํ๋ค. ์ด ๋จ๊ณ๋ค์ ์คํจ ๋๋ ๋๋ฉ์ธ์ ๋ฐํํ๋ค.
-
strictResult๋ฅผ domain๊ณผ true๋ก ๋๋ฉ์ธ ํ์ ToASCII๋ฅผ ์คํํ ๊ฒฐ๊ณผ๋ก ๋๋ค.
-
strictResult๊ฐ ์คํจ ๊ฐ์ด๋ฉด, domain-to-ASCII ๊ฒ์ฆ ์ค๋ฅ์ด๋ค. ์ด ๋จ๊ณ๋ ๋ฐํํ์ง ์๋๋ค.
-
beStrict๊ฐ true์ด๋ฉด:
-
strictResult๊ฐ ์คํจ ๊ฐ์ด๋ฉด, ์คํจ๋ฅผ ๋ฐํํ๋ค.
-
strictResult๋ฅผ ๋ฐํํ๋ค.
-
-
result๋ฅผ null๋ก ๋๋ค.
-
domain์ด ASCII ๋ฌธ์์ด์ด๋ฉด, result๋ฅผ domain์ ์๋ฌธ์ํํ ๊ฐ์ผ๋ก ์ค์ ํ๋ค.
beStrict๊ฐ false์ด๊ณ domain์ด ASCII ๋ฌธ์์ด์ด๋ฉด, ์น ํธํ์ฑ ๋๋ฌธ์ ์๊ณ ๋ฆฌ์ฆ์ Unicode ToASCII์ ๊ฒฐ๊ณผ์ ๊ด๊ณ์์ด domain์ ์๋ฌธ์ํํ ๊ฐ์ ๋ฐํํ๋ค. IgnoreInvalidPunycode๋ง์ผ๋ก๋ ์ถฉ๋ถํ์ง ์๋ค. Punycode๊ฐ ์ฑ๊ณต์ ์ผ๋ก ๋์ฝ๋ฉ๋ ์ ์์ด๋ ์ฌ์ ํ ์ ํจ์ฑ ๊ธฐ์ค์๋ ์คํจํ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค. ์๋ฅผ ๋ค์ด,
xn--8i7caa๋๏ฝ๏ฝ๏ฝ๋ก ๋์ฝ๋ฉ๋๋ฉฐ, ๊ทธ ์ฝ๋ ํฌ์ธํธ๋ค์ ์ํ๋ "mapped"์ด๋ค. [UTS46] -
๊ทธ๋ ์ง ์์ผ๋ฉด:
-
result๋ฅผ domain๊ณผ false๋ก ๋๋ฉ์ธ ํ์ ToASCII๋ฅผ ์คํํ ๊ฒฐ๊ณผ๋ก ์ค์ ํ๋ค.
-
result๊ฐ ์คํจ ๊ฐ์ด๋ฉด, ์คํจ๋ฅผ ๋ฐํํ๋ค.
-
-
result๊ฐ ๋น ๋ฌธ์์ด์ด๋ฉด, ์คํจ๋ฅผ ๋ฐํํ๋ค.
-
result๊ฐ ๊ธ์ง๋ ๋๋ฉ์ธ ์ฝ๋ ํฌ์ธํธ๋ฅผ ํฌํจํ๋ฉด, ์คํจ๋ฅผ ๋ฐํํ๋ค.
์น ํธํ์ฑ๊ณผ DNS ๊ธฐ๋ฐ์ด ์๋ ์์คํ ๊ณผ์ ํธํ์ฑ ๋๋ฌธ์ ๊ธ์ง๋ ๋๋ฉ์ธ ์ฝ๋ ํฌ์ธํธ๋ UseSTD3ASCIIRules๊ฐ true์ผ ๋ ํ์ฉ๋์ง ์๋ ๊ฒ๋ค์ ๋ถ๋ถ์งํฉ์ด๋ค. ์ด์ #397๋ ์ฐธ์กฐํ๋ผ.
-
result๋ฅผ ๋ฐํํ๋ค.
์ด ๋ฌธ์์ ์น ํ๋ซํผ ์ ๋ฐ์ IDNA2008์ด ์๋๋ผ
Unicode IDNA Compatibility Processing์ ์ฌ์ฉํ๋ค. ์๋ฅผ ๋ค์ด,
โ.example์ ์คํจ๊ฐ ์๋๋ผ xn--53h.example์ด ๋๋ค. [UTS46] [RFC5890]
๋๋ฉ์ธ ํ์ ToASCII ์๊ณ ๋ฆฌ์ฆ์ ์ค์นผ๋ผ ๊ฐ ๋ฌธ์์ด domain๊ณผ ๋ถ๋ฆฌ์ธ beStrict๊ฐ ์ฃผ์ด์ก์ ๋, domain_name์ domain์ผ๋ก, CheckHyphens๋ฅผ beStrict๋ก, CheckBidi๋ฅผ true๋ก, CheckJoiners๋ฅผ true๋ก, UseSTD3ASCIIRules๋ฅผ beStrict๋ก, Transitional_Processing์ false๋ก, VerifyDnsLength๋ฅผ beStrict๋ก, ๊ทธ๋ฆฌ๊ณ IgnoreInvalidPunycode๋ฅผ false๋ก ์ค์ ํ์ฌ Unicode ToASCII๋ฅผ ์คํํ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํ๋ค. [UTS46]
๋๋ฉ์ธ์ Unicode๋ก ๋ณํ ์๊ณ ๋ฆฌ์ฆ์ ๋๋ฉ์ธ domain์ด ์ฃผ์ด์ก์ ๋, ๋ค์ ๋จ๊ณ๋ฅผ ์คํํ๋ค:
-
result๋ฅผ domain_name์ domain์ผ๋ก ์ค์ ํ๊ณ Unicode ToUnicode๋ฅผ ์คํํ ๊ฒฐ๊ณผ๋ก ๋๋ค. CheckHyphens๋ false, CheckBidi๋ true, CheckJoiners๋ true, UseSTD3ASCIIRules๋ false, Transitional_Processing์ false, ๊ทธ๋ฆฌ๊ณ IgnoreInvalidPunycode๋ false๋ก ์ค์ ํ๋ค. [UTS46]
-
์ค๋ฅ๊ฐ ๊ธฐ๋ก๋์์ผ๋ฉด, domain์ ๋ฐํํ๋ค.
domain์ ํธ์คํธ ํ์์ ๊ฒฐ๊ณผ๋ก๋ง ๋์ฌ ์ ์์ผ๋ฏ๋ก, ๊ธฐ๋ก๋ ๋ชจ๋ ์ค๋ฅ๋ ์ด๋ฏธ ๊ฒ์ฆ ์ค๋ฅ๋ก ํ์๋์์ ๊ฒ์ด๋ค. domain์ ๋ฐํํ๋ฉด ๋๋ฉ์ธ ํ์์ ๋๋ฉ์ธ์ Unicode๋ก ๋ณํ์ด
xn--8i7caa์ ๊ฐ์ ์ ๋ ฅ์์ ์๋ณต๋๋๋ก ๋ณด์ฅํ๋ค. -
result๋ฅผ ๋ฐํํ๋ค.
3.4. ํธ์คํธ ์์ฑ
์ ํจํ ํธ์คํธ ๋ฌธ์์ด์ ์ ํจํ ๋๋ฉ์ธ ๋ฌธ์์ด, ์ ํจํ IPv4 ์ฃผ์ ๋ฌธ์์ด, ๋๋ ๋ค์์ด์ด์ผ ํ๋ค: U+005B ([), ๋ค์ด์ด ์ ํจํ IPv6 ์ฃผ์ ๋ฌธ์์ด, ๋ค์ด์ด U+005D (]).
๋ฌธ์์ด input์ ๋ค์ ๋จ๊ณ๋ค์ด true๋ฅผ ๋ฐํํ๋ฉด ์ ํจํ ๋๋ฉ์ธ์ด๋ค:
-
domain์ input๊ณผ true๋ก ๋๋ฉ์ธ ํ์๋ฅผ ์คํํ ๊ฒฐ๊ณผ๋ก ๋๋ค.
-
domain์ด ์คํจ์ด๋ฉด false๋ฅผ ๋ฐํํ๋ค.
-
domain์ ๋ํด ์ซ์๋ก ๋๋๋์ง ๊ฒ์ฌ๊ธฐ๋ฅผ ์คํํ ๊ฒฐ๊ณผ๊ฐ true์ด๋ฉด, false๋ฅผ ๋ฐํํ๋ค.
-
true๋ฅผ ๋ฐํํ๋ค.
์ด์์ ์ผ๋ก๋ ์ด๋ฅผ ๋๋์ง ์ก๊ธฐ์ ๋ฐฉ์์ด ์๋๋ผ, ์ ํจํ ๋๋ฉ์ธ์ ๊ตฌ์ฑํ๋ ์ฝ๋ ํฌ์ธํธ ์ํ์ค์ ๊ด์ ์์ ์ ์ํ๋ค: ์ด์ 245.
์ ํจํ ๋๋ฉ์ธ ๋ฌธ์์ด์ ์ ํจํ ๋๋ฉ์ธ์ธ ๋ฌธ์์ด์ด์ด์ผ ํ๋ค.
์ ํจํ IPv4 ์ฃผ์ ๋ฌธ์์ด์ 0 ์ด์ 255 ์ดํ์ ๋ฒ์์ ์๋ 10์ง์๋ฅผ ๋ํ๋ด๋, ๊ฐ๋ฅํ ๊ฐ์ฅ ์งง์ ASCII ์ซ์ ๋ฌธ์์ด ๋ค ๊ฐ๊ฐ U+002E (.)๋ก ์๋ก ๊ตฌ๋ถ๋ ๊ฒ์ด์ด์ผ ํ๋ค.
์ ํจํ IPv6 ์ฃผ์ ๋ฌธ์์ด์ ๋ค์ ์ค ํ๋์ฌ์ผ ํ๋ค:
-
์ ํจํ IPv6 ์กฐ๊ฐ ๋ฌธ์์ด์ด๋ฉฐ ์ ํจ ์กฐ๊ฐ ๊ธธ์ด๊ฐ 8์ธ ๊ฒ.
-
์ ํจํ IPv6 ์กฐ๊ฐ ๋ฐ IPv4 ๋ฌธ์์ด์ด๋ฉฐ ์ ํจ ์กฐ๊ฐ ๊ธธ์ด๊ฐ 8์ธ ๊ฒ.
-
U+003A U+003A (::), ์ ํ์ ์ผ๋ก ์์ ์ ํจํ IPv6 ์กฐ๊ฐ ๋ฌธ์์ด์ด ์ค๊ณ , ์ ํ์ ์ผ๋ก ๋ค์ ์ ํจํ IPv6 ์กฐ๊ฐ ๋ฌธ์์ด ๋๋ ์ ํจํ IPv6 ์กฐ๊ฐ ๋ฐ IPv4 ๋ฌธ์์ด์ด ์ค๋ฉฐ, ์๋ค ๋ฌธ์์ด๋ค์ ์ ํจ ์กฐ๊ฐ ๊ธธ์ด์ ํฉ์ด ์ต๋ 7์ธ ๊ฒ.
์ ํจํ IPv6 ์กฐ๊ฐ ๋ฐ IPv4 ๋ฌธ์์ด์ ์ ํจํ IPv6 ์กฐ๊ฐ ๋ฌธ์์ด ๋ค์ U+003A (:)๊ฐ ์ค๊ณ , ๊ทธ ๋ค์ ์ ํจํ IPv4 ์ฃผ์ ๋ฌธ์์ด์ด ์ค๋ ๊ฒ์ด๊ฑฐ๋; ๋๋ ์ ํจํ IPv4 ์ฃผ์ ๋ฌธ์์ด ๋จ๋ ์ด๋ค.
์ ํจํ IPv6 ์กฐ๊ฐ ๋ฌธ์์ด์ ํ๋ ์ด์์ ์ ํจํ IPv6 ์กฐ๊ฐ ๋ฌธ์์ด์ด U+003A (:)๋ก ์๋ก ๊ตฌ๋ถ๋ ๊ฒ์ด๋ค.
์ ํจํ IPv6 ์กฐ๊ฐ ๋ฌธ์์ด์ 0 ์ด์ 0xFFFF ์ดํ์ ๋ฒ์์ ์๋ 16์ง์๋ฅผ ๋ํ๋ด๋, ๊ฐ๋ฅํ ๊ฐ์ฅ ์งง์ ASCII 16์ง์ ์ซ์ ๋ฌธ์์ด์ด๋ค.
์ ํจํ IPv6 ์กฐ๊ฐ ๋ฌธ์์ด์ ์ ํจ ์กฐ๊ฐ ๊ธธ์ด๋ ๊ทธ๊ฒ์ด ํฌํจํ๋ ์ ํจํ IPv6 ์กฐ๊ฐ ๋ฌธ์์ด์ ์์ด๋ค. ์ ํจ ์กฐ๊ฐ ๊ธธ์ด ์ ํจํ IPv6 ์กฐ๊ฐ ๋ฐ IPv4 ๋ฌธ์์ด์ ๊ฒฝ์ฐ์๋ ๊ทธ๊ฒ์ด ํฌํจํ๋ ์ ํจํ IPv6 ์กฐ๊ฐ ๋ฌธ์์ด์ ์์ 2๋ฅผ ๋ํ ๊ฐ์ด๋ค.
์ด๋ A Recommendation for IPv6 Address Text Representation์์ ํ์๋์๋ค. IPv4์์ ์ผ๊ด์ฑ์ ์ํด ์ ํ 0์ ํ์ฉ๋์ง ์๋๋ค. [RFC5952]
์ ํจํ ๋ถํฌ๋ช ํธ์คํธ ๋ฌธ์์ด์ ๋ค์ ์ค ํ๋์ฌ์ผ ํ๋ค:
-
๊ธ์ง๋ ํธ์คํธ ์ฝ๋ ํฌ์ธํธ๋ฅผ ์ ์ธํ ํ๋ ์ด์์ URL ๋จ์
-
U+005B ([), ๊ทธ ๋ค์ ์ ํจํ IPv6 ์ฃผ์ ๋ฌธ์์ด, ๊ทธ ๋ค์ U+005D (]).
์ด๋ ์ ํจํ ํธ์คํธ ๋ฌธ์์ด์ ์ ์ ์ผ๋ถ๊ฐ ์๋๋ค. ๊ตฌ๋ณํ๊ธฐ ์ํด ๋ฌธ๋งฅ์ด ํ์ํ๊ธฐ ๋๋ฌธ์ด๋ค.
3.5. ํธ์คํธ ํ์ฑ
ํธ์คํธ ํ์๋ ์ค์นผ๋ผ ๊ฐ ๋ฌธ์์ด input๊ณผ ์ ํ์ boolean isOpaque(๊ธฐ๋ณธ๊ฐ false)๋ฅผ ๋ฐ์ ๋ค์ ๋จ๊ณ๋ฅผ ์คํํ๋ค. ์ด ๋จ๊ณ๋ค์ failure ๋๋ ํธ์คํธ๋ฅผ ๋ฐํํ๋ค.
-
input์ด U+005B ([)๋ก ์์ํ๋ฉด:
-
input์ด U+005D (])๋ก ๋๋์ง ์์ผ๋ฉด, IPv6-unclosed ๊ฒ์ฆ ์ค๋ฅ, failure๋ฅผ ๋ฐํํ๋ค.
-
input์์ ์์ U+005B ([)์ ๋ค์ U+005D (])๋ฅผ ์ ๊ฑฐํ ๊ฐ์ผ๋ก IPv6 ๊ตฌ๋ฌธ ๋ถ์์ ์ํํ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํ๋ค.
-
-
isOpaque๊ฐ true์ด๋ฉด, ๋ถํฌ๋ช ํธ์คํธ ๊ตฌ๋ฌธ ๋ถ์ input์ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํ๋ค.
-
Assert: input์ ๋น ๋ฌธ์์ด์ด ์๋๋ค.
-
input์ ํผ์ผํธ ์ธ์ฝ๋ฉ๋ ๋ฐ์ดํธ๊ฐ ํฌํจ๋์ด ์์ผ๋ฉด, domain-percent-encoded ๊ฒ์ฆ ์ค๋ฅ.
-
domain์ input์ ํผ์ผํธ ๋์ฝ๋ฉ์ BOM ์๋ UTF-8 ๋์ฝ๋ฉ์ ์คํํ ๊ฒฐ๊ณผ๋ก ๋๋ค.
๋๋, BOM ์๋ UTF-8 ๋์ฝ๋ฉ ๋๋ ์คํจ๋ฅผ ์ฌ์ฉํ๊ณ , failure์ ๋ํด ์กฐ๊ธฐ ๋ฐํํ๋๋ก ๊ฒฐํฉํ ์ ์๋ค. ๋๋ฉ์ธ ํ์๋ U+FFFD (๏ฟฝ)์์ ์คํจํ๊ธฐ ๋๋ฌธ์ด๋ค.
-
asciiDomain์ ๋๋ฉ์ธ ํ์๋ฅผ domain๊ณผ false๋ก ์คํํ ๊ฒฐ๊ณผ๋ก ๋๋ค.
-
asciiDomain์ด failure์ด๋ฉด, failure๋ฅผ ๋ฐํํ๋ค.
-
asciiDomain์ด ์ซ์๋ก ๋๋๋ฉด:
-
domain์ด ASCII ๋ฌธ์์ด์ด ์๋๋ฉด, IPv4-non-ASCII-input ๊ฒ์ฆ ์ค๋ฅ.
-
IPv4 ๊ตฌ๋ฌธ ๋ถ์ asciiDomain์ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํ๋ค.
-
-
asciiDomain์ ๋ฐํํ๋ค.
์ซ์๋ก ๋๋๋์ง ๊ฒ์ฌ๊ธฐ๋ ASCII ๋ฌธ์์ด input์ ๋ฐ์ ๋ค์ ๋จ๊ณ๋ฅผ ์คํํ๋ค. ์ด ๋จ๊ณ๋ค์ boolean์ ๋ฐํํ๋ค.
-
Assert: input์ ๋น ๋ฌธ์์ด์ด ์๋๋ค.
-
parts๋ฅผ input์ U+002E (.)์์ ์๊ฒฉํ๊ฒ ๋ถํ ํ ๊ฒฐ๊ณผ๋ก ๋๋ค.
-
parts์ ๋ง์ง๋ง ํญ๋ชฉ์ด ๋น ๋ฌธ์์ด์ด๋ฉด, parts์์ ๋ง์ง๋ง ํญ๋ชฉ์ ์ ๊ฑฐํ๋ค.
-
last๋ฅผ parts์ ๋ง์ง๋ง ํญ๋ชฉ์ผ๋ก ๋๋ค.
-
last๊ฐ ๋น ๋ฌธ์์ด์ด ์๋๊ณ ASCII ์ซ์๋ง ํฌํจํ๋ฉด, true๋ฅผ ๋ฐํํ๋ค.
์๋ชป๋ ์ ๋ ฅ "
09"๋ ์ดํ ๋จ๊ณ์์ IPv4 ํ์์ ์ํด ์กํ๋ค. -
last๋ฅผ IPv4 ์ซ์๋ก ๊ตฌ๋ฌธ ๋ถ์ํ์ ๋ failure๋ฅผ ๋ฐํํ์ง ์์ผ๋ฉด, true๋ฅผ ๋ฐํํ๋ค.
์ด๋ last๊ฐ "
0X" ๋๋ "0x"์ด๊ณ , ๊ทธ ๋ค์ 0๊ฐ ์ด์์ ASCII 16์ง ์ซ์๊ฐ ์ค๋์ง ๊ฒ์ฌํ๋ ๊ฒ๊ณผ ๋๋ฑํ๋ค. -
false๋ฅผ ๋ฐํํ๋ค.
IPv4 ํ์๋ ASCII ๋ฌธ์์ด input์ ๋ฐ์ ๋ค์ ๋จ๊ณ๋ฅผ ์คํํ๋ค. ์ด ๋จ๊ณ๋ค์ failure ๋๋ IPv4 ์ฃผ์๋ฅผ ๋ฐํํ๋ค.
IPv4 ํ์๋ ์ง์ ํธ์ถํด์๋ ์ ๋๋ค. ๋์ ํธ์คํธ ํ์์ ๋ฐํ ๊ฐ์ด IPv4 ์ฃผ์์ธ์ง ํ์ธํ๋ค.
-
parts๋ฅผ input์ U+002E (.)์์ ์๊ฒฉํ๊ฒ ๋ถํ ํ ๊ฒฐ๊ณผ๋ก ๋๋ค.
-
parts์ ๋ง์ง๋ง ํญ๋ชฉ์ด ๋น ๋ฌธ์์ด์ด๋ฉด:
-
parts์ ํฌ๊ธฐ๊ฐ 4๋ณด๋ค ์์ผ๋ฉด, IPv4-too-few-parts ๊ฒ์ฆ ์ค๋ฅ.
-
parts์ ํฌ๊ธฐ๊ฐ 4๋ณด๋ค ํฌ๋ฉด, IPv4-too-many-parts ๊ฒ์ฆ ์ค๋ฅ, failure๋ฅผ ๋ฐํํ๋ค.
-
numbers๋ฅผ ๋น ๋ชฉ๋ก์ผ๋ก ๋๋ค.
-
parts์ ๊ฐ part์ ๋ํด ๋ฐ๋ณตํ๋ค:
-
result๋ฅผ part๋ฅผ ๊ตฌ๋ฌธ ๋ถ์ํ ๊ฒฐ๊ณผ๋ก ๋๋ค.
-
result๊ฐ failure์ด๋ฉด, IPv4-non-numeric-part ๊ฒ์ฆ ์ค๋ฅ, failure๋ฅผ ๋ฐํํ๋ค.
-
result[1]์ด true์ด๋ฉด, IPv4-non-decimal-part ๊ฒ์ฆ ์ค๋ฅ.
-
result[0]์ numbers์ ์ถ๊ฐํ๋ค.
-
-
numbers์ ์ด๋ค ํญ๋ชฉ์ด๋ 255๋ณด๋ค ํฌ๋ฉด, IPv4-out-of-range-part ๊ฒ์ฆ ์ค๋ฅ.
-
numbers์์ ๋ง์ง๋ง ํญ๋ชฉ์ ์ ์ธํ ์ด๋ค ํญ๋ชฉ์ด๋ 255๋ณด๋ค ํฌ๋ฉด, failure๋ฅผ ๋ฐํํ๋ค.
-
numbers์ ๋ง์ง๋ง ํญ๋ชฉ์ด 256(5 โ numbers์ ํฌ๊ธฐ)๋ณด๋ค ํฌ๊ฑฐ๋ ๊ฐ์ผ๋ฉด, failure๋ฅผ ๋ฐํํ๋ค.
-
ipv4๋ฅผ numbers์ ๋ง์ง๋ง ํญ๋ชฉ์ผ๋ก ๋๋ค.
-
counter๋ฅผ 0์ผ๋ก ๋๋ค.
-
numbers์ ๊ฐ n์ ๋ํด ๋ฐ๋ณตํ๋ค:
-
ipv4๋ฅผ n ร 256(3 โ counter)๋งํผ ์ฆ๊ฐ์ํจ๋ค.
-
counter๋ฅผ 1๋งํผ ์ฆ๊ฐ์ํจ๋ค.
-
-
ipv4๋ฅผ ๋ฐํํ๋ค.
IPv4 ์ซ์ ํ์๋ ASCII ๋ฌธ์์ด input์ ๋ฐ์ ๋ค์ ๋จ๊ณ๋ฅผ ์คํํ๋ค. ์ด ๋จ๊ณ๋ค์ failure ๋๋ ์ซ์์ boolean์ ํํ์ ๋ฐํํ๋ค.
-
input์ด ๋น ๋ฌธ์์ด์ด๋ฉด, failure๋ฅผ ๋ฐํํ๋ค.
-
validationError๋ฅผ false๋ก ๋๋ค.
-
R์ 10์ผ๋ก ๋๋ค.
-
input์ด ์ ์ด๋ ๋ ๊ฐ์ ์ฝ๋ ํฌ์ธํธ๋ฅผ ํฌํจํ๊ณ ์ฒ์ ๋ ์ฝ๋ ํฌ์ธํธ๊ฐ "
0X" ๋๋ "0x"์ด๋ฉด:-
validationError๋ฅผ true๋ก ์ค์ ํ๋ค.
-
input์์ ์ฒ์ ๋ ์ฝ๋ ํฌ์ธํธ๋ฅผ ์ ๊ฑฐํ๋ค.
-
R์ 16์ผ๋ก ์ค์ ํ๋ค.
-
-
๊ทธ๋ ์ง ์๊ณ , input์ด ์ ์ด๋ ๋ ๊ฐ์ ์ฝ๋ ํฌ์ธํธ๋ฅผ ํฌํจํ๊ณ ์ฒซ ๋ฒ์งธ ์ฝ๋ ํฌ์ธํธ๊ฐ U+0030 (0)์ด๋ฉด:
-
validationError๋ฅผ true๋ก ์ค์ ํ๋ค.
-
input์์ ์ฒซ ๋ฒ์งธ ์ฝ๋ ํฌ์ธํธ๋ฅผ ์ ๊ฑฐํ๋ค.
-
R์ 8๋ก ์ค์ ํ๋ค.
-
-
input์ด ๋น ๋ฌธ์์ด์ด๋ฉด, (0, true)๋ฅผ ๋ฐํํ๋ค.
-
input์ radix-R ์ซ์๊ฐ ์๋ ์ฝ๋ ํฌ์ธํธ๊ฐ ํฌํจ๋์ด ์์ผ๋ฉด failure๋ฅผ ๋ฐํํ๋ค.
-
output์ input์ด radix-R ํ๊ธฐ๋ฒ์์ ๋ํ๋ด๋ ์ํ์ ์ ์ ๊ฐ์ผ๋ก ๋๋ค. ์ด๋ ๊ฐ 0๋ถํฐ 15๊น์ง์ ์ซ์์๋ ASCII 16์ง ์ซ์๋ฅผ ์ฌ์ฉํ๋ค.
-
(output, validationError)๋ฅผ ๋ฐํํ๋ค.
IPv6 ํ์๋ ์ค์นผ๋ผ ๊ฐ ๋ฌธ์์ด input์ ๋ฐ์ ๋ค์ ๋จ๊ณ๋ฅผ ์คํํ๋ค. ์ด ๋จ๊ณ๋ค์ failure ๋๋ IPv6 ์ฃผ์๋ฅผ ๋ฐํํ๋ค.
IPv6 ํ์๋ ์ด๋ก ์ ์ผ๋ก ์ง์ ํธ์ถํ ์ ์์ง๋ง, ์ค์ ๋ก ๊ทธ๋ ๊ฒ ํ๊ธฐ ์ ์ ์ด ๋ฌธ์์ ํธ์ง์๋ค๊ณผ ๋ ผ์ํ๊ธฐ ๋ฐ๋๋ค.
-
address๋ฅผ ๋ชจ๋ ์กฐ๊ฐ์ด 0์ธ ์ IPv6 ์ฃผ์๋ก ๋๋ค.
-
pieceIndex๋ฅผ 0์ผ๋ก ๋๋ค.
-
compress๋ฅผ null๋ก ๋๋ค.
-
pointer๋ฅผ input์ ๋ํ ํฌ์ธํฐ๋ก ๋๋ค.
-
c๊ฐ U+003A (:)์ด๋ฉด:
-
remaining์ด U+003A (:)๋ก ์์ํ์ง ์์ผ๋ฉด, IPv6-invalid-compression ๊ฒ์ฆ ์ค๋ฅ, failure๋ฅผ ๋ฐํํ๋ค.
-
pointer๋ฅผ 2๋งํผ ์ฆ๊ฐ์ํจ๋ค.
-
pieceIndex๋ฅผ 1๋งํผ ์ฆ๊ฐ์ํจ ๋ค์ compress๋ฅผ pieceIndex๋ก ์ค์ ํ๋ค.
-
-
c๊ฐ EOF ์ฝ๋ ํฌ์ธํธ๊ฐ ์๋ ๋์:
-
pieceIndex๊ฐ 8์ด๋ฉด, IPv6-too-many-pieces ๊ฒ์ฆ ์ค๋ฅ, failure๋ฅผ ๋ฐํํ๋ค.
-
c๊ฐ U+003A (:)์ด๋ฉด:
-
compress๊ฐ null์ด ์๋๋ฉด, IPv6-multiple-compression ๊ฒ์ฆ ์ค๋ฅ, failure๋ฅผ ๋ฐํํ๋ค.
- pointer์ pieceIndex๋ฅผ 1๋งํผ ์ฆ๊ฐ์ํค๊ณ , compress๋ฅผ pieceIndex๋ก ์ค์ ํ ๋ค์ continueํ๋ค.
-
-
value์ length๋ฅผ 0์ผ๋ก ๋๋ค.
-
length๊ฐ 4๋ณด๋ค ์๊ณ c๊ฐ ASCII 16์ง ์ซ์์ธ ๋์, value๋ฅผ value ร 0x10 + 16์ง์๋ก ํด์ํ c๋ก ์ค์ ํ๊ณ , pointer์ length๋ฅผ 1๋งํผ ์ฆ๊ฐ์ํจ๋ค.
-
c๊ฐ U+002E (.)์ด๋ฉด:
-
length๊ฐ 0์ด๋ฉด, IPv4-in-IPv6-invalid-code-point ๊ฒ์ฆ ์ค๋ฅ, failure๋ฅผ ๋ฐํํ๋ค.
-
pointer๋ฅผ length๋งํผ ๊ฐ์์ํจ๋ค.
-
pieceIndex๊ฐ 6๋ณด๋ค ํฌ๋ฉด, IPv4-in-IPv6-too-many-pieces ๊ฒ์ฆ ์ค๋ฅ, failure๋ฅผ ๋ฐํํ๋ค.
-
numbersSeen์ 0์ผ๋ก ๋๋ค.
-
c๊ฐ EOF ์ฝ๋ ํฌ์ธํธ๊ฐ ์๋ ๋์:
-
ipv4Piece๋ฅผ null๋ก ๋๋ค.
-
numbersSeen์ด 0๋ณด๋ค ํฌ๋ฉด:
-
c๊ฐ U+002E (.)์ด๊ณ numbersSeen์ด 4๋ณด๋ค ์์ผ๋ฉด, pointer๋ฅผ 1๋งํผ ์ฆ๊ฐ์ํจ๋ค.
- ๊ทธ๋ ์ง ์์ผ๋ฉด, IPv4-in-IPv6-invalid-code-point ๊ฒ์ฆ ์ค๋ฅ, failure๋ฅผ ๋ฐํํ๋ค.
-
-
c๊ฐ ASCII ์ซ์๊ฐ ์๋๋ฉด, IPv4-in-IPv6-invalid-code-point ๊ฒ์ฆ ์ค๋ฅ, failure๋ฅผ ๋ฐํํ๋ค.
-
c๊ฐ ASCII ์ซ์์ธ ๋์:
-
number๋ฅผ ์ญ์ง์๋ก ํด์ํ c๋ก ๋๋ค.
-
ipv4Piece๊ฐ null์ด๋ฉด, ipv4Piece๋ฅผ number๋ก ์ค์ ํ๋ค.
-
๊ทธ๋ ์ง ์๊ณ ipv4Piece๊ฐ 0์ด๋ฉด, IPv4-in-IPv6-invalid-code-point ๊ฒ์ฆ ์ค๋ฅ, failure๋ฅผ ๋ฐํํ๋ค.
-
๊ทธ๋ ์ง ์์ผ๋ฉด, ipv4Piece๋ฅผ ipv4Piece ร 10 + number๋ก ์ค์ ํ๋ค.
-
ipv4Piece๊ฐ 255๋ณด๋ค ํฌ๋ฉด, IPv4-in-IPv6-out-of-range-part ๊ฒ์ฆ ์ค๋ฅ, failure๋ฅผ ๋ฐํํ๋ค.
-
pointer๋ฅผ 1๋งํผ ์ฆ๊ฐ์ํจ๋ค.
-
-
address[pieceIndex]๋ฅผ address[pieceIndex] ร 0x100 + ipv4Piece๋ก ์ค์ ํ๋ค.
-
numbersSeen์ 1๋งํผ ์ฆ๊ฐ์ํจ๋ค.
-
numbersSeen์ด 2 ๋๋ 4์ด๋ฉด, pieceIndex๋ฅผ 1๋งํผ ์ฆ๊ฐ์ํจ๋ค.
-
-
numbersSeen์ด 4๊ฐ ์๋๋ฉด, IPv4-in-IPv6-too-few-parts ๊ฒ์ฆ ์ค๋ฅ, failure๋ฅผ ๋ฐํํ๋ค.
-
Breakํ๋ค.
-
-
๊ทธ๋ ์ง ์๊ณ , c๊ฐ U+003A (:)์ด๋ฉด:
-
pointer๋ฅผ 1๋งํผ ์ฆ๊ฐ์ํจ๋ค.
-
c๊ฐ EOF ์ฝ๋ ํฌ์ธํธ์ด๋ฉด, IPv6-invalid-code-point ๊ฒ์ฆ ์ค๋ฅ, failure๋ฅผ ๋ฐํํ๋ค.
-
-
๊ทธ๋ ์ง ์๊ณ , c๊ฐ EOF ์ฝ๋ ํฌ์ธํธ๊ฐ ์๋๋ฉด, IPv6-invalid-code-point ๊ฒ์ฆ ์ค๋ฅ, failure๋ฅผ ๋ฐํํ๋ค.
-
length๊ฐ 1๋ณด๋ค ํฌ๊ณ value๊ฐ 0x10length โ 1๋ณด๋ค ์์ผ๋ฉด, IPv6-piece-leading-zero ๊ฒ์ฆ ์ค๋ฅ.
-
address[pieceIndex]๋ฅผ value๋ก ์ค์ ํ๋ค.
-
pieceIndex๋ฅผ 1๋งํผ ์ฆ๊ฐ์ํจ๋ค.
-
-
compress๊ฐ null์ด ์๋๋ฉด:
-
swaps๋ฅผ pieceIndex โ compress๋ก ๋๋ค.
-
pieceIndex๋ฅผ 7๋ก ์ค์ ํ๋ค.
-
pieceIndex๊ฐ 0์ด ์๋๊ณ swaps๊ฐ 0๋ณด๋ค ํฐ ๋์, address[pieceIndex]์ address[compress + swaps โ 1]์ ๋ง๋ฐ๊พผ ๋ค์, pieceIndex์ swaps๋ฅผ ๋ชจ๋ 1๋งํผ ๊ฐ์์ํจ๋ค.
-
-
๊ทธ๋ ์ง ์๊ณ , compress๊ฐ null์ด๊ณ pieceIndex๊ฐ 8์ด ์๋๋ฉด, IPv6-too-few-pieces ๊ฒ์ฆ ์ค๋ฅ, failure๋ฅผ ๋ฐํํ๋ค.
-
address๋ฅผ ๋ฐํํ๋ค.
๋ถํฌ๋ช ํธ์คํธ ํ์๋ ์ค์นผ๋ผ ๊ฐ ๋ฌธ์์ด input์ ๋ฐ์, ๋ค์ ๋จ๊ณ๋ฅผ ์คํํ๋ค. ์ด ๋จ๊ณ๋ค์ failure ๋๋ ๋ถํฌ๋ช ํธ์คํธ๋ฅผ ๋ฐํํ๋ค.
-
input์ ๊ธ์ง๋ ํธ์คํธ ์ฝ๋ ํฌ์ธํธ๊ฐ ํฌํจ๋์ด ์์ผ๋ฉด, host-invalid-code-point ๊ฒ์ฆ ์ค๋ฅ, failure๋ฅผ ๋ฐํํ๋ค.
-
input์ ์ฝ๋ ํฌ์ธํธ๊ฐ ํฌํจ๋์ด ์๊ณ , ๊ทธ๊ฒ์ด URL ์ฝ๋ ํฌ์ธํธ๋ ์๋๋ฉฐ U+0025 (%)๋ ์๋๋ฉด, invalid-URL-unit ๊ฒ์ฆ ์ค๋ฅ.
-
input์ U+0025 (%)๊ฐ ํฌํจ๋์ด ์๊ณ ๊ทธ ๋ค์ ๋ ์ฝ๋ ํฌ์ธํธ๊ฐ ASCII 16์ง ์ซ์๊ฐ ์๋๋ฉด, invalid-URL-unit ๊ฒ์ฆ ์ค๋ฅ.
-
input์ C0 ์ ์ด ํผ์ผํธ ์ธ์ฝ๋ฉ ์งํฉ์ ์ฌ์ฉํ์ฌ UTF-8 ํผ์ผํธ ์ธ์ฝ๋ฉ์ ์คํํ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํ๋ค.
3.6. ํธ์คํธ ์ง๋ ฌํ
ํธ์คํธ ์ง๋ ฌํ๊ธฐ๋ ํธ์คํธ host๋ฅผ ๋ฐ์ ๋ค์ ๋จ๊ณ๋ฅผ ์คํํ๋ค. ์ด ๋จ๊ณ๋ค์ ASCII ๋ฌธ์์ด์ ๋ฐํํ๋ค.
-
host๊ฐ IPv4 ์ฃผ์์ด๋ฉด, host์ IPv4 ์ง๋ ฌํ๊ธฐ๋ฅผ ์คํํ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํ๋ค.
-
๊ทธ๋ ์ง ์๊ณ , host๊ฐ IPv6 ์ฃผ์์ด๋ฉด, U+005B ([)์ host์ IPv6 ์ง๋ ฌํ๊ธฐ๋ฅผ ์คํํ ๊ฒฐ๊ณผ, ๊ทธ๋ฆฌ๊ณ U+005D (])๋ฅผ ์ฐจ๋ก๋ก ๋ฐํํ๋ค.
-
๊ทธ๋ ์ง ์์ผ๋ฉด, host๋ ๋๋ฉ์ธ, ๋ถํฌ๋ช ํธ์คํธ, ๋๋ ๋น ํธ์คํธ์ด๋ฉฐ, host๋ฅผ ๋ฐํํ๋ค.
IPv4 ์ง๋ ฌํ๊ธฐ๋ IPv4 ์ฃผ์ address๋ฅผ ๋ฐ์ ๋ค์ ๋จ๊ณ๋ฅผ ์คํํ๋ค. ์ด ๋จ๊ณ๋ค์ ASCII ๋ฌธ์์ด์ ๋ฐํํ๋ค.
-
output์ ๋น ๋ฌธ์์ด๋ก ๋๋ค.
-
n์ address์ ๊ฐ์ผ๋ก ๋๋ค.
-
1๋ถํฐ 4๊น์ง์ ๋ฒ์(์ ๋ ํฌํจ)์ ์๋ ๊ฐ i์ ๋ํด ๋ฐ๋ณตํ๋ค:
-
n % 256์ ์ง๋ ฌํํ ๊ฐ์ output ์์ ์ถ๊ฐํ๋ค.
-
i๊ฐ 4๊ฐ ์๋๋ฉด, U+002E (.)๋ฅผ output ์์ ์ถ๊ฐํ๋ค.
-
n์ floor(n / 256)์ผ๋ก ์ค์ ํ๋ค.
-
-
output์ ๋ฐํํ๋ค.
IPv6 ์ง๋ ฌํ๊ธฐ๋ IPv6 ์ฃผ์ address๋ฅผ ๋ฐ์ ๋ค์ ๋จ๊ณ๋ฅผ ์คํํ๋ค. ์ด ๋จ๊ณ๋ค์ ASCII ๋ฌธ์์ด์ ๋ฐํํ๋ค.
-
output์ ๋น ๋ฌธ์์ด๋ก ๋๋ค.
-
compress๋ฅผ ์ฃผ์ด์ง address์ ๋ํด IPv6 ์ฃผ์์ ์์ถ๋ ์กฐ๊ฐ ์ธ๋ฑ์ค๋ฅผ ์ฐพ๋ ๊ฒฐ๊ณผ๋ก ๋๋ค.
-
ignore0์ false๋ก ๋๋ค.
-
address์ ์กฐ๊ฐ๋ค์ ์ธ๋ฑ์ค์ ์๋ ๊ฐ pieceIndex์ ๋ํด ๋ฐ๋ณตํ๋ค:
-
ignore0์ด true์ด๊ณ address[pieceIndex]๊ฐ 0์ด๋ฉด, continueํ๋ค.
-
๊ทธ๋ ์ง ์๊ณ , ignore0์ด true์ด๋ฉด, ignore0์ false๋ก ์ค์ ํ๋ค.
-
compress๊ฐ pieceIndex์ด๋ฉด:
-
pieceIndex๊ฐ 0์ด๋ฉด separator๋ฅผ "
::"๋ก ๋๊ณ , ๊ทธ๋ ์ง ์์ผ๋ฉด U+003A (:)๋ก ๋๋ค. -
separator๋ฅผ output์ ์ถ๊ฐํ๋ค.
-
ignore0์ true๋ก ์ค์ ํ๊ณ continueํ๋ค.
-
-
address[pieceIndex]๋ฅผ ๊ฐ๋ฅํ ๊ฐ์ฅ ์งง์ ์๋ฌธ์ 16์ง์๋ก ํํํ์ฌ output์ ์ถ๊ฐํ๋ค.
-
pieceIndex๊ฐ 7์ด ์๋๋ฉด, U+003A (:)๋ฅผ output์ ์ถ๊ฐํ๋ค.
-
-
output์ ๋ฐํํ๋ค.
์ด ์๊ณ ๋ฆฌ์ฆ์ IPv6 ์ฃผ์ ํ ์คํธ ํํ์ ์ํ ๊ถ๊ณ ์์ ๊ถ๊ณ ๋ฅผ ์๊ตฌํ๋ค. [RFC5952]
IPv6 ์ฃผ์ address๊ฐ ์ฃผ์ด์ก์ ๋, IPv6 ์ฃผ์ ์์ถ ์กฐ๊ฐ ์ธ๋ฑ์ค๋ฅผ ์ฐพ์ผ๋ ค๋ฉด:
-
longestIndex๋ฅผ null๋ก ๋๋ค.
-
longestSize๋ฅผ 1๋ก ๋๋ค.
-
foundIndex๋ฅผ null๋ก ๋๋ค.
-
foundSize๋ฅผ 0์ผ๋ก ๋๋ค.
-
address์ ์กฐ๊ฐ๋ค์ ์ธ๋ฑ์ค ์ค ๊ฐ pieceIndex์ ๋ํด ๋ฐ๋ณตํ๋ค:
-
address์ ์กฐ๊ฐ[pieceIndex]๊ฐ 0์ด ์๋๋ฉด:
-
foundSize๊ฐ longestSize๋ณด๋ค ํฌ๋ฉด, longestIndex๋ฅผ foundIndex๋ก, longestSize๋ฅผ foundSize๋ก ์ค์ ํ๋ค.
- foundIndex๋ฅผ null๋ก ์ค์ ํ๋ค.
- foundSize๋ฅผ 0์ผ๋ก ์ค์ ํ๋ค.
-
-
๊ทธ๋ ์ง ์์ผ๋ฉด:
-
foundIndex๊ฐ null์ด๋ฉด, foundIndex๋ฅผ pieceIndex๋ก ์ค์ ํ๋ค.
-
foundSize๋ฅผ 1๋งํผ ์ฆ๊ฐ์ํจ๋ค.
-
-
-
foundSize๊ฐ longestSize๋ณด๋ค ํฌ๋ฉด, foundIndex๋ฅผ ๋ฐํํ๋ค.
-
longestIndex๋ฅผ ๋ฐํํ๋ค.
3.7. ํธ์คํธ ๋๋ฑ์ฑ
์ด๋ค ํธ์คํธ A ๊ฐ์ ํธ์คํธ B์ธ์ง ํ๋จํ๋ ค๋ฉด, A์ B๊ฐ ๊ฐ์ผ๋ฉด true๋ฅผ ๋ฐํํ๊ณ , ๊ทธ๋ ์ง ์์ผ๋ฉด false๋ฅผ ๋ฐํํ๋ค.
์ธ์ฆ์ ๋น๊ต๋ ๋๋ฉ์ธ์ ๋์ ์ ์ ๋ฌด์ํ๋ ํธ์คํธ ๋๋ฑ์ฑ ๋น๊ต๊ฐ ํ์ํฉ๋๋ค. ๊ทธ๋ฌ๋ ์ด๋ฌํ ํธ์คํธ๋ DNS ๊ธธ์ด ๋ฑ URL์์ ๊ฐ์ ํ์ง ์๋ ๋ค์ํ ์ธก๋ฉด๋ ๊ฐ์ ๋ฉ๋๋ค. ์ด ๋์ ๋ ๊ฐ๊น๊ฒ ๋ง๋ค ๋ฐฉ๋ฒ์ด๋ ์ข์ ํตํฉ ๋ชจ๋ธ์ ๊ดํ ์๊ฒฌ์ด ์์ผ๋ฉด issue๋ฅผ ๋ฑ๋กํด์ฃผ์ธ์.
4. URL
์์ ์์ค์์, URL, ์ ํจํ URL ๋ฌธ์์ด, URL ํ์, ๊ทธ๋ฆฌ๊ณ URL ์ง๋ ฌํ๊ธฐ๋ ๋ค์๊ณผ ๊ฐ์ด ๊ด๋ จ๋๋ค:
-
URL ํ์๋ ์์์ ์ค์นผ๋ผ ๊ฐ ๋ฌธ์์ด์ ๋ฐ์ failure ๋๋ URL์ ๋ฐํํ๋ค. ๋ํ 0๊ฐ ์ด์์ ๊ฒ์ฆ ์ค๋ฅ๋ฅผ ๊ธฐ๋กํ ์๋ ์๋ค.
-
URL์ ๋ฉ๋ชจ๋ฆฌ ๋ด ํํ์ผ๋ก ๋ณผ ์ ์๋ค.
-
์ ํจํ URL ๋ฌธ์์ด์ URL ํ์์ ์ฃผ์ด์ก์ ๋ ๊ฒ์ฆ ์ค๋ฅ๋ failure๋ฅผ ๋ฐ์์ํค์ง ์๋ ์ ๋ ฅ์ ์ ์ํ๋ค. ์ฆ, ์ ํฉํ๊ฑฐ๋ ์ ํจํ๋ค๊ณ ๊ฐ์ฃผ๋๋ ์ ๋ ฅ์ด๋ค.
-
URL ์ง๋ ฌํ๊ธฐ๋ URL์ ๋ฐ์ ASCII ๋ฌธ์์ด์ ๋ฐํํ๋ค. (๊ทธ ๋ฌธ์์ด์ด ์ดํ ๊ตฌ๋ฌธ ๋ถ์๋๋ฉด, ๊ทธ ๊ฒฐ๊ณผ๋ ๊ฐ๋ค. ์ฆ, URL์ ์ง๋ ฌํ๋ URL๊ณผ ๊ฐ๋ค.) URL ์ง๋ ฌํ๊ธฐ์ ์ถ๋ ฅ์ด ํญ์ ์ ํจํ URL ๋ฌธ์์ด์ธ ๊ฒ์ ์๋๋ค.
| ์ ๋ ฅ | ๊ธฐ์ค | ์ ํจ ์ฌ๋ถ | ์ถ๋ ฅ |
|---|---|---|---|
https:example.org
| โ | https://example.org/
| |
https://////example.com///
| โ | https://example.com///
| |
https://example.com/././foo
| โ | https://example.com/foo
| |
hello:world
| https://example.com/
| โ | hello:world
|
https:example.org
| https://example.com/
| โ | https://example.com/example.org
|
\example\..\demo/.\
| https://example.com/
| โ | https://example.com/demo/
|
example
| https://example.com/demo
| โ | https://example.com/example
|
file:///C|/demo
| โ | file:///C:/demo
| |
..
| file:///C:/demo
| โ | file:///C:/
|
file://localhost/
| โ | file:///
| |
file://loc%61lhost/
| โ | file:///
| |
https://user:password@example.org/
| โ | https://user:password@example.org/
| |
https://example.org/foo bar
| โ | https://example.org/foo%20bar
| |
https://EXAMPLE.com/../x
| โ | https://example.com/x
| |
https://ex ample.org/
| โ | ์คํจ | |
example
| โ, ๊ธฐ์ค์ด ์๊ธฐ ๋๋ฌธ | ์คํจ | |
https://example.com:demo
| โ | ์คํจ | |
http://[www.example.com]/
| โ | ์คํจ | |
https://example.org//
| โ | https://example.org//
| |
https://example.com/[]?[]#[]
| โ | https://example.com/[]?[]#[]
| |
https://example/%?%#%
| โ | https://example/%?%#%
| |
https://example/%25?%25#%25
| โ | https://example/%25?%25#%25
|
๊ฐ๊ฒฐํจ์ ์ํด ๊ธฐ์ค ๋ฐ ์ถ๋ ฅ URL์ ์ง๋ ฌํ๋ ํ์์ผ๋ก ํ์๋๋ค.
4.1. URL ํํ
ํ๋์ URL์ ๊ตฌ์กฐ์ฒด๋ก์ ๋ฒ์ฉ ์๋ณ์๋ฅผ ๋ํ๋ธ๋ค. ๋ค์๊ณผ ๊ตฌ๋ณํ๊ธฐ ์ํด ์ ํจํ URL ๋ฌธ์์ด๊ณผ ๋ฌ๋ฆฌ ์ด๋ฅผ ๋ํ URL ๋ ์ฝ๋๋ผ๊ณ ๋ถ๋ฅผ ์ ์๋ค.
URL์ ๋๋ฑ์ฑ์ URL A์ B๊ฐ ์ฃผ์ด์ก์ ๋, A๊ฐ B์ ๊ฐ์ผ๋ฉด true๋ฅผ ๋ฐํํ๊ณ , ๊ทธ๋ ์ง ์์ผ๋ฉด false๋ฅผ ๋ฐํํ๋ค.
URL์ ์คํด์ ASCII ๋ฌธ์์ด์ด๋ฉฐ, URL์ ์ ํ์ ์๋ณํ๊ณ ์ถ๊ฐ ์ฒ๋ฆฌ๋ฅผ ์ํด URL์ ํ์ฑํ ํ ๋์คํจ์นํ๋ ๋ฐ ์ฌ์ฉํ ์ ์๋ค. ์ด๊ธฐ์๋ ๋น ๋ฌธ์์ด์ด๋ค.
URL์ ์ฌ์ฉ์ ์ด๋ฆ์ ์ฌ์ฉ์ ์ด๋ฆ์ ์๋ณํ๋ ASCII ๋ฌธ์์ด์ด๋ค. ์ด๊ธฐ์๋ ๋น ๋ฌธ์์ด์ด๋ค.
URL์ ๋น๋ฐ๋ฒํธ๋ ๋น๋ฐ๋ฒํธ๋ฅผ ์๋ณํ๋ ASCII ๋ฌธ์์ด์ด๋ค. ์ด๊ธฐ์๋ ๋น ๋ฌธ์์ด์ด๋ค.
URL์ ํธ์คํธ๋ null ๋๋ ํธ์คํธ์ด๋ค. ์ด๊ธฐ์๋ null์ด๋ค.
๋ค์ ํ๋ ํ์ฉ๋๋ URL์ ์คํด / ํธ์คํธ ์กฐํฉ์ ๋์ดํ๋ค.
| ์คํด | ํธ์คํธ | |||||
|---|---|---|---|---|---|---|
| ๋๋ฉ์ธ | IPv4 ์ฃผ์ | IPv6 ์ฃผ์ | ๋ถํฌ๋ช ํธ์คํธ | ๋น ํธ์คํธ | null | |
ํน์
์คํด ์ค "file" ์ ์ธ
| โ | โ | โ | โ | โ | โ |
"file"
| โ | โ | โ | โ | โ | โ |
| ๊ธฐํ | โ | โ | โ | โ | โ | โ |
URL์ ํฌํธ๋ null ๋๋ ๋คํธ์ํฌ ํฌํธ๋ฅผ ์๋ณํ๋ 16๋นํธ ๋ถํธ ์๋ ์ ์์ด๋ค. ์ด๋ ์ด๊ธฐ์๋ null์ด๋ค.
URL์ ๊ฒฝ๋ก๋ URL ๊ฒฝ๋ก์ด๋ฉฐ, ์ผ๋ฐ์ ์ผ๋ก ์์น๋ฅผ ์๋ณํ๋ค. ์ด๊ธฐ์๋ ยซ ยป์ด๋ค.
ํน์ URL์ ๊ฒฝ๋ก๋ ํญ์ ๋ชฉ๋ก์ด๋ค. ์ฆ, ์ ๋๋ก ๋ถํฌ๋ช ํ์ง ์๋ค.
URL์ ์ฟผ๋ฆฌ๋ null ๋๋ ASCII ๋ฌธ์์ด์ด๋ค. ์ด๊ธฐ์๋ null์ด๋ค.
URL์ ํ๋๊ทธ๋จผํธ๋ null ๋๋ ํด๋น ๋ฆฌ์์ค์์ ์ถ๊ฐ ์ฒ๋ฆฌ์ ์ฌ์ฉํ ์ ์๋ ASCII ๋ฌธ์์ด์ด๋ฉฐ, ๊ทธ ๋ฆฌ์์ค๋ URL์ ๋ค๋ฅธ ๊ตฌ์ฑ ์์๊ฐ ์๋ณํ๋ค. ์ด๊ธฐ์๋ null์ด๋ค.
URL์๋ ๋ํ ์ฐ๊ด๋ blob URL ํญ๋ชฉ์ด ์์ผ๋ฉฐ, ์ด๋ null ๋๋ blob URL ํญ๋ชฉ์ด๋ค. ์ด๊ธฐ์๋ null์ด๋ค.
์ด๋ "blob" URL์ด ์ฐธ์กฐํ๋ ๊ฐ์ฒด์
ํจ๊ป
๊ทธ ์ถ์ฒ๋ฅผ ์บ์ํ ์ ์๋๋ก ์ง์ํ๋ ๋ฐ ์ฌ์ฉ๋๋ค. URL์ด
ํ์ฑ๊ณผ ํ์น ์ฌ์ด์ blob URL ์ ์ฅ์์์ ์ ๊ฑฐ๋ ์ ์์ง๋ง, ํ์น๋ ์ฌ์ ํ
์ฑ๊ณตํด์ผ ํ๋ฏ๋ก ์ด๋ค์ ์บ์ํ๋ ๊ฒ์ด ์ค์ํ๋ค.
๋ค์ ํ๋ ์ ํจํ URL ๋ฌธ์์ด์ด ํ์ฑ๋ ๋ URL์ ๊ตฌ์ฑ ์์์ ์ด๋ป๊ฒ ๋์๋๋์ง ๋์ดํ๋ค. ์ฌ์ฉ์ ์ด๋ฆ, ๋น๋ฐ๋ฒํธ, ๊ทธ๋ฆฌ๊ณ blob URL ํญ๋ชฉ์ ์๋ต๋์ด ์์ผ๋ฉฐ, ์๋ ์์์๋ ๊ฐ๊ฐ ๋น ๋ฌธ์์ด, ๋น ๋ฌธ์์ด, null์ด๋ค.
| ์ ๋ ฅ | ์คํด | ํธ์คํธ | ํฌํธ | ๊ฒฝ๋ก | ์ฟผ๋ฆฌ | ํ๋๊ทธ๋จผํธ |
|---|---|---|---|---|---|---|
https://example.com/
| "https"
| "example.com"
| null | ยซ ๋น ๋ฌธ์์ด ยป | null | null |
https://localhost:8000/search?q=text#hello
| "https"
| "localhost"
| 8000 | ยซ "search" ยป
| "q=text"
| "hello"
|
urn:isbn:9780307476463
| "urn"
| null | null | "isbn:9780307476463"
| null | null |
file:///ada/Analytical%20Engine/README.md
| "file"
| ๋น ๋ฌธ์์ด | null | ยซ "ada", "Analytical%20Engine", "README.md" ยป
| null | null |
URL ๊ฒฝ๋ก๋ URL ๊ฒฝ๋ก ์ธ๊ทธ๋จผํธ ๋๋ 0๊ฐ ์ด์์ ๋ชฉ๋ก์ผ๋ก, URL ๊ฒฝ๋ก ์ธ๊ทธ๋จผํธ๋ก ๊ตฌ์ฑ๋๋ค. ํ์์ ๊ฒฝ์ฐ URL ๊ฒฝ๋ก ์ธ๊ทธ๋จผํธ์๋ ์ ๋๋ก U+002F (/)๊ฐ ํฌํจ๋์ง ์๋๋ค.
URL ๊ฒฝ๋ก ์ธ๊ทธ๋จผํธ๋ ASCII ๋ฌธ์์ด์ด๋ค. ์ผ๋ฐ์ ์ผ๋ก ๋๋ ํฐ๋ฆฌ ๋๋ ํ์ผ์ ๊ฐ๋ฆฌํค์ง๋ง, ๋ฏธ๋ฆฌ ์ ์๋ ์๋ฏธ๋ ์๋ค.
URL ๊ฒฝ๋ก๊ฐ
URL ๊ฒฝ๋ก ์ธ๊ทธ๋จผํธ์ธ ๊ฒฝ์ฐ
๋ถํฌ๋ช
ํ๋ฉฐ
๋ค์๊ณผ ๊ฐ์ด U+002F (/)๋ฅผ ํฌํจํ ์ ์๋ค.
web+demo:a/b. URL ํ์๋ U+002F (/)๋ก ์์ํ๋ ๊ฒ์ ์์ฑํ์ง ์์ง๋ง,
URL ํจํด์ ํจํด์ ์ ๊ทํํ๋ ๋์ ์์ฑํ๋ฏ๋ก ์ด๋ ๋ถ๋ณ ์กฐ๊ฑด์ด ์๋๋ค.
[URLPATTERN]
ํ๋์
๋จ์ผ ์ URL ๊ฒฝ๋ก ์ธ๊ทธ๋จผํธ๋
URL ๊ฒฝ๋ก ์ธ๊ทธ๋จผํธ์ด๋ฉฐ
"." ๋๋ ASCII
๋์๋ฌธ์๋ฅผ ๊ตฌ๋ถํ์ง ์๋
๋ฐฉ์์ผ๋ก "%2e"์ ์ผ์นํ๋ค.
ํ๋์
์ด์ค ์ URL ๊ฒฝ๋ก ์ธ๊ทธ๋จผํธ๋
URL ๊ฒฝ๋ก ์ธ๊ทธ๋จผํธ์ด๋ฉฐ
".." ๋๋ ASCII
๋์๋ฌธ์๋ฅผ ๊ตฌ๋ถํ์ง ์๋
๋ฐฉ์์ผ๋ก ".%2e", "%2e." ๋๋ "%2e%2e"์ ์ผ์นํ๋ค.
4.2. URL ๊ธฐํ
ํน์ ์คํด์ ๋ค์ ํ์ ์ฒซ ๋ฒ์งธ ์ด์ ๋์ด๋ ASCII ๋ฌธ์์ด์ด๋ค. ํน์ ์คํด์ ๋ํ ๊ธฐ๋ณธ ํฌํธ๋ ๊ฐ์ ํ์ ๋ ๋ฒ์งธ ์ด์ ๋์ด๋์ด ์๋ค. ๊ทธ ๋ฐ์ ๋ชจ๋ ASCII ๋ฌธ์์ด์ ๋ํ ๊ธฐ๋ณธ ํฌํธ๋ null์ด๋ค.
| ํน์ scheme | ๊ธฐ๋ณธ ํฌํธ |
|---|---|
"ftp"
| 21 |
"file"
| null |
"http"
| 80 |
"https"
| 443 |
"ws"
| 80 |
"wss"
| 443 |
ํ๋์ URL์ ํน์ํ๋ค. ๊ทธ ์คํด์ด ํน์ ์คํด์ธ ๊ฒฝ์ฐ์ด๋ค. ํ๋์ URL์ ํน์ํ์ง ์๋ค. ๊ทธ ์คํด์ด ํน์ ์คํด์ด ์๋ ๊ฒฝ์ฐ์ด๋ค.
ํ๋์ URL์ ์๊ฒฉ ์ฆ๋ช ์ ํฌํจํ๋ค. ๊ทธ ์ฌ์ฉ์ ์ด๋ฆ ๋๋ ๋น๋ฐ๋ฒํธ๊ฐ ๋น ๋ฌธ์์ด์ด ์๋ ๊ฒฝ์ฐ์ด๋ค.
ํ๋์ URL์ ๋ถํฌ๋ช ๊ฒฝ๋ก๋ฅผ ๊ฐ์ง๋ค. ๊ทธ ๊ฒฝ๋ก๊ฐ URL ๊ฒฝ๋ก ์ธ๊ทธ๋จผํธ์ธ ๊ฒฝ์ฐ์ด๋ค.
ํ๋์ URL์ ์ฌ์ฉ์ ์ด๋ฆ/๋น๋ฐ๋ฒํธ/ํฌํธ๋ฅผ
๊ฐ์ง ์ ์๋ค. ๊ทธ
ํธ์คํธ๊ฐ null ๋๋
๋น ๋ฌธ์์ด์ด๊ฑฐ๋, ๊ทธ ์คํด์ด
"file"์ธ ๊ฒฝ์ฐ์ด๋ค.
ํ๋์ URL์ ๊ธฐ์ค URL๋ก ์ง์ ํ ์ ์๋ค.
๊ธฐ์ค URL์ ์ ๋ ฅ์ด URL ํ์์ ์ ์ฉํ๋ค. ์๋ URL ๋ฌธ์์ด์ผ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค.
Windows ๋๋ผ์ด๋ธ ๋ฌธ์๋ ๋ ๊ฐ์ ์ฝ๋ ํฌ์ธํธ๋ก, ์ฒซ ๋ฒ์งธ๋ ASCII ์ํ๋ฒณ์ด๊ณ ๋ ๋ฒ์งธ๋ U+003A(:) ๋๋ U+007C(|)์ ๋๋ค.
์ ๊ทํ๋ Windows ๋๋ผ์ด๋ธ ๋ฌธ์๋ ๋ ๋ฒ์งธ ์ฝ๋ ํฌ์ธํธ๊ฐ U+003A(:)์ธ Windows ๋๋ผ์ด๋ธ ๋ฌธ์์ ๋๋ค.
URL ์์ฑ ์น์ ์ ๋ฐ๋ผ, ์ค์ง ์ ๊ทํ๋ Windows ๋๋ผ์ด๋ธ ๋ฌธ์๋ง ์ ํฉํฉ๋๋ค.
๋ฌธ์์ด์ด Windows ๋๋ผ์ด๋ธ ๋ฌธ์๋ก ์์ํ๋ค๋ ๋ค์ ์กฐ๊ฑด์ ๋ชจ๋ ๋ง์กฑํ ๋์ ๋๋ค:
- ๋ฌธ์์ด์ ๊ธธ์ด๊ฐ 2 ์ด์์ด๋ค
- ์ฒซ ๋ ์ฝ๋ ํฌ์ธํธ๊ฐ Windows ๋๋ผ์ด๋ธ ๋ฌธ์์ด๋ค
- ๋ฌธ์์ด์ ๊ธธ์ด๊ฐ 2์ด๊ฑฐ๋, ์ธ ๋ฒ์งธ ์ฝ๋ ํฌ์ธํธ๊ฐ U+002F(/), U+005C(\), U+003F(?), U+0023(#) ์ค ํ๋์ด๋ค.
url์ ๊ฒฝ๋ก๋ฅผ ๋จ์ถํ๊ธฐ ์ ์ฐจ:
-
๋จ์ธ: url์ ๋ถํฌ๋ช ๊ฒฝ๋ก๋ฅผ ๊ฐ์ง์ง ์๋๋ค.
-
path๋ฅผ url์ ๊ฒฝ๋ก๋ก ๋๋ค.
-
url์ scheme์ด "
file"์ด๊ณ path์ ํฌ๊ธฐ๊ฐ 1์ด๋ฉฐ, path[0]์ด ์ ๊ทํ๋ Windows ๋๋ผ์ด๋ธ ๋ฌธ์์ด๋ฉด ๋ฐํํ๋ค. -
์ ๊ฑฐ path์ ๋ง์ง๋ง ํญ๋ชฉ(์๋ค๋ฉด).
4.3. URL ์์ฑ
์ ํจํ URL ๋ฌธ์์ด์ relative-URL-with-fragment ๋ฌธ์์ด ๋๋ absolute-URL-with-fragment ๋ฌธ์์ด์ด์ด์ผ ํฉ๋๋ค.
absolute-URL-with-fragment ๋ฌธ์์ด์ absolute-URL ๋ฌธ์์ด์ด๋ฉฐ, ์ ํ์ ์ผ๋ก U+0023(#)์ URL-fragment ๋ฌธ์์ด์ด ๋ค๋ฐ๋ฅผ ์ ์์ต๋๋ค.
absolute-URL ๋ฌธ์์ด์ ๋ค์ ์ค ํ๋์ฌ์ผ ํฉ๋๋ค:
-
URL-์คํด ๋ฌธ์์ด๋ก์, ASCII ๋์๋ฌธ์๋ฅผ ๊ตฌ๋ถํ์ง ์๋ ๋ฐฉ์์ผ๋ก ํน์ ์คํด๊ณผ ์ผ์นํ๊ณ , "
file"๊ณผ๋ ASCII ๋์๋ฌธ์๋ฅผ ๊ตฌ๋ถํ์ง ์๋ ๋ฐฉ์์ผ๋ก ์ผ์นํ์ง ์์ผ๋ฉฐ, ๊ทธ ๋ค์ U+003A (:)์ ์คํด-์๋-ํน์-URL ๋ฌธ์์ด์ด ์ด์ด์ง๋ ๊ฒ -
URL-์คํด ๋ฌธ์์ด๋ก์, ASCII ๋์๋ฌธ์๋ฅผ ๊ตฌ๋ถํ์ง ์๋ ๋ฐฉ์์ผ๋ก ํน์ ์คํด๊ณผ ์ผ์นํ์ง ์์ผ๋ฉฐ, ๊ทธ ๋ค์ U+003A (:)์ ๋ค์ ์ค ํ๋๊ฐ ์ด์ด์ง๋ ๊ฒ: ์คํด-์๋-URL ๋ฌธ์์ด, ๊ฒฝ๋ก-์ ๋-๋น-๊ถํ-URL ๋ฌธ์์ด, ๋๋ ๋ถํฌ๋ช -๊ฒฝ๋ก-URL ๋ฌธ์์ด
-
URL-์คํด ๋ฌธ์์ด๋ก์, ASCII ๋์๋ฌธ์๋ฅผ ๊ตฌ๋ถํ์ง ์๋ ๋ฐฉ์์ผ๋ก "
file"๊ณผ ์ผ์นํ๊ณ , ๊ทธ ๋ค์ U+003A (:)์ ์คํด-์๋-file-URL ๋ฌธ์์ด์ด ์ด์ด์ง๋ ๊ฒ
์ด๋ ๊ฒ์ด๋ ์ ํ์ ์ผ๋ก ๊ทธ ๋ค์ U+003F (?)์ URL-์ฟผ๋ฆฌ ๋ฌธ์์ด์ด ์ด์ด์ง ์ ์๋ค.
URL-์คํด ๋ฌธ์์ด์ ํ๋์ ASCII ์ํ๋ฒณ์ด์ด์ผ ํ๋ฉฐ, ๊ทธ ๋ค์ 0๊ฐ ์ด์์ ASCII ์์ซ์, U+002B (+), U+002D (-), ๋ฐ U+002E (.)๊ฐ ์ด์ด์ ธ์ผ ํ๋ค. ์คํด์ IANA URI [sic] Schemes ๋ ์ง์คํธ๋ฆฌ์ ๋ฑ๋ก๋์ด์ผ ํ๋ค. [IANA-URI-SCHEMES] [RFC7595]
ํ๋๊ทธ๋จผํธ ํฌํจ ์๋-URL ๋ฌธ์์ด์ ๊ธฐ์ค URL์ด ๋ถํฌ๋ช ๊ฒฝ๋ก๋ฅผ ๊ฐ์ง๋ ๊ฒฝ์ฐ, U+0023 (#) ๋ค์ URL-ํ๋๊ทธ๋จผํธ ๋ฌธ์์ด์ด ์ด์ด์ง๋ ๊ฒ์ด์ด์ผ ํ๋ค. ๊ทธ๋ ์ง ์์ผ๋ฉด, ์๋-URL ๋ฌธ์์ด์ด์ด์ผ ํ๋ฉฐ, ์ ํ์ ์ผ๋ก ๊ทธ ๋ค์ U+0023 (#)์ URL-ํ๋๊ทธ๋จผํธ ๋ฌธ์์ด์ด ์ด์ด์ง ์ ์๋ค.
์๋-URL ๋ฌธ์์ด์ ๋ค์ ์ค ํ๋์ฌ์ผ ํ๋ค:
-
๋๋ ๊ธฐ์ค URL์ ์คํด์ ๋ฐ๋ผ ๋ถ๊ธฐํ์ฌ:
- "
file"์ด ์๋ ํน์ ์คํด - "
file" - ๊ทธ ์ธ์ ๊ฒฝ์ฐ
- "
์ด๋ ๊ฒ์ด๋ ์ ํ์ ์ผ๋ก ๊ทธ ๋ค์ U+003F (?)์ URL-์ฟผ๋ฆฌ ๋ฌธ์์ด์ด ์ด์ด์ง ์ ์๋ค.
๊ธฐ์ค URL์ด null์ด ์๋์ด์ผ ํ์ฑํ ๋ ํ๋๊ทธ๋จผํธ ํฌํจ ์๋-URL ๋ฌธ์์ด์ ์ฒ๋ฆฌํ ์ ์๋ค.
์คํด-์๋-ํน์-URL
๋ฌธ์์ด์
"//"์ด์ด์ผ ํ๋ฉฐ, ๊ทธ ๋ค์
์ ํจํ ํธ์คํธ ๋ฌธ์์ด์ด
์ด์ด์ง๊ณ , ์ ํ์ ์ผ๋ก ๊ทธ ๋ค์ U+003A (:)์ URL-ํฌํธ ๋ฌธ์์ด์ด ์ด์ด์ง ์ ์์ผ๋ฉฐ, ์ ํ์ ์ผ๋ก
๊ทธ ๋ค์ ๊ฒฝ๋ก-์ ๋-URL ๋ฌธ์์ด์ด ์ด์ด์ง ์ ์๋ค.
URL-ํฌํธ ๋ฌธ์์ด์ ๋ค์ ์ค ํ๋์ฌ์ผ ํ๋ค:
-
๋น ๋ฌธ์์ด
-
10์ง์๋ฅผ ๋ํ๋ด๋ ํ๋ ์ด์์ ASCII ์ซ์๋ก์, ๊ทธ ์๋ 16๋นํธ ๋ถํธ ์๋ ์ ์์ฌ์ผ ํ๋ค.
์คํด-์๋-URL ๋ฌธ์์ด์
"//"์ด์ด์ผ ํ๋ฉฐ, ๊ทธ ๋ค์ ๋ถํฌ๋ช
-ํธ์คํธ-๋ฐ-ํฌํธ ๋ฌธ์์ด์ด ์ด์ด์ง๊ณ , ์ ํ์ ์ผ๋ก ๊ทธ ๋ค์
๊ฒฝ๋ก-์ ๋-URL
๋ฌธ์์ด์ด ์ด์ด์ง ์ ์๋ค.
๋ถํฌ๋ช -ํธ์คํธ-๋ฐ-ํฌํธ ๋ฌธ์์ด์ ๋น ๋ฌธ์์ด์ด๊ฑฐ๋ ๋ค์์ด์ด์ผ ํ๋ค: ์ ํจํ ๋ถํฌ๋ช ํธ์คํธ ๋ฌธ์์ด, ์ ํ์ ์ผ๋ก ๊ทธ ๋ค์ U+003A (:)์ URL-ํฌํธ ๋ฌธ์์ด์ด ์ด์ด์ง ์ ์๋ค.
์คํด-์๋-file-URL ๋ฌธ์์ด์
"//"์ด์ด์ผ ํ๋ฉฐ, ์ ํ์ ์ผ๋ก ๊ทธ ๋ค์ ๋ค์ ์ค ํ๋๊ฐ ์ด์ด์ง ์ ์๋ค:
-
์ ํจํ ํธ์คํธ ๋ฌธ์์ด, ์ ํ์ ์ผ๋ก ๊ทธ ๋ค์ ๊ฒฝ๋ก-์ ๋-URL ๋ฌธ์์ด์ด ์ด์ด์ง ์ ์์
๊ฒฝ๋ก-์ ๋-URL ๋ฌธ์์ด์ U+002F (/)์ด์ด์ผ ํ๋ฉฐ, ๊ทธ ๋ค์ 0๊ฐ ์ด์์ URL-๊ฒฝ๋ก-์ธ๊ทธ๋จผํธ ๋ฌธ์์ด์ด ์ด์ด์ง๊ณ , ๊ฐ ํญ๋ชฉ์ ์๋ก U+002F (/)๋ก ๊ตฌ๋ถ๋์ด์ผ ํ๋ค.
๊ฒฝ๋ก-์ ๋-๋น-๊ถํ-URL ๋ฌธ์์ด์ ๊ฒฝ๋ก-์ ๋-URL ๋ฌธ์์ด์ด์ด์ผ ํ๋ฉฐ, ๋ ๊ฐ์ U+002F (/) ์ฝ๋ ํฌ์ธํธ๋ก ์์ํ์ง ์์์ผ ํ๋ค.
๊ฒฝ๋ก-์๋-URL ๋ฌธ์์ด์ 0๊ฐ ์ด์์ URL-๊ฒฝ๋ก-์ธ๊ทธ๋จผํธ ๋ฌธ์์ด์ด์ด์ผ ํ๋ฉฐ, ๊ฐ ํญ๋ชฉ์ ์๋ก U+002F (/)๋ก ๊ตฌ๋ถ๋๊ณ , U+002F (/)๋ก ์์ํ์ง ์์์ผ ํ๋ค.
A ๊ฒฝ๋ก-์๋-์คํด-์์-URL ๋ฌธ์์ด์ ๊ฒฝ๋ก-์๋-URL ๋ฌธ์์ด์ด์ด์ผ ํ๋ฉฐ, ๋ค์์ผ๋ก ์์ํ์ง ์์์ผ ํ๋ค: URL-์คํด ๋ฌธ์์ด, ๊ทธ ๋ค์ U+003A (:)๊ฐ ์ด์ด์ง๋ ๊ฒ.
๋ถํฌ๋ช -๊ฒฝ๋ก-URL ๋ฌธ์์ด์ U+003F (?)๋ฅผ ์ ์ธํ 0๊ฐ ์ด์์ URL ๋จ์์ด์ด์ผ ํ๋ฉฐ, ๊ทธ ์ฒซ ๋ฒ์งธ ํญ๋ชฉ์ด ์๋ค๋ฉด U+002F (/)๊ฐ ์๋์ด์ผ ํ๋ค.
URL-๊ฒฝ๋ก-์ธ๊ทธ๋จผํธ ๋ฌธ์์ด์ ๋ค์ ์ค ํ๋์ฌ์ผ ํ๋ค:
-
U+002F (/)์ U+003F (?)๋ฅผ ์ ์ธํ 0๊ฐ ์ด์์ URL ๋จ์๋ก์, ์ด๋ค์ด ํจ๊ป ๋จ์ผ ์ URL ๊ฒฝ๋ก ์ธ๊ทธ๋จผํธ ๋๋ ์ด์ค ์ URL ๊ฒฝ๋ก ์ธ๊ทธ๋จผํธ๊ฐ ์๋ ๊ฒ.
URL-์ฟผ๋ฆฌ ๋ฌธ์์ด์ 0๊ฐ ์ด์์ URL ๋จ์์ด์ด์ผ ํ๋ค.
URL-ํ๋๊ทธ๋จผํธ ๋ฌธ์์ด์ 0๊ฐ ์ด์์ URL ๋จ์์ด์ด์ผ ํ๋ค.
URL ์ฝ๋ ํฌ์ธํธ๋ ASCII ์์ซ์, U+0021 (!), U+0024 ($), U+0026 (&), U+0027 ('), U+0028 LEFT PARENTHESIS, U+0029 RIGHT PARENTHESIS, U+002A (*), U+002B (+), U+002C (,), U+002D (-), U+002E (.), U+002F (/), U+003A (:), U+003B (;), U+003D (=), U+003F (?), U+0040 (@), U+005F (_), U+007E (~), ๊ทธ๋ฆฌ๊ณ U+00A0๋ถํฐ U+10FFFD๊น์ง์ ๋ฒ์์ ์๋ ์ฝ๋ ํฌ์ธํธ์ด๋ฉฐ, ์ ๋์ ํฌํจํ๊ณ ์๋ฌ๊ฒ์ดํธ์ ๋น๋ฌธ์๋ ์ ์ธํ๋ค.
U+007F DELETE๋ณด๋ค ํฐ ์ฝ๋ ํฌ์ธํธ๋ URL ํ์์ ์ํด ํผ์ผํธ ์ธ์ฝ๋ฉ๋ ๋ฐ์ดํธ๋ก ๋ณํ๋๋ค.
HTML์์ ๋ฌธ์ ์ธ์ฝ๋ฉ์ด ๋ ๊ฑฐ์ ์ธ์ฝ๋ฉ์ธ ๊ฒฝ์ฐ, URL-query ๋ฌธ์์ด ์์ U+007F DELETE๋ณด๋ค ๋์ ์ฝ๋ ํฌ์ธํธ๋ ๋ฌธ์์ ์ธ์ฝ๋ฉ์ ์ฌ์ฉํ์ฌ ํผ์ผํธ ์ธ์ฝ๋ฉ๋ ๋ฐ์ดํธ๋ก ๋ณํ๋๋ค. ์ด๋ ํ ๋ฌธ์์์๋ ๋์ํ๋ URL์ ๋ค๋ฅธ ๋ฌธ์ ์ธ์ฝ๋ฉ์ ์ฌ์ฉํ๋ ๋ค๋ฅธ ๋ฌธ์์ ๋ณต์ฌํ ๋ ๋ฌธ์ ๋ฅผ ์ผ์ผํฌ ์ ์๋ค. ๋ชจ๋ ๊ณณ์์ UTF-8 ์ธ์ฝ๋ฉ์ ์ฌ์ฉํ๋ฉด ์ด ๋ฌธ์ ๊ฐ ํด๊ฒฐ๋๋ค.
์๋ฅผ ๋ค์ด, ๋ค์ HTML ๋ฌธ์๋ฅผ ์๊ฐํด ๋ณด์.
<!doctype html>
< meta charset = "windows-1252" >
< a href = "?smörgåsbord" > ํ
์คํธ</ a >
๋ฌธ์ ์ธ์ฝ๋ฉ์ด windows-1252์ด๋ฏ๋ก, ๋งํฌ์ URL์ ์ฟผ๋ฆฌ๋
"sm%F6rg%E5sbord"๊ฐ ๋๋ค. ๋ฌธ์ ์ธ์ฝ๋ฉ์ด UTF-8์ด์๋ค๋ฉด, ๋์
"sm%C3%B6rg%C3%A5sbord"๊ฐ ๋๋ค.
URL ๋จ์๋ URL ์ฝ๋ ํฌ์ธํธ์ ํผ์ผํธ ์ธ์ฝ๋ฉ๋ ๋ฐ์ดํธ์ด๋ค.
ํผ์ผํธ ์ธ์ฝ๋ฉ๋ ๋ฐ์ดํธ๋ URL ์ฝ๋ ํฌ์ธํธ๊ฐ ์๋๊ฑฐ๋ ๊ธฐ๋ก ๋์์์ ์ ์ธ๋ ์ฝ๋ ํฌ์ธํธ๋ฅผ ์ธ์ฝ๋ฉํ๋ ๋ฐ ์ฌ์ฉํ ์ ์๋ค.
์ฌ์ฉ์ ์ด๋ฆ ๋๋ ๋น๋ฐ๋ฒํธ๋ฅผ URL ๋ ์ฝ๋์ ์ ํจํ URL ๋ฌธ์์ด ๋ด์์ ํํํ ๋ฐฉ๋ฒ์ ์๋ค.
4.4. URL ํ์ฑ
URL ํ์๋ ํ๋์ ์ค์นผ๋ผ ๊ฐ ๋ฌธ์์ด input์ ์ทจํ๋ฉฐ, ์ ํ์ ์ผ๋ก null ๋๋ ๊ธฐ์ค URL base(๊ธฐ๋ณธ๊ฐ null)์ ์ ํ์ ์ธ ์ธ์ฝ๋ฉ encoding(๊ธฐ๋ณธ๊ฐ UTF-8)์ ์ฌ์ฉํ๊ณ , ๊ทธ๋ฐ ๋ค์ ๋ค์ ๋จ๊ณ๋ฅผ ์คํํ๋ค.
์น ๋ธ๋ผ์ฐ์ ๊ฐ ์๋ ๊ตฌํ์ ๊ธฐ๋ณธ URL ํ์๋ง ๊ตฌํํ๋ฉด ๋๋ค.
์น ๋ธ๋ผ์ฐ์ ์ ์ฃผ์ ํ์์ค์ ์๋ ์ฌ์ฉ์ ์ ๋ ฅ์ด URL ๋ ์ฝ๋๋ก ๋ณํ๋๋ ๋ฐฉ์์ ์ด ํ์ค์ ๋ฒ์๋ฅผ ๋ฒ์ด๋๋ค. ์ด ํ์ค์๋ ์ ๋ขฐ ๊ฒฐ์ ๊ณผ ๊ด๋ จ๋ URL ๋ ๋๋ง ์๊ตฌ ์ฌํญ๋ ํฌํจ๋๋ค.
-
url์ input์ ๋ํด ๊ธฐ๋ณธ URL ํ์๋ฅผ ์คํํ ๊ฒฐ๊ณผ๋ก ์ค์ ํ๋, base์ encoding์ ์ฌ์ฉํ๋ค.
-
url์ด ์คํจ์ด๋ฉด, ์คํจ๋ฅผ ๋ฐํํ๋ค.
-
url์ ์คํด์ด "
blob"์ด ์๋๋ฉด, url์ ๋ฐํํ๋ค. -
url์ blob URL ํญ๋ชฉ์ blob URL์ ํด์ํ ๊ฒฐ๊ณผ๋ก ์ค์ ํ๋, url์ ๋ํด ๊ทธ ๊ณผ์ ์ด ์คํจ๋ฅผ ๋ฐํํ์ง ์์๋ค๋ฉด ๊ทธ ๊ฒฐ๊ณผ๋ก, ๊ทธ๋ ์ง ์์ผ๋ฉด null๋ก ์ค์ ํ๋ค.
-
url์ ๋ฐํํ๋ค.
๊ธฐ๋ณธ URL ํ์๋ ์ค์นผ๋ผ ๊ฐ ๋ฌธ์์ด input์ ์ทจํ๋ฉฐ, ์ ํ์ ์ผ๋ก null ๋๋ ๊ธฐ์ค URL base(๊ธฐ๋ณธ๊ฐ null), ์ ํ์ ์ธ ์ธ์ฝ๋ฉ encoding(๊ธฐ๋ณธ๊ฐ UTF-8), ์ ํ์ ์ธ URL url, ๊ทธ๋ฆฌ๊ณ ์ ํ์ ์ธ ์ํ ์ฌ์ ์ state override๋ฅผ ์ทจํ๊ณ , ๊ทธ๋ฐ ๋ค์ ๋ค์ ๋จ๊ณ๋ฅผ ์คํํ๋ค.
encoding ์ธ์๋ HTML์๋ง ๊ด๋ จ๋ ๋ ๊ฑฐ์ ๊ฐ๋ ์ด๋ค. url๊ณผ state override ์ธ์๋ ๋ค์ํ API์์๋ง ์ฌ์ฉ๋๋ค. [HTML]
url๊ณผ state override ์ธ์๊ฐ ์ ๋ฌ๋์ง ์์ผ๋ฉด, ๊ธฐ๋ณธ URL ํ์๋ ์ URL ๋๋ ์คํจ๋ฅผ ๋ฐํํ๋ค. ์ด๋ค์ด ์ ๋ฌ๋๋ฉด, ์๊ณ ๋ฆฌ์ฆ์ ์ ๋ฌ๋ url์ ์์ ํ๋ฉฐ ์๋ฌด๊ฒ๋ ๋ฐํํ์ง ์๊ณ ์ข ๋ฃํ ์ ์๋ค.
-
url์ด ์ฃผ์ด์ง์ง ์์๋ค๋ฉด:
-
url์ ์ URL๋ก ์ค์ ํ๋ค.
-
input์ ์ ํ ๋๋ ํํ C0 ์ ์ด ๋ฌธ์ ๋๋ ๊ณต๋ฐฑ์ด ํฌํจ๋์ด ์์ผ๋ฉด, invalid-URL-unit ์ ํจ์ฑ ๊ฒ์ฌ ์ค๋ฅ์ด๋ค.
-
input์์ ๋ชจ๋ ์ ํ ๋ฐ ํํ C0 ์ ์ด ๋ฌธ์ ๋๋ ๊ณต๋ฐฑ์ ์ ๊ฑฐํ๋ค.
-
-
input์ด ASCII ํญ ๋๋ ์ค๋ฐ๊ฟ์ ํฌํจํ๋ฉด, invalid-URL-unit ์ ํจ์ฑ ๊ฒ์ฌ ์ค๋ฅ.
-
input์์ ๋ชจ๋ ASCII ํญ ๋๋ ์ค๋ฐ๊ฟ์ ์ ๊ฑฐํ๋ค.
-
state๋ฅผ, state override๊ฐ ์ฃผ์ด์ก๋ค๋ฉด ๊ทธ๊ฒ์ผ๋ก, ๊ทธ๋ ์ง ์์ผ๋ฉด scheme start state๋ก ๋๋ค.
-
encoding์ encoding์์ ์ถ๋ ฅ ์ธ์ฝ๋ฉ์ ์ป์ ๊ฒฐ๊ณผ๋ก ์ค์ ํ๋ค.
-
buffer๋ฅผ ๋น ๋ฌธ์์ด๋ก ๋๋ค.
-
atSignSeen, insideBrackets, ๋ฐ passwordTokenSeen์ false๋ก ๋๋ค.
-
pointer๋ฅผ input์ ๋ํ ํฌ์ธํฐ๋ก ๋๋ค.
-
state์ ๋ฐ๋ผ ๋ถ๊ธฐํ์ฌ ๋ค์ ์ํ ๊ธฐ๊ณ๋ฅผ ๊ณ์ ์คํํ๋ค. ์คํ ํ pointer๊ฐ EOF ์ฝ๋ ํฌ์ธํธ๋ฅผ ๊ฐ๋ฆฌํค๋ฉด, ๋ค์ ๋จ๊ณ๋ก ๊ฐ๋ค. ๊ทธ๋ ์ง ์์ผ๋ฉด pointer๋ฅผ 1 ์ฆ๊ฐ์ํค๊ณ ์ํ ๊ธฐ๊ณ๋ฅผ ๊ณ์ํ๋ค.
- scheme start state
-
-
c๊ฐ ASCII ์ํ๋ฒณ์ด๋ฉด, c๋ฅผ ์๋ฌธ์ํํ์ฌ buffer์ ์ถ๊ฐํ๊ณ , state๋ฅผ scheme state๋ก ์ค์ ํ๋ค.
-
๊ทธ๋ ์ง ์๊ณ , state override๊ฐ ์ฃผ์ด์ง์ง ์์๋ค๋ฉด, state๋ฅผ no scheme state๋ก ์ค์ ํ๊ณ pointer๋ฅผ 1 ๊ฐ์์ํจ๋ค.
-
๊ทธ๋ ์ง ์์ผ๋ฉด, failure๋ฅผ ๋ฐํํ๋ค.
์ด failure ํ์๋
Location๊ฐ์ฒด์protocol์ค์ ์์์๋ง ์ฌ์ฉ๋๋ค.
-
- scheme state
-
-
c๊ฐ ASCII ์์ซ์, U+002B (+), U+002D (-), ๋๋ U+002E (.)์ด๋ฉด, c๋ฅผ ์๋ฌธ์ํํ์ฌ buffer์ ์ถ๊ฐํ๋ค.
-
๊ทธ๋ ์ง ์๊ณ , c๊ฐ U+003A (:)์ด๋ฉด:
-
state override๊ฐ ์ฃผ์ด์ก๋ค๋ฉด:
-
url์ ์คํด์ด ํน์ ์คํด์ด๊ณ buffer๊ฐ ํน์ ์คํด์ด ์๋๋ฉด, returnํ๋ค.
-
url์ ์คํด์ด ํน์ ์คํด์ด ์๋๊ณ buffer๊ฐ ํน์ ์คํด์ด๋ฉด, returnํ๋ค.
-
url์ด ์๊ฒฉ ์ฆ๋ช ์ ํฌํจํ๊ฑฐ๋ null์ด ์๋ ํฌํธ๋ฅผ ๊ฐ์ง๋ฉฐ, buffer๊ฐ "
file"์ด๋ฉด, returnํ๋ค. -
url์ ์คํด์ด "
file"์ด๊ณ ๊ทธ ํธ์คํธ๊ฐ ๋น ํธ์คํธ์ด๋ฉด, returnํ๋ค.
-
-
url์ ์คํด์ buffer๋ก ์ค์ ํ๋ค.
-
state override๊ฐ ์ฃผ์ด์ก๋ค๋ฉด:
-
url์ ํฌํธ๊ฐ url์ ์คํด์ ๊ธฐ๋ณธ ํฌํธ์ด๋ฉด, url์ ํฌํธ๋ฅผ null๋ก ์ค์ ํ๋ค.
-
Returnํ๋ค.
-
-
buffer๋ฅผ ๋น ๋ฌธ์์ด๋ก ์ค์ ํ๋ค.
-
url์ ์คํด์ด "
file"์ด๋ฉด:-
remaining์ด "
//"๋ก ์์ํ์ง ์์ผ๋ฉด, special-scheme-missing-following-solidus ์ ํจ์ฑ ๊ฒ์ฌ ์ค๋ฅ. -
state๋ฅผ file state๋ก ์ค์ ํ๋ค.
-
-
๊ทธ๋ ์ง ์๊ณ , url์ด ํน์์ด๊ณ , base๊ฐ null์ด ์๋๋ฉฐ, base์ ์คํด์ด url์ ์คํด์ด๋ฉด:
-
Assert: base๋ ํน์์ด๋ค(๋ฐ๋ผ์ ๋ถํฌ๋ช ๊ฒฝ๋ก๋ฅผ ๊ฐ์ง์ง ์๋๋ค).
-
state๋ฅผ special relative or authority state๋ก ์ค์ ํ๋ค.
-
-
๊ทธ๋ ์ง ์๊ณ , url์ด ํน์์ด๋ฉด, state๋ฅผ special authority slashes state๋ก ์ค์ ํ๋ค.
-
๊ทธ๋ ์ง ์๊ณ , remaining์ด U+002F (/)๋ก ์์ํ๋ฉด, state๋ฅผ path or authority state๋ก ์ค์ ํ๊ณ pointer๋ฅผ 1 ์ฆ๊ฐ์ํจ๋ค.
-
๊ทธ๋ ์ง ์์ผ๋ฉด, url์ ๊ฒฝ๋ก๋ฅผ ๋น ๋ฌธ์์ด๋ก ์ค์ ํ๊ณ state๋ฅผ opaque path state๋ก ์ค์ ํ๋ค.
-
-
๊ทธ๋ ์ง ์๊ณ , state override๊ฐ ์ฃผ์ด์ง์ง ์์๋ค๋ฉด, buffer๋ฅผ ๋น ๋ฌธ์์ด๋ก ์ค์ ํ๊ณ , state๋ฅผ no scheme state๋ก ์ค์ ํ ๋ค, (input์ ์ฒซ ๋ฒ์งธ ์ฝ๋ ํฌ์ธํธ๋ถํฐ) ๋ค์ ์์ํ๋ค.
-
๊ทธ๋ ์ง ์์ผ๋ฉด, failure๋ฅผ ๋ฐํํ๋ค.
์ด failure ํ์๋
Location๊ฐ์ฒด์protocol์ค์ ์์์๋ง ์ฌ์ฉ๋๋ค. ๋ํ, ์ด ์ํ์์ ์์ ๋ฐ์ํ๋ failure๊ฐ ์๋ ์ข ๋ฃ๋ ํด๋น ์ค์ ์๋ฅผ ์ ์ํ๊ธฐ ์ํ ์๋์ ์ธ ์ฐจ์ด์ด๋ค.
-
- no scheme state
-
-
base๊ฐ null์ด๊ฑฐ๋, base๊ฐ ๋ถํฌ๋ช ๊ฒฝ๋ก๋ฅผ ๊ฐ์ง๊ณ c๊ฐ U+0023 (#)์ด ์๋๋ฉด, missing-scheme-non-relative-URL ์ ํจ์ฑ ๊ฒ์ฌ ์ค๋ฅ, failure๋ฅผ ๋ฐํํ๋ค.
-
๊ทธ๋ ์ง ์๊ณ , base๊ฐ ๋ถํฌ๋ช ๊ฒฝ๋ก๋ฅผ ๊ฐ์ง๋ฉฐ c๊ฐ U+0023 (#)์ด๋ฉด, url์ ์คํด์ base์ ์คํด์ผ๋ก, url์ ๊ฒฝ๋ก๋ฅผ base์ ๊ฒฝ๋ก๋ก, url์ ์ฟผ๋ฆฌ๋ฅผ base์ ์ฟผ๋ฆฌ๋ก, url์ ํ๋๊ทธ๋จผํธ๋ฅผ ๋น ๋ฌธ์์ด๋ก ์ค์ ํ๊ณ , state๋ฅผ fragment state๋ก ์ค์ ํ๋ค.
-
๊ทธ๋ ์ง ์๊ณ , base์ ์คํด์ด "
file"์ด ์๋๋ฉด, state๋ฅผ relative state๋ก ์ค์ ํ๊ณ pointer๋ฅผ 1 ๊ฐ์์ํจ๋ค. -
๊ทธ๋ ์ง ์์ผ๋ฉด, state๋ฅผ file state๋ก ์ค์ ํ๊ณ pointer๋ฅผ 1 ๊ฐ์์ํจ๋ค.
-
- special relative or authority state
-
-
c๊ฐ U+002F (/)์ด๊ณ remaining์ด U+002F (/)๋ก ์์ํ๋ฉด, state๋ฅผ special authority ignore slashes state๋ก ์ค์ ํ๊ณ pointer๋ฅผ 1 ์ฆ๊ฐ์ํจ๋ค.
-
๊ทธ๋ ์ง ์์ผ๋ฉด, special-scheme-missing-following-solidus ์ ํจ์ฑ ๊ฒ์ฌ ์ค๋ฅ, state๋ฅผ relative state๋ก ์ค์ ํ๊ณ pointer๋ฅผ 1 ๊ฐ์์ํจ๋ค.
-
- path or authority state
-
-
c๊ฐ U+002F (/)์ด๋ฉด, state๋ฅผ authority state๋ก ์ค์ ํ๋ค.
-
๊ทธ๋ ์ง ์์ผ๋ฉด, state๋ฅผ path state๋ก ์ค์ ํ๊ณ , pointer๋ฅผ 1 ๊ฐ์์ํจ๋ค.
-
- relative state
-
-
Assert: base์ ์คํด์ "
file"์ด ์๋๋ค. -
c๊ฐ U+002F (/)์ด๋ฉด, state๋ฅผ relative slash state๋ก ์ค์ ํ๋ค.
-
๊ทธ๋ ์ง ์๊ณ , url์ด ํน์์ด๊ณ c๊ฐ U+005C (\)์ด๋ฉด, invalid-reverse-solidus ์ ํจ์ฑ ๊ฒ์ฌ ์ค๋ฅ, state๋ฅผ relative slash state๋ก ์ค์ ํ๋ค.
-
๊ทธ๋ ์ง ์์ผ๋ฉด:
-
url์ ์ฌ์ฉ์ ์ด๋ฆ์ base์ ์ฌ์ฉ์ ์ด๋ฆ์ผ๋ก, url์ ๋น๋ฐ๋ฒํธ๋ฅผ base์ ๋น๋ฐ๋ฒํธ๋ก, url์ ํธ์คํธ๋ฅผ base์ ํธ์คํธ๋ก, url์ ํฌํธ๋ฅผ base์ ํฌํธ๋ก, url์ ๊ฒฝ๋ก๋ฅผ base์ ๊ฒฝ๋ก์ ๋ณต์ ๋ณธ์ผ๋ก, ๊ทธ๋ฆฌ๊ณ url์ ์ฟผ๋ฆฌ๋ฅผ base์ ์ฟผ๋ฆฌ๋ก ์ค์ ํ๋ค.
-
c๊ฐ U+003F (?)์ด๋ฉด, url์ ์ฟผ๋ฆฌ๋ฅผ ๋น ๋ฌธ์์ด๋ก ์ค์ ํ๊ณ , state๋ฅผ query state๋ก ์ค์ ํ๋ค.
-
๊ทธ๋ ์ง ์๊ณ , c๊ฐ U+0023 (#)์ด๋ฉด, url์ ํ๋๊ทธ๋จผํธ๋ฅผ ๋น ๋ฌธ์์ด๋ก ์ค์ ํ๊ณ state๋ฅผ fragment state๋ก ์ค์ ํ๋ค.
-
๊ทธ๋ ์ง ์๊ณ , c๊ฐ EOF ์ฝ๋ ํฌ์ธํธ๊ฐ ์๋๋ฉด:
-
url์ ์ฟผ๋ฆฌ๋ฅผ null๋ก ์ค์ ํ๋ค.
-
state๋ฅผ path state๋ก ์ค์ ํ๊ณ pointer๋ฅผ 1 ๊ฐ์์ํจ๋ค.
-
-
-
- relative slash state
-
-
url์ด ํน์์ด๊ณ c๊ฐ U+002F (/) ๋๋ U+005C (\)์ด๋ฉด:
-
c๊ฐ U+005C (\)์ด๋ฉด, invalid-reverse-solidus ์ ํจ์ฑ ๊ฒ์ฌ ์ค๋ฅ.
-
state๋ฅผ special authority ignore slashes state๋ก ์ค์ ํ๋ค.
-
-
๊ทธ๋ ์ง ์๊ณ , c๊ฐ U+002F (/)์ด๋ฉด, state๋ฅผ authority state๋ก ์ค์ ํ๋ค.
-
๊ทธ๋ ์ง ์์ผ๋ฉด, url์ ์ฌ์ฉ์ ์ด๋ฆ์ base์ ์ฌ์ฉ์ ์ด๋ฆ์ผ๋ก, url์ ๋น๋ฐ๋ฒํธ๋ฅผ base์ ๋น๋ฐ๋ฒํธ๋ก, url์ ํธ์คํธ๋ฅผ base์ ํธ์คํธ๋ก, url์ ํฌํธ๋ฅผ base์ ํฌํธ๋ก, state๋ฅผ path state๋ก ์ค์ ํ ๋ค์, pointer๋ฅผ 1 ๊ฐ์์ํจ๋ค.
-
- special authority slashes state
-
-
c๊ฐ U+002F (/)์ด๊ณ remaining์ด U+002F (/)๋ก ์์ํ๋ฉด, state๋ฅผ special authority ignore slashes state๋ก ์ค์ ํ๊ณ pointer๋ฅผ 1 ์ฆ๊ฐ์ํจ๋ค.
-
๊ทธ๋ ์ง ์์ผ๋ฉด, special-scheme-missing-following-solidus ์ ํจ์ฑ ๊ฒ์ฌ ์ค๋ฅ, state๋ฅผ special authority ignore slashes state๋ก ์ค์ ํ๊ณ pointer๋ฅผ 1 ๊ฐ์์ํจ๋ค.
-
- ํน์ ๊ถํ ์ฌ๋์ ๋ฌด์ ์ํ
-
-
c๊ฐ U+002F (/) ๋๋ U+005C (\)๊ฐ ์๋๋ฉด, state๋ฅผ ๊ถํ ์ํ๋ก ์ค์ ํ๊ณ pointer๋ฅผ 1๋งํผ ๊ฐ์์ํจ๋ค.
-
๊ทธ๋ ์ง ์์ผ๋ฉด, special-scheme-missing-following-solidus ๊ฒ์ฆ ์ค๋ฅ.
-
- ๊ถํ ์ํ
-
-
c๊ฐ U+0040 (@)์ด๋ฉด:
-
atSignSeen์ด true์ด๋ฉด, "
%40"์ buffer ์์ ์ถ๊ฐํ๋ค. -
atSignSeen์ true๋ก ์ค์ ํ๋ค.
-
buffer์ ๊ฐ codePoint์ ๋ํด:
-
codePoint๊ฐ U+003A (:)์ด๊ณ passwordTokenSeen์ด false์ด๋ฉด, passwordTokenSeen์ true๋ก ์ค์ ํ๊ณ continueํ๋ค.
-
encodedCodePoints๋ฅผ UTF-8 ํผ์ผํธ ์ธ์ฝ๋ฉ์ codePoint์ userinfo ํผ์ผํธ ์ธ์ฝ๋ฉ ์งํฉ์ ์ฌ์ฉํ์ฌ ์คํํ ๊ฒฐ๊ณผ๋ก ๋๋ค.
-
passwordTokenSeen์ด true์ด๋ฉด, encodedCodePoints๋ฅผ url์ ๋น๋ฐ๋ฒํธ์ ์ถ๊ฐํ๋ค.
-
๊ทธ๋ ์ง ์์ผ๋ฉด, encodedCodePoints๋ฅผ url์ ์ฌ์ฉ์ ์ด๋ฆ์ ์ถ๊ฐํ๋ค.
-
-
buffer๋ฅผ ๋น ๋ฌธ์์ด๋ก ์ค์ ํ๋ค.
-
๊ทธ๋ ์ง ์๊ณ , ๋ค์ ์ค ํ๋๊ฐ true์ด๋ฉด:
-
c๊ฐ EOF ์ฝ๋ ํฌ์ธํธ, U+002F (/), U+003F (?), ๋๋ U+0023 (#)์ด๋ค
-
url์ด ํน์ํ๊ณ c๊ฐ U+005C (\)์ด๋ค
๊ทธ๋ฌ๋ฉด:
-
atSignSeen์ด true์ด๊ณ buffer๊ฐ ๋น ๋ฌธ์์ด์ด๋ฉด, host-missing ๊ฒ์ฆ ์ค๋ฅ, failure๋ฅผ ๋ฐํํ๋ค.
-
pointer๋ฅผ buffer์ ์ฝ๋ ํฌ์ธํธ ๊ธธ์ด + 1๋งํผ ๊ฐ์์ํค๊ณ , buffer๋ฅผ ๋น ๋ฌธ์์ด๋ก ์ค์ ํ ๋ค state๋ฅผ ํธ์คํธ ์ํ๋ก ์ค์ ํ๋ค.
-
-
๊ทธ๋ ์ง ์์ผ๋ฉด, c๋ฅผ buffer์ ์ถ๊ฐํ๋ค.
-
- ํธ์คํธ ์ํ
- ํธ์คํธ๋ช ์ํ
-
-
state override๊ฐ ์ฃผ์ด์ง๊ณ url์ ์คํด์ด "
file"์ด๋ฉด, pointer๋ฅผ 1๋งํผ ๊ฐ์์ํค๊ณ state๋ฅผ ํ์ผ ํธ์คํธ ์ํ๋ก ์ค์ ํ๋ค. -
๊ทธ๋ ์ง ์๊ณ , c๊ฐ U+003A (:)์ด๊ณ insideBrackets๊ฐ false์ด๋ฉด:
-
buffer๊ฐ ๋น ๋ฌธ์์ด์ด๋ฉด, host-missing ๊ฒ์ฆ ์ค๋ฅ, failure๋ฅผ ๋ฐํํ๋ค.
-
state override๊ฐ ์ฃผ์ด์ง๊ณ state override๊ฐ ํธ์คํธ๋ช ์ํ์ด๋ฉด, failure๋ฅผ ๋ฐํํ๋ค.
-
host๋ฅผ buffer์ ๋ํด url์ด ํน์ํ์ง ์์๊ณผ ํจ๊ป ํธ์คํธ ๊ตฌ๋ฌธ ๋ถ์์ ์คํํ ๊ฒฐ๊ณผ๋ก ๋๋ค.
-
host๊ฐ failure์ด๋ฉด, failure๋ฅผ ๋ฐํํ๋ค.
-
url์ ํธ์คํธ๋ฅผ host๋ก, buffer๋ฅผ ๋น ๋ฌธ์์ด๋ก, state๋ฅผ ํฌํธ ์ํ๋ก ์ค์ ํ๋ค.
-
-
๊ทธ๋ ์ง ์๊ณ , ๋ค์ ์ค ํ๋๊ฐ true์ด๋ฉด:
-
c๊ฐ EOF ์ฝ๋ ํฌ์ธํธ, U+002F (/), U+003F (?), ๋๋ U+0023 (#)์ด๋ค
-
url์ด ํน์ํ๊ณ c๊ฐ U+005C (\)์ด๋ค
๊ทธ๋ฌ๋ฉด pointer๋ฅผ 1๋งํผ ๊ฐ์์ํจ ๋ค์:
-
url์ด ํน์ํ๊ณ buffer๊ฐ ๋น ๋ฌธ์์ด์ด๋ฉด, host-missing ๊ฒ์ฆ ์ค๋ฅ, failure๋ฅผ ๋ฐํํ๋ค.
-
๊ทธ๋ ์ง ์๊ณ , state override๊ฐ ์ฃผ์ด์ง๊ณ buffer๊ฐ ๋น ๋ฌธ์์ด์ด๋ฉฐ, url์ด ์๊ฒฉ ์ฆ๋ช ์ ํฌํจํ๊ฑฐ๋ url์ ํฌํธ๊ฐ null์ด ์๋๋ฉด, failure๋ฅผ ๋ฐํํ๋ค.
-
host๋ฅผ buffer์ ๋ํด url์ด ํน์ํ์ง ์์๊ณผ ํจ๊ป ํธ์คํธ ๊ตฌ๋ฌธ ๋ถ์์ ์คํํ ๊ฒฐ๊ณผ๋ก ๋๋ค.
-
host๊ฐ failure์ด๋ฉด, failure๋ฅผ ๋ฐํํ๋ค.
-
url์ ํธ์คํธ๋ฅผ host๋ก, buffer๋ฅผ ๋น ๋ฌธ์์ด๋ก, state๋ฅผ ๊ฒฝ๋ก ์์ ์ํ๋ก ์ค์ ํ๋ค.
-
state override๊ฐ ์ฃผ์ด์ก์ผ๋ฉด, ๋ฐํํ๋ค.
-
-
๊ทธ๋ ์ง ์์ผ๋ฉด:
-
- ํฌํธ ์ํ
-
-
c๊ฐ ASCII ์ซ์์ด๋ฉด, c๋ฅผ buffer์ ์ถ๊ฐํ๋ค.
-
๊ทธ๋ ์ง ์๊ณ , ๋ค์ ์ค ํ๋๊ฐ true์ด๋ฉด:
-
c๊ฐ EOF ์ฝ๋ ํฌ์ธํธ, U+002F (/), U+003F (?), ๋๋ U+0023 (#)์ด๋ค;
-
url์ด ํน์ํ๊ณ c๊ฐ U+005C (\)์ด๋ค; ๋๋
-
state override๊ฐ ์ฃผ์ด์ง๋ค,
๊ทธ๋ฌ๋ฉด:
-
buffer๊ฐ ๋น ๋ฌธ์์ด์ด ์๋๋ฉด:
-
port๋ฅผ buffer๊ฐ radix-10์์ ๊ฐ 0๋ถํฐ 9๊น์ง์ ์ซ์์ ASCII ์ซ์๋ฅผ ์ฌ์ฉํ์ฌ ๋ํ๋ด๋ ์ํ์ ์ ์ ๊ฐ์ผ๋ก ๋๋ค.
-
port๊ฐ 16๋นํธ ๋ถํธ ์๋ ์ ์๊ฐ ์๋๋ฉด, port-out-of-range ๊ฒ์ฆ ์ค๋ฅ, failure๋ฅผ ๋ฐํํ๋ค.
-
port๊ฐ url์ ์คํด์ ๊ธฐ๋ณธ ํฌํธ์ด๋ฉด url์ ํฌํธ๋ฅผ null๋ก ์ค์ ํ๊ณ , ๊ทธ๋ ์ง ์์ผ๋ฉด port๋ก ์ค์ ํ๋ค.
-
buffer๋ฅผ ๋น ๋ฌธ์์ด๋ก ์ค์ ํ๋ค.
-
state override๊ฐ ์ฃผ์ด์ก์ผ๋ฉด, ๋ฐํํ๋ค.
-
-
state override๊ฐ ์ฃผ์ด์ก์ผ๋ฉด, failure๋ฅผ ๋ฐํํ๋ค.
-
state๋ฅผ ๊ฒฝ๋ก ์์ ์ํ๋ก ์ค์ ํ๊ณ pointer๋ฅผ 1๋งํผ ๊ฐ์์ํจ๋ค.
-
-
๊ทธ๋ ์ง ์์ผ๋ฉด, port-invalid ๊ฒ์ฆ ์ค๋ฅ, failure๋ฅผ ๋ฐํํ๋ค.
-
- ํ์ผ ์ํ
-
-
url์ ์คํด์ "
file"๋ก ์ค์ ํ๋ค. -
url์ ํธ์คํธ๋ฅผ ๋น ๋ฌธ์์ด๋ก ์ค์ ํ๋ค.
-
c๊ฐ U+002F (/) ๋๋ U+005C (\)์ด๋ฉด:
-
c๊ฐ U+005C (\)์ด๋ฉด, invalid-reverse-solidus ๊ฒ์ฆ ์ค๋ฅ.
-
state๋ฅผ ํ์ผ ์ฌ๋์ ์ํ๋ก ์ค์ ํ๋ค.
-
-
๊ทธ๋ ์ง ์๊ณ , base๊ฐ null์ด ์๋๋ฉฐ base์ ์คํด์ด "
file"์ด๋ฉด:-
url์ ํธ์คํธ๋ฅผ base์ ํธ์คํธ๋ก, url์ ๊ฒฝ๋ก๋ฅผ base์ ๊ฒฝ๋ก์ ๋ณต์ ๋ณธ์ผ๋ก, ๊ทธ๋ฆฌ๊ณ url์ ์ฟผ๋ฆฌ๋ฅผ base์ ์ฟผ๋ฆฌ๋ก ์ค์ ํ๋ค.
-
c๊ฐ U+003F (?)์ด๋ฉด, url์ ์ฟผ๋ฆฌ๋ฅผ ๋น ๋ฌธ์์ด๋ก ์ค์ ํ๊ณ state๋ฅผ ์ฟผ๋ฆฌ ์ํ๋ก ์ค์ ํ๋ค.
-
๊ทธ๋ ์ง ์๊ณ , c๊ฐ U+0023 (#)์ด๋ฉด, url์ ํ๋๊ทธ๋จผํธ๋ฅผ ๋น ๋ฌธ์์ด๋ก ์ค์ ํ๊ณ state๋ฅผ ํ๋๊ทธ๋จผํธ ์ํ๋ก ์ค์ ํ๋ค.
-
๊ทธ๋ ์ง ์๊ณ , c๊ฐ EOF ์ฝ๋ ํฌ์ธํธ๊ฐ ์๋๋ฉด:
-
url์ ์ฟผ๋ฆฌ๋ฅผ null๋ก ์ค์ ํ๋ค.
-
pointer๋ถํฐ input์ ๋๊น์ง์ ์ฝ๋ ํฌ์ธํธ ๋ถ๋ถ ๋ฌธ์์ด์ด Windows ๋๋ผ์ด๋ธ ๋ฌธ์๋ก ์์ํ์ง ์์ผ๋ฉด, url์ ๊ฒฝ๋ก๋ฅผ ๋จ์ถํ๋ค.
-
๊ทธ๋ ์ง ์์ผ๋ฉด:
-
url์ ๊ฒฝ๋ก๋ฅผ ยซ ยป๋ก ์ค์ ํ๋ค.
์ด๋ (ํ๋ซํผ ๋ ๋ฆฝ์ ์ธ) Windows ๋๋ผ์ด๋ธ ๋ฌธ์ ํน์ด ๋์์ด๋ค.
-
state๋ฅผ ๊ฒฝ๋ก ์ํ๋ก ์ค์ ํ๊ณ pointer๋ฅผ 1๋งํผ ๊ฐ์์ํจ๋ค.
-
-
-
๊ทธ๋ ์ง ์์ผ๋ฉด, state๋ฅผ ๊ฒฝ๋ก ์ํ๋ก ์ค์ ํ๊ณ , pointer๋ฅผ 1๋งํผ ๊ฐ์์ํจ๋ค.
-
- ํ์ผ ์ฌ๋์ ์ํ
-
-
c๊ฐ U+002F (/) ๋๋ U+005C (\)์ด๋ฉด:
-
c๊ฐ U+005C (\)์ด๋ฉด, invalid-reverse-solidus ๊ฒ์ฆ ์ค๋ฅ.
-
state๋ฅผ ํ์ผ ํธ์คํธ ์ํ๋ก ์ค์ ํ๋ค.
-
-
๊ทธ๋ ์ง ์์ผ๋ฉด:
-
base๊ฐ null์ด ์๋๊ณ base์ ์คํด์ด "
file"์ด๋ฉด:-
pointer๋ถํฐ input์ ๋๊น์ง์ ์ฝ๋ ํฌ์ธํธ ๋ถ๋ถ ๋ฌธ์์ด์ด Windows ๋๋ผ์ด๋ธ ๋ฌธ์๋ก ์์ํ์ง ์๊ณ base์ ๊ฒฝ๋ก[0]์ด ์ ๊ทํ๋ Windows ๋๋ผ์ด๋ธ ๋ฌธ์์ด๋ฉด, base์ ๊ฒฝ๋ก[0]์ url์ ๊ฒฝ๋ก์ ์ถ๊ฐํ๋ค.
์ด๋ (ํ๋ซํผ ๋ ๋ฆฝ์ ์ธ) Windows ๋๋ผ์ด๋ธ ๋ฌธ์ ํน์ด ๋์์ด๋ค.
-
state๋ฅผ ๊ฒฝ๋ก ์ํ๋ก ์ค์ ํ๊ณ , pointer๋ฅผ 1๋งํผ ๊ฐ์์ํจ๋ค.
-
-
- ํ์ผ ํธ์คํธ ์ํ
-
-
c๊ฐ EOF ์ฝ๋ ํฌ์ธํธ, U+002F (/), U+005C (\), U+003F (?), ๋๋ U+0023 (#)์ด๋ฉด, pointer๋ฅผ 1๋งํผ ๊ฐ์์ํจ ๋ค์:
-
state override๊ฐ ์ฃผ์ด์ง์ง ์์๊ณ buffer๊ฐ Windows ๋๋ผ์ด๋ธ ๋ฌธ์์ด๋ฉด, file-invalid-Windows-drive-letter-host ๊ฒ์ฆ ์ค๋ฅ, state๋ฅผ ๊ฒฝ๋ก ์ํ๋ก ์ค์ ํ๋ค.
์ด๋ (ํ๋ซํผ ๋ ๋ฆฝ์ ์ธ) Windows ๋๋ผ์ด๋ธ ๋ฌธ์ ํน์ด ๋์์ด๋ค. buffer๋ ์ฌ๊ธฐ์ ์ฌ์ค์ ๋์ง ์๊ณ ๋์ ๊ฒฝ๋ก ์ํ์์ ์ฌ์ฉ๋๋ค.
-
๊ทธ๋ ์ง ์๊ณ , buffer๊ฐ ๋น ๋ฌธ์์ด์ด๋ฉด:
-
url์ ํธ์คํธ๋ฅผ ๋น ๋ฌธ์์ด๋ก ์ค์ ํ๋ค.
-
state override๊ฐ ์ฃผ์ด์ก์ผ๋ฉด, ๋ฐํํ๋ค.
-
state๋ฅผ ๊ฒฝ๋ก ์์ ์ํ๋ก ์ค์ ํ๋ค.
-
-
๊ทธ๋ ์ง ์์ผ๋ฉด, ๋ค์ ๋จ๊ณ๋ฅผ ์คํํ๋ค:
-
host๋ฅผ buffer์ ๋ํด url์ด ํน์ํ์ง ์์๊ณผ ํจ๊ป ํธ์คํธ ๊ตฌ๋ฌธ ๋ถ์์ ์คํํ ๊ฒฐ๊ณผ๋ก ๋๋ค.
-
host๊ฐ failure์ด๋ฉด, failure๋ฅผ ๋ฐํํ๋ค.
-
host๊ฐ "
localhost"์ด๋ฉด, host๋ฅผ ๋น ๋ฌธ์์ด๋ก ์ค์ ํ๋ค. -
url์ ํธ์คํธ๋ฅผ host๋ก ์ค์ ํ๋ค.
-
state override๊ฐ ์ฃผ์ด์ก์ผ๋ฉด, ๋ฐํํ๋ค.
-
buffer๋ฅผ ๋น ๋ฌธ์์ด๋ก ์ค์ ํ๊ณ state๋ฅผ ๊ฒฝ๋ก ์์ ์ํ๋ก ์ค์ ํ๋ค.
-
-
-
๊ทธ๋ ์ง ์์ผ๋ฉด, c๋ฅผ buffer์ ์ถ๊ฐํ๋ค.
-
- ๊ฒฝ๋ก ์์ ์ํ
-
-
url์ด ํน์ํ๋ฉด:
-
c๊ฐ U+005C (\)์ด๋ฉด, invalid-reverse-solidus ๊ฒ์ฆ ์ค๋ฅ.
-
state๋ฅผ ๊ฒฝ๋ก ์ํ๋ก ์ค์ ํ๋ค.
-
c๊ฐ U+002F (/) ๋๋ U+005C (\)๊ฐ ์๋๋ฉด, pointer๋ฅผ 1๋งํผ ๊ฐ์์ํจ๋ค.
-
-
๊ทธ๋ ์ง ์๊ณ , state override๊ฐ ์ฃผ์ด์ง์ง ์์์ผ๋ฉฐ c๊ฐ U+003F (?)์ด๋ฉด, url์ ์ฟผ๋ฆฌ๋ฅผ ๋น ๋ฌธ์์ด๋ก ์ค์ ํ๊ณ state๋ฅผ ์ฟผ๋ฆฌ ์ํ๋ก ์ค์ ํ๋ค.
-
๊ทธ๋ ์ง ์๊ณ , state override๊ฐ ์ฃผ์ด์ง์ง ์์์ผ๋ฉฐ c๊ฐ U+0023 (#)์ด๋ฉด, url์ ํ๋๊ทธ๋จผํธ๋ฅผ ๋น ๋ฌธ์์ด๋ก ์ค์ ํ๊ณ state๋ฅผ ํ๋๊ทธ๋จผํธ ์ํ๋ก ์ค์ ํ๋ค.
-
๊ทธ๋ ์ง ์๊ณ , c๊ฐ EOF ์ฝ๋ ํฌ์ธํธ๊ฐ ์๋๋ฉด:
-
state๋ฅผ ๊ฒฝ๋ก ์ํ๋ก ์ค์ ํ๋ค.
-
c๊ฐ U+002F (/)๊ฐ ์๋๋ฉด, pointer๋ฅผ 1๋งํผ ๊ฐ์์ํจ๋ค.
-
-
๊ทธ๋ ์ง ์๊ณ , state override๊ฐ ์ฃผ์ด์ก์ผ๋ฉฐ url์ ํธ์คํธ๊ฐ null์ด๋ฉด, ๋น ๋ฌธ์์ด์ url์ ๊ฒฝ๋ก์ ์ถ๊ฐํ๋ค.
-
- ๊ฒฝ๋ก ์ํ
-
-
๋ค์ ์ค ํ๋๊ฐ true์ด๋ฉด:
-
c๊ฐ EOF ์ฝ๋ ํฌ์ธํธ ๋๋ U+002F (/)์ด๋ค
-
url์ด ํน์ํ๊ณ c๊ฐ U+005C (\)์ด๋ค
-
state override๊ฐ ์ฃผ์ด์ง์ง ์์๊ณ c๊ฐ U+003F (?) ๋๋ U+0023 (#)์ด๋ค
๊ทธ๋ฌ๋ฉด:
-
url์ด ํน์ํ๊ณ c๊ฐ U+005C (\)์ด๋ฉด, invalid-reverse-solidus ๊ฒ์ฆ ์ค๋ฅ.
-
buffer๊ฐ ์ด์ค ์ URL ๊ฒฝ๋ก ์ธ๊ทธ๋จผํธ์ด๋ฉด:
-
๊ทธ๋ ์ง ์๊ณ , buffer๊ฐ ๋จ์ผ ์ URL ๊ฒฝ๋ก ์ธ๊ทธ๋จผํธ์ด๋ฉฐ c๊ฐ U+002F (/)์ธ ๊ฒ๋ ์๋๊ณ , url์ด ํน์ํ๊ณ c๊ฐ U+005C (\)์ธ ๊ฒ๋ ์๋๋ฉด, ๋น ๋ฌธ์์ด์ url์ ๊ฒฝ๋ก์ ์ถ๊ฐํ๋ค.
-
๊ทธ๋ ์ง ์๊ณ , buffer๊ฐ ๋จ์ผ ์ URL ๊ฒฝ๋ก ์ธ๊ทธ๋จผํธ๊ฐ ์๋๋ฉด:
-
url์ ์คํด์ด "
file"์ด๊ณ , url์ ๊ฒฝ๋ก๊ฐ ๋น์ด ์์ผ๋ฉฐ, buffer๊ฐ Windows ๋๋ผ์ด๋ธ ๋ฌธ์์ด๋ฉด, buffer์ ๋ ๋ฒ์งธ ์ฝ๋ ํฌ์ธํธ๋ฅผ U+003A (:)๋ก ๊ต์ฒดํ๋ค.์ด๋ (ํ๋ซํผ ๋ ๋ฆฝ์ ์ธ) Windows ๋๋ผ์ด๋ธ ๋ฌธ์ ํน์ด ๋์์ด๋ค.
-
-
buffer๋ฅผ ๋น ๋ฌธ์์ด๋ก ์ค์ ํ๋ค.
-
c๊ฐ U+003F (?)์ด๋ฉด, url์ ์ฟผ๋ฆฌ๋ฅผ ๋น ๋ฌธ์์ด๋ก ์ค์ ํ๊ณ state๋ฅผ ์ฟผ๋ฆฌ ์ํ๋ก ์ค์ ํ๋ค.
-
c๊ฐ U+0023 (#)์ด๋ฉด, url์ ํ๋๊ทธ๋จผํธ๋ฅผ ๋น ๋ฌธ์์ด๋ก ์ค์ ํ๊ณ state๋ฅผ ํ๋๊ทธ๋จผํธ ์ํ๋ก ์ค์ ํ๋ค.
-
-
๊ทธ๋ ์ง ์์ผ๋ฉด, ๋ค์ ๋จ๊ณ๋ฅผ ์คํํ๋ค:
-
c๊ฐ URL ์ฝ๋ ํฌ์ธํธ๊ฐ ์๋๊ณ U+0025 (%)๋ ์๋๋ฉด, invalid-URL-unit ๊ฒ์ฆ ์ค๋ฅ.
-
c๊ฐ U+0025 (%)์ด๊ณ remaining์ด ๋ ๊ฐ์ ASCII 16์ง ์ซ์๋ก ์์ํ์ง ์์ผ๋ฉด, invalid-URL-unit ๊ฒ์ฆ ์ค๋ฅ.
-
c๋ฅผ ๊ฒฝ๋ก ํผ์ผํธ ์ธ์ฝ๋ฉ ์งํฉ์ ์ฌ์ฉํ์ฌ UTF-8 ํผ์ผํธ ์ธ์ฝ๋ฉํ๊ณ , ๊ทธ ๊ฒฐ๊ณผ๋ฅผ buffer์ ์ถ๊ฐํ๋ค.
-
-
- ๋ถํฌ๋ช ๊ฒฝ๋ก ์ํ
-
-
c๊ฐ U+003F (?)์ด๋ฉด, url์ ์ฟผ๋ฆฌ๋ฅผ ๋น ๋ฌธ์์ด๋ก ์ค์ ํ๊ณ state๋ฅผ ์ฟผ๋ฆฌ ์ํ๋ก ์ค์ ํ๋ค.
-
๊ทธ๋ ์ง ์๊ณ , c๊ฐ U+0023 (#)์ด๋ฉด, url์ ํ๋๊ทธ๋จผํธ๋ฅผ ๋น ๋ฌธ์์ด๋ก ์ค์ ํ๊ณ state๋ฅผ ํ๋๊ทธ๋จผํธ ์ํ๋ก ์ค์ ํ๋ค.
-
๊ทธ๋ ์ง ์๊ณ , c๊ฐ U+0020 SPACE์ด๋ฉด:
-
๊ทธ๋ ์ง ์๊ณ , c๊ฐ EOF ์ฝ๋ ํฌ์ธํธ๊ฐ ์๋๋ฉด:
-
c๊ฐ URL ์ฝ๋ ํฌ์ธํธ๊ฐ ์๋๊ณ U+0025 (%)๋ ์๋๋ฉด, invalid-URL-unit ๊ฒ์ฆ ์ค๋ฅ.
-
c๊ฐ U+0025 (%)์ด๊ณ remaining์ด ๋ ๊ฐ์ ASCII 16์ง ์ซ์๋ก ์์ํ์ง ์์ผ๋ฉด, invalid-URL-unit ๊ฒ์ฆ ์ค๋ฅ.
-
c๋ฅผ C0 ์ ์ด ํผ์ผํธ ์ธ์ฝ๋ฉ ์งํฉ์ ์ฌ์ฉํ์ฌ UTF-8 ํผ์ผํธ ์ธ์ฝ๋ฉํ๊ณ , ๊ทธ ๊ฒฐ๊ณผ๋ฅผ url์ ๊ฒฝ๋ก์ ์ถ๊ฐํ๋ค.
-
-
- ์ฟผ๋ฆฌ ์ํ
-
-
encoding์ด UTF-8์ด ์๋๊ณ ๋ค์ ์ค ํ๋๊ฐ true์ด๋ฉด:
-
url์ด ํน์ํ์ง ์๋ค
-
url์ ์คํด์ด "
ws" ๋๋ "wss"์ด๋ค
๊ทธ๋ฌ๋ฉด encoding์ UTF-8๋ก ์ค์ ํ๋ค.
-
-
๋ค์ ์ค ํ๋๊ฐ true์ด๋ฉด:
-
state override๊ฐ ์ฃผ์ด์ง์ง ์์๊ณ c๊ฐ U+0023 (#)์ด๋ค
-
c๊ฐ EOF ์ฝ๋ ํฌ์ธํธ์ด๋ค
๊ทธ๋ฌ๋ฉด:
-
queryPercentEncodeSet๋ฅผ url์ด ํน์ํ๋ฉด ํน์ ์ฟผ๋ฆฌ ํผ์ผํธ ์ธ์ฝ๋ฉ ์งํฉ์ผ๋ก ๋๊ณ , ๊ทธ๋ ์ง ์์ผ๋ฉด ์ฟผ๋ฆฌ ํผ์ผํธ ์ธ์ฝ๋ฉ ์งํฉ์ผ๋ก ๋๋ค.
-
encoding, buffer, ๊ทธ๋ฆฌ๊ณ queryPercentEncodeSet์ผ๋ก ์ธ์ฝ๋ฉ ํ ํผ์ผํธ ์ธ์ฝ๋ฉ์ ์ํํ๊ณ , ๊ทธ ๊ฒฐ๊ณผ๋ฅผ url์ ์ฟผ๋ฆฌ์ ์ถ๊ฐํ๋ค.
์ด ์์ ์ ์ํ๋ฅผ ๊ฐ์ง๋ ISO-2022-JP ์ธ์ฝ๋ ๋๋ฌธ์ ์ฝ๋ ํฌ์ธํธ ๋จ์๋ก ํธ์ถํ ์ ์๋ค.
-
buffer๋ฅผ ๋น ๋ฌธ์์ด๋ก ์ค์ ํ๋ค.
-
c๊ฐ U+0023 (#)์ด๋ฉด, url์ ํ๋๊ทธ๋จผํธ๋ฅผ ๋น ๋ฌธ์์ด๋ก ์ค์ ํ๊ณ state๋ฅผ ํ๋๊ทธ๋จผํธ ์ํ๋ก ์ค์ ํ๋ค.
-
-
๊ทธ๋ ์ง ์๊ณ , c๊ฐ EOF ์ฝ๋ ํฌ์ธํธ๊ฐ ์๋๋ฉด:
-
c๊ฐ URL ์ฝ๋ ํฌ์ธํธ๊ฐ ์๋๊ณ U+0025 (%)๋ ์๋๋ฉด, invalid-URL-unit ๊ฒ์ฆ ์ค๋ฅ.
-
c๊ฐ U+0025 (%)์ด๊ณ remaining์ด ๋ ๊ฐ์ ASCII 16์ง ์ซ์๋ก ์์ํ์ง ์์ผ๋ฉด, invalid-URL-unit ๊ฒ์ฆ ์ค๋ฅ.
-
c๋ฅผ buffer์ ์ถ๊ฐํ๋ค.
-
-
- ํ๋๊ทธ๋จผํธ ์ํ
-
-
c๊ฐ EOF ์ฝ๋ ํฌ์ธํธ๊ฐ ์๋๋ฉด:
-
c๊ฐ URL ์ฝ๋ ํฌ์ธํธ๊ฐ ์๋๊ณ U+0025 (%)๋ ์๋๋ฉด, invalid-URL-unit ๊ฒ์ฆ ์ค๋ฅ.
-
c๊ฐ U+0025 (%)์ด๊ณ remaining์ด ๋ ๊ฐ์ ASCII 16์ง ์ซ์๋ก ์์ํ์ง ์์ผ๋ฉด, invalid-URL-unit ๊ฒ์ฆ ์ค๋ฅ.
-
c๋ฅผ ํ๋๊ทธ๋จผํธ ํผ์ผํธ ์ธ์ฝ๋ฉ ์งํฉ์ ์ฌ์ฉํ์ฌ UTF-8 ํผ์ผํธ ์ธ์ฝ๋ฉํ๊ณ , ๊ทธ ๊ฒฐ๊ณผ๋ฅผ url์ ํ๋๊ทธ๋จผํธ์ ์ถ๊ฐํ๋ค.
-
-
-
url์ ๋ฐํํ๋ค.
username ์ค์ ์ url๊ณผ username์ ๋ํด ์คํํ ๋, url์ username์ username์ UTF-8 ํผ์ผํธ ์ธ์ฝ๋๋ฅผ userinfo percent-encode set์ผ๋ก ์คํํ ๊ฒฐ๊ณผ๋ก ์ค์ ํ๋ค.
password ์ค์ ์ url๊ณผ password์ ๋ํด ์คํํ ๋, url์ password๋ฅผ password์ UTF-8 ํผ์ผํธ ์ธ์ฝ๋๋ฅผ userinfo percent-encode set์ผ๋ก ์คํํ ๊ฒฐ๊ณผ๋ก ์ค์ ํ๋ค.
4.5. URL ์ง๋ ฌํ
URL ์ง๋ ฌํ๊ธฐ๋ URL url์ ์ทจํ๋ฉฐ, ์ ํ์ ์ธ ๋ถ๋ฆฌ์ธ exclude fragment(๊ธฐ๋ณธ๊ฐ false)๋ฅผ ์ฌ์ฉํ ๋ค์ ๋ค์ ๋จ๊ณ๋ฅผ ์คํํ๋ค. ์ด ๋จ๊ณ๋ค์ ASCII ๋ฌธ์์ด์ ๋ฐํํ๋ค.
-
output์ url์ ์คํด๊ณผ U+003A (:)๋ฅผ ์ฐ๊ฒฐํ ๊ฐ์ผ๋ก ์ค์ ํ๋ค.
-
url์ ํธ์คํธ๊ฐ null์ด ์๋๋ฉด:
-
output์ "
//"๋ฅผ ์ถ๊ฐํ๋ค. -
url์ด ์๊ฒฉ ์ฆ๋ช ์ ํฌํจํ๋ค๋ฉด:
-
url์ ์ฌ์ฉ์ ์ด๋ฆ์ output์ ์ถ๊ฐํ๋ค.
-
url์ ๋น๋ฐ๋ฒํธ๊ฐ ๋น ๋ฌธ์์ด์ด ์๋๋ฉด, U+003A (:)์ ๊ทธ ๋ค์ url์ ๋น๋ฐ๋ฒํธ๋ฅผ output์ ์ถ๊ฐํ๋ค.
-
output์ U+0040 (@)์ ์ถ๊ฐํ๋ค.
-
-
url์ ํฌํธ๊ฐ null์ด ์๋๋ฉด, U+003A (:)์ ๊ทธ ๋ค์ url์ ํฌํธ๋ฅผ ์ง๋ ฌํํ์ฌ output์ ์ถ๊ฐํ๋ค.
-
-
url์ ํธ์คํธ๊ฐ null์ด๊ณ , url์ ๋ถํฌ๋ช ๊ฒฝ๋ก๊ฐ ์๊ณ , url์ ๊ฒฝ๋ก์ ํฌ๊ธฐ๊ฐ 1๋ณด๋ค ํฌ๊ณ , url์ ๊ฒฝ๋ก[0]์ด ๋น ๋ฌธ์์ด์ด๋ฉด, output์ U+002F (/) ๋ค์ U+002E (.)๋ฅผ ์ถ๊ฐํ๋ค.
์ด๋
web+demo:/.//not-a-host/๋๋web+demo:/path/..//not-a-host/๊ฐ ํ์ฑ๋ ๋ค์ ์ง๋ ฌํ๋ ๋web+demo://not-a-host/๊ฐ ๋๋ ๊ฒ์ ๋ฐฉ์งํ๋ค(์ด๋ค์ ๊ฒฐ๊ตญweb+demo:/.//not-a-host/๊ฐ ๋๋ค). -
URL ๊ฒฝ๋ก ์ง๋ ฌํ๋ฅผ url์ ์ํํ ๊ฒฐ๊ณผ๋ฅผ output์ ์ถ๊ฐํ๋ค.
-
url์ ์ฟผ๋ฆฌ๊ฐ null์ด ์๋๋ฉด, U+003F (?)์ ๊ทธ ๋ค์ url์ ์ฟผ๋ฆฌ๋ฅผ output์ ์ถ๊ฐํ๋ค.
-
exclude fragment๊ฐ false์ด๊ณ url์ ํ๋๊ทธ๋จผํธ๊ฐ null์ด ์๋๋ฉด, U+0023 (#)๊ณผ ๊ทธ ๋ค์ url์ ํ๋๊ทธ๋จผํธ๋ฅผ output์ ์ถ๊ฐํ๋ค.
-
output์ ๋ฐํํ๋ค.
URL ๊ฒฝ๋ก ์ง๋ ฌํ๊ธฐ๋ URL ๋๋ URL ๊ฒฝ๋ก urlOrPath๋ฅผ ์ทจํ๊ณ ๋ค์ ๋จ๊ณ๋ฅผ ์คํํ๋ค. ์ด ๋จ๊ณ๋ค์ ASCII ๋ฌธ์์ด์ ๋ฐํํ๋ค.
-
urlOrPath๊ฐ URL์ด๋ฉด path๋ฅผ urlOrPath์ ๊ฒฝ๋ก๋ก ์ค์ ํ๊ณ , ๊ทธ๋ ์ง ์์ผ๋ฉด urlOrPath๋ก ์ค์ ํ๋ค.
-
path๊ฐ URL ๊ฒฝ๋ก ์ธ๊ทธ๋จผํธ์ด๋ฉด, path๋ฅผ ๋ฐํํ๋ค.
-
output์ ๋น ๋ฌธ์์ด๋ก ์ค์ ํ๋ค.
-
path์ ๊ฐ segment์ ๋ํด ๊ฐ๊ฐ: U+002F (/)์ ๊ทธ ๋ค์ segment๋ฅผ output์ ์ถ๊ฐํ๋ค.
-
output์ ๋ฐํํ๋ค.
4.6. URL ๋๋ฑ์ฑ
URL A๊ฐ ๊ฐ์์ง URL B์ ๋น๊ตํ๋ ค๋ฉด, ์ ํ์ ๋ถ๋ฆฌ์ธ exclude fragments(๊ธฐ๋ณธ๊ฐ false)๋ฅผ ์ฌ์ฉํ์ฌ, ๋ค์ ๋จ๊ณ๋ฅผ ์คํํ๋ค.
-
serializedA๋ฅผ ์ง๋ ฌํํ A์ ๊ฒฐ๊ณผ๋ก ์ค์ ํ๋, exclude fragment๋ฅผ exclude fragments๋ก ์ค์ ํ๋ค.
-
serializedB๋ฅผ ์ง๋ ฌํํ B์ ๊ฒฐ๊ณผ๋ก ์ค์ ํ๋, exclude fragment๋ฅผ exclude fragments๋ก ์ค์ ํ๋ค.
-
serializedA๊ฐ serializedB์ด๋ฉด true๋ฅผ ๋ฐํํ๊ณ , ๊ทธ๋ ์ง ์์ผ๋ฉด false๋ฅผ ๋ฐํํ๋ค.
URL ๊ฒฝ๋ก A๊ฐ ๊ฐ์์ง URL ๊ฒฝ๋ก B์ ๋น๊ตํ๋ ค๋ฉด, A์ B๊ฐ ๊ฐ์ผ๋ฉด true๋ฅผ ๋ฐํํ๊ณ , ๊ทธ๋ ์ง ์์ผ๋ฉด false๋ฅผ ๋ฐํํ๋ค.
์ง๋ ฌํ ๊ฒฐ๊ณผ๊ฐ ์๋๋ผ URL ๊ฒฝ๋ก ์ธ๊ทธ๋จผํธ๋ฅผ ๋น๊ตํ๋ ๊ฒ์ด ์ค์ํ ์ ์๋ค. ์๋ก
๋ค๋ฅธ URL ๊ฒฝ๋ก๊ฐ ๋์ผํ๊ฒ ์ง๋ ฌํ๋
์ ์๊ธฐ ๋๋ฌธ์ด๋ค. ์๋ฅผ ๋ค์ด,
web+demo:์ ๊ฒฝ๋ก๋ ๋น ๋ฌธ์์ด์ธ ๋ฐ๋ฉด,
web+demo://host์ ๊ฒฝ๋ก๋ ยซ ยป์ด๋ฉฐ, ๋ ๋ค ๋น ๋ฌธ์์ด๋ก ์ง๋ ฌํ๋๋ค.
URL ๊ฒฝ๋ก A๊ฐ ๋ค์์ผ๋ก ์์ํ๋์ง URL ๊ฒฝ๋ก B์ ๋น๊ตํ๋ ค๋ฉด, ๋ค์ ๋จ๊ณ๋ฅผ ์คํํ๋ค. ์ด ๋จ๊ณ๋ค์ ๋ถ๋ฆฌ์ธ์ ๋ฐํํ๋ค.
-
A๊ฐ URL ๊ฒฝ๋ก ์ธ๊ทธ๋จผํธ์ด๊ฑฐ๋ B๊ฐ URL ๊ฒฝ๋ก ์ธ๊ทธ๋จผํธ์ด๋ฉด, false๋ฅผ ๋ฐํํ๋ค.
-
B์ ํฌ๊ธฐ๊ฐ A์ ํฌ๊ธฐ๋ณด๋ค ํฌ๋ฉด, false๋ฅผ ๋ฐํํ๋ค.
-
B์ ๊ฐ index์ ๋ํด, B์ ์ธ๋ฑ์ค ์ค: A[index]๊ฐ B[index]๊ฐ ์๋๋ฉด, false๋ฅผ ๋ฐํํ๋ค.
-
true๋ฅผ ๋ฐํํ๋ค.
URL ๊ฒฝ๋ก ์ธ๊ทธ๋จผํธ๋ ๋ชฉ๋ก ์์์ ์ ๋๋ก U+002F (/)๋ฅผ ํฌํจํ์ง ์์ผ๋ฏ๋ก,
A๋ B๊ฐ A์ ์ ์ฒด ์ธ๊ทธ๋จผํธ๋ฅผ ํฌํจํ ๋๋ง B๋ก ์์ํ๋ค.
๋ฐ๋ผ์ ์ด๋ ํ๋์ URL ๊ฒฝ๋ก๊ฐ ๋ค๋ฅธ ๊ฒฝ๋ก์ "ํฌํจ"๋๋์ง
๊ฒฐ์ ํ๋ ๋ฐ ์ ํฉํ๋ค.
์ง๋ ฌํ ๊ฒฐ๊ณผ๋ฅผ ๋จ์ํ๊ฒ
๋น๊ตํด์๋ ์ ๋๋ค. ๋ค์ ์ง๋ ฌํ ๊ฒฐ๊ณผ๋
ยซ "foobar" ยป์ ๊ฒ์ด ๋ค์์ผ๋ก
์์ํ๋ค.
ยซ "foo" ยป์ ์ง๋ ฌํ ๊ฒฐ๊ณผ๋ก ์์ํ์ง๋ง, ํ์์ URL์์ ํด๋น ๊ฒฝ๋ก๋
์ ์์ URL์
ํฌํจํ์ง ์๋๋ค.
๋ช ์ธ๋ ๋ณด์ ๊ฒฐ์ ์ ์ํด ์ถ์ฒ ๊ฐ๋ ์ ์ฐ์ ํด์ผ ํ๋ค. URL ๊ฒฝ๋ก๊ฐ ์์ ์ด ํฌํจํ๋ URL ๊ฒฝ๋ก๋ฅผ ํฌ๊ดํ๋ ๊ฒ์ผ๋ก ์ทจ๊ธํ๋ ๊ฒ์ ์น ํ๋ซํผ์ ๋๋จธ์ง ๋ถ๋ถ๊ณผ ์กฐํ๋ฅผ ์ด๋ฃจ์ง ์๋ ๊ฒฝ๋ก ๊ธฐ๋ฐ ๊ถํ์ ํ ํํ์ด๋ค. ์ด๋ ์ฟ ํค์ ๊ฐ์ ๋ ๊ฑฐ์ ๊ธฐ๋ฅ์ ํ์ํ์ง๋ง, ๊ทธ ๋ฐ์ ๊ฒฝ์ฐ์๋ ํผํ๋ ๊ฒ์ด ๊ฐ์ฅ ์ข๋ค.
4.7. ์ค๋ฆฌ์ง
HTML์ ์๋ ์ค๋ฆฌ์ง์ ์ ์์์ ํ์ํ ๋ฐฐ๊ฒฝ ์ ๋ณด๋ฅผ ์ฐธ์กฐํ์ญ์์ค. [HTML]
URL url์ ์ถ์ฒ๋ ๋ค์ ๋จ๊ณ๋ฅผ ์คํํ์ฌ ๋ฐํ๋๋ ์ถ์ฒ์ด๋ฉฐ, ๋ค์์ ๋ฐ๋ผ ๋ถ๊ธฐํ๋ค. url์ ์คํด:
- "
blob" -
-
url์ blob URL ํญ๋ชฉ์ด null์ด ์๋๋ฉด, url์ blob URL ํญ๋ชฉ์ ํ๊ฒฝ์ ์ถ์ฒ๋ฅผ ๋ฐํํ๋ค.
-
pathURL์ ํ์ฑํ ๊ฒฐ๊ณผ๋ก ์ค์ ํ๋ค. ๋ค์ ๊ฒฐ๊ณผ๋ฅผ URL ๊ฒฝ๋ก ์ง๋ ฌํํ url.
-
pathURL์ด ์คํจ์ด๋ฉด, ์ ๋ถํฌ๋ช ์ถ์ฒ๋ฅผ ๋ฐํํ๋ค.
-
pathURL์ ์คํด์ด "
http", "https" ๋๋ "file"์ด๋ฉด, pathURL์ ์ถ์ฒ๋ฅผ ๋ฐํํ๋ค. -
์ ๋ถํฌ๋ช ์ถ์ฒ๋ฅผ ๋ฐํํ๋ค.
์ถ์ฒ๋
blob:https://whatwg.org/d0360e2f-caee-469f-9a2f-87d5b0456f6f์ ๊ฒฝ์ฐ ํํ ์ถ์ฒ ("https", "whatwg.org", null, null)์ด๋ค. -
- "
ftp"- "
http"- "
https"- "
ws"- "
wss" - "
-
ํํ ์ถ์ฒ (url์ ์คํด, url์ ํธ์คํธ, url์ ํฌํธ, null)์ ๋ฐํํ๋ค.
- "
file" -
์ ๊ฐ์ค๋ฝ์ง๋ง, ์ด๋ ๋ ์์๊ฒ ์ฐ์ต ๋ฌธ์ ๋ก ๋จ๊ฒจ ๋๋ค. ํ์ ์ด ์๋ค๋ฉด, ์ ๋ถํฌ๋ช ์ถ์ฒ๋ฅผ ๋ฐํํ๋ค.
- ๊ทธ ์ธ์ ๊ฒฝ์ฐ
-
์ ๋ถํฌ๋ช ์ถ์ฒ๋ฅผ ๋ฐํํ๋ค.
์ด๋ ์ค์ ๋ก ์ด๋ฌํ URL์ด ์๊ธฐ ์์ ๊ณผ ๋์ผ ์ถ์ฒ์ผ ์ ์์์ ์๋ฏธํ๋ค.
4.8. URL ๋ ๋๋ง
URL์ URL ํ์์ ์ฃผ๋ ๋ชฉ์ ์ด ์ฌ์ฉ์๊ฐ ๋ณด์ ๋๋ ์ ๋ขฐ์ ๊ดํ ๊ฒฐ์ ์ ๋ด๋ฆฌ๋๋ก ํ๋ ๊ฒ์ธ ๊ฒฝ์ฐ, ์๋์ ์ค๋ช ๋ ์์ ์ฌํญ์ ์ ์ฉํ์ฌ ์ง๋ ฌํ๋ ํ์์ผ๋ก ๋ ๋๋งํด์ผ ํฉ๋๋ค. ์๋ฅผ ๋ค์ด, ์ฌ์ฉ์๋ ๋ธ๋ผ์ฐ์ ์ฃผ์ ํ์์ค์ ๋ ๋๋ง๋ URL์ ๊ธฐ๋ฐ์ผ๋ก ์ ๋ขฐ์ ๊ดํ ๊ฒฐ์ ์ ๋ด๋ฆด ๊ฒ์ผ๋ก ์์๋ฉ๋๋ค.
4.8.1. ์ฌ๋์ด ์ฝ๊ธฐ ์ด๋ ค์ด ๋๋ ์ค์ํ์ง ์์ ๊ตฌ์ฑ์์ ๋จ์ํ
์คํธํ์ ๊ธฐํ๋ฅผ ์ ๊ณตํ๊ฑฐ๋ ๋ณด์ ๊ด๋ จ ์ ๋ณด๋ก๋ถํฐ ์ฃผ์๋ฅผ ๋ถ์ฐ์ํฌ ์ ์๋ ๊ตฌ์ฑ ์์๋ฅผ ์ ๊ฑฐํ๋ค:
-
๋ธ๋ผ์ฐ์ ๋ ์ต์ข ์ฌ์ฉ์๊ฐ ํธ์คํธ์ ๊ฒฝ๋ก์ ๊ฐ์ URL์ ๋ค๋ฅธ ๋ถ๋ถ์ ๊ตฌ๋ณํ๋ ๊ฒ์ด ์ค์ํ ์์น์์๋ URL์ ํธ์คํธ๋ง ๋ ๋๋งํ ์ ์๋ค. ๋ธ๋ผ์ฐ์ ๋ ํธ์คํธ์ ๋ฑ๋ก ๊ฐ๋ฅ ๋๋ฉ์ธ์ ์ฃผ์๋ฅผ ์ง์ค์ํค๊ธฐ ์ํด ํธ์คํธ๋ฅผ ๋ ๋จ์ํํ๋ ๊ฒ์ ๊ณ ๋ คํ ์ ์๋ค. ์๋ฅผ ๋ค์ด, ๋ธ๋ผ์ฐ์ ๋ ์ ํ
www๋๋m๋๋ฉ์ธ ๋ ์ด๋ธ์ ์๋ตํ์ฌ ํธ์คํธ๋ฅผ ๋จ์ํํ๊ฑฐ๋, ํ์ ๋๋ฉ์ธ์ด ์ ๊ณตํ๋ ์คํธํ ๊ธฐํ๋ฅผ ์ ๊ฑฐํ๊ธฐ ์ํด ๋ฑ๋ก ๊ฐ๋ฅ ๋๋ฉ์ธ๋ง ํ์ํ ์ ์๋ค(์:https://examplecorp.attacker.com/). -
๋ธ๋ผ์ฐ์ ๋ URL์ ์ฌ์ฉ์ ์ด๋ฆ๊ณผ ๋น๋ฐ๋ฒํธ๋ฅผ ๋ ๋๋งํด์๋ ์ ๋๋ค. ์ด๋ค์ URL์ ํธ์คํธ๋ก ์ค์ธ๋ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค(์:
https://examplecorp.com@attacker.example/). -
ํ์ ํ๋ฉด์์ ํญ์ ํ๋์ ์คํด๋ง ํ์ฉํ๋ ๊ฒฝ์ฐ(์: ๋ณด์ ์ถ์ฒ์ ๋ํด์๋ง ํ์ฑํ๋๋ฏ๋ก
https://๋ฅผ ์๋ตํ๋ ๋ธ๋ผ์ฐ์ ๊ธฐ๋ฅ) ๋ธ๋ผ์ฐ์ ๋ URL์ ์คํด ์์ด URL์ ๋ ๋๋งํ ์ ์๋ค. ๊ทธ๋ ์ง ์์ผ๋ฉด ์คํด์ ์ฌ๋์ด ์ฝ์ ์ ์๋ ๋ฌธ์์ด(์: "์์ ํ์ง ์์"), ๋ณด์ ํ์ ์์ด์ฝ ๋๋ ๋ ๋ค๋ก ๋์ฒดํ๊ฑฐ๋ ๋ณด์ํ ์ ์๋ค.
4.8.2. ์๋ต(Elision)
๊ณต๊ฐ์ด ์ ํ๋ ํ์์์๋ ์ฌ์ฉ์๊ฐ ๋ณด์ ๊ฒฐ์ ์ ๋ด๋ฆด ๋ ์คํดํ์ง ์๋๋ก URL์ ์ ์คํ๊ฒ ์๋ตํด์ผ ํ๋ค:
-
๋ธ๋ผ์ฐ์ ๋ URL์ด ๋ ๋๋ง๋ ๋ ์ ์ด๋ ๋ฑ๋ก ๊ฐ๋ฅ ๋๋ฉ์ธ์ด ํ์๋ ์ ์๋๋ก ํด์ผ ํ๋ค (์๋ฅผ ๋ค์ด
https://not-really-examplecorp.com/๋ฅผ ๋ก๋ํ ๋...examplecorp.com์ด ํ์๋๋ ๊ฒ์ ํผํ๊ธฐ ์ํจ์ด๋ค). -
์ ์ฒด ํธ์คํธ๋ฅผ ๋ ๋๋งํ ์ ์๋ ๊ฒฝ์ฐ, ๋ธ๋ผ์ฐ์ ๋ ๊ฐ์ฅ ๋ฎ์ ์์ค์ ๋๋ฉ์ธ ๋ ์ด๋ธ๋ถํฐ ์์ํ์ฌ ๋๋ฉ์ธ ๋ ์ด๋ธ์ ์๋ตํด์ผ ํ๋ค. ์๋ฅผ ๋ค์ด,
examplecorp.com.evil.com์examplecorp.com...์ด ์๋๋ผ...com.evil.com์ผ๋ก ์๋ต๋์ด์ผ ํ๋ค. (์๋ฐฉํฅ ํ ์คํธ ๋๋ฌธ์ ๊ฐ์ฅ ๋ฎ์ ์์ค์ ๋๋ฉ์ธ ๋ ์ด๋ธ์ด ์ผ์ชฝ์ ๋ํ๋์ง ์์ ์๋ ์์์ ์ ์ํ๋ผ.)
4.8.3. ๊ตญ์ ํ ๋ฐ ํน์ ๋ฌธ์
๊ตญ์ ํ ๋๋ฉ์ธ ์ด๋ฆ(IDN), ํน์ ๋ฌธ์ ๋ฐ ์๋ฐฉํฅ ํ ์คํธ๋ ์คํธํ์ ๋ฐฉ์งํ๊ธฐ ์ํด ์ฃผ์ํด์ ์ฒ๋ฆฌํด์ผ ํ๋ค:
-
URL์ ํธ์คํธ๊ฐ ๋๋ฉ์ธ์ด๋ฉด, ๋ธ๋ผ์ฐ์ ๋ ์ด๋ฅผ ๋ ๋๋งํ ๋ ๋๋ฉ์ธ์ ์ ๋์ฝ๋๋ก ๋ณํ์ URL์ ํธ์คํธ์ ํจ๊ป ์คํํด์ผ ํฉ๋๋ค.
๋ค์ํ ๋ฌธ์๊ฐ ๋ํ ๋ฌธ์ ์คํธํ ๊ณต๊ฒฉ์ ์ฌ์ฉ๋ ์ ์์ต๋๋ค. ํผ๋ ๊ฐ๋ฅํ ๋ฌธ์๋ฅผ ๊ฐ์งํ๊ณ ์ฌ์ฉ ์ค์ผ ๋ ๊ฒฝ๊ณ ํ๋ ๊ฒ์ ๊ณ ๋ คํ์ญ์์ค. [IDNFAQ] [UTS39]
-
URL์ ์๋ฐฉํฅ ํ ์คํธ๊ฐ ํฌํจ๋ ๊ฒฝ์ฐ ํธ์คํธ์ ๊ฒฝ๋ก๋ฅผ ํนํ ํผ๋ํ๊ธฐ ์ฌ์ฐ๋ฏ๋ก ์ด ๊ฒฝ์ฐ์๋ URL์ ํธ์คํธ๋ง ๋ ๋๋งํ๋ ๊ฒ์ด ํนํ ๊ถ์ฅ๋ฉ๋๋ค. ๊ฐ๋ ์ฑ์ ์ํด, URL์ ๋ค๋ฅธ ๋ถ๋ถ์ ๋ ๋๋งํ๋ค๋ฉด, ํด๋น ํผ์ผํธ ์ธ์ฝ๋ฉ๋ ๋ฐ์ดํธ ์ํ์ค๋ฅผ ๋ค์ ์คํ ๊ฒฐ๊ณผ์ธ ์ฝ๋ ํฌ์ธํธ๋ก ๋์ฒดํด์ผ ํฉ๋๋ค. ํด๋น ์ํ์ค๋ฅผ BOM ์์ด UTF-8 ๋์ฝ๋ฉํ๊ธฐ ์ ์ ํผ์ผํธ ๋์ฝ๋ฉ์ ์ํํ๋, ๊ทธ๋ก ์ธํด ํด๋น ์ํ์ค๊ฐ ๋ณด์ด์ง ์๊ฒ ๋๋ ๊ฒฝ์ฐ๋ ์ ์ธํฉ๋๋ค. ๋ธ๋ผ์ฐ์ ๋ ํน์ ์ํ์ค๋ฅผ ๋์ฝ๋ฉํ์ง ์๋๋ก ์ ํํ ์ ์์ผ๋ฉฐ, ์ด๋ ์คํธํ ์ํ์ ๋ํ๋ด๋ ๊ฒฝ์ฐ์ ๋๋ค(์: U+1F512 (๐)).
-
๋ธ๋ผ์ฐ์ ๋ ์๋ฐฉํฅ ํ ์คํธ๋ฅผ ์ผ์ชฝ์์ ์ค๋ฅธ์ชฝ ์๋ฒ ๋ฉ์ ์๋ ๊ฒ์ฒ๋ผ ๋ ๋๋งํด์ผ ํฉ๋๋ค. [BIDI]
์ํ๊น๊ฒ๋, ๋ ๋๋ง๋ URL์ ๋ฌธ์์ด์ด๊ณ ์ด๋์๋ ๋ํ๋ ์ ์์ผ๋ฏ๋ก, ๋ ๋๋ง๋ URL์ ์ํ ํน์ ์๋ฐฉํฅ ์๊ณ ๋ฆฌ์ฆ์ ๋๋ฆฌ ์ฑํ๋๊ธฐ ์ด๋ ต์ต๋๋ค. ์๋ฐฉํฅ ํ ์คํธ๋ URL์ ๊ฐ ๋ถ๋ถ๊ณผ ์ํธ์์ฉํ์ฌ ๋ ๋๋ง ๊ฒฐ๊ณผ๊ฐ ๋ชจ๋ธ๊ณผ ๋ฌ๋ผ์ง ์ ์์ต๋๋ค. ์๋ฐฉํฅ ์ธ์ด ์ฌ์ฉ์๋ ์ด๋ฅผ ์์ํ๊ฒ ๋ ์ ์์ผ๋ฉฐ, ํนํ ์ผ๋ฐ ํ ์คํธ ํ๊ฒฝ์์ ๊ทธ๋ ์ต๋๋ค.
5.
application/x-www-form-urlencoded
application/x-www-form-urlencoded ํฌ๋งท์
๋ชฉ๋ก์ ์๋ ํํ ๊ฐ๊ฐ์ name๊ณผ
value๋ก ๊ตฌ์ฑ๋ ์์ผ๋ก ์ธ์ฝ๋ฉํ๋ ๋ฐฉ๋ฒ์ ์ ๊ณตํ๋ค.
application/x-www-form-urlencoded ํฌ๋งท์ ์ฌ๋ฌ ๋ฉด์์ ์ด์ํ๊ณ ๊ธฐํ์ ์ธ ๊ฒฐ๊ณผ๋ฌผ์ด๋ฉฐ, ์๋
๊ฐ ๊ตฌํ
์ฌ๊ณ ์ ํํ์ ๊ฒฐ๊ณผ๋ก ์ํธ์ด์ฉ์ฑ์ ์ํด ํ์ํ ์๊ตฌ์ฌํญ ์งํฉ์ผ๋ก ์ด์ด์ก์ง๋ง, ๊ฒฐ์ฝ ์ข์ ์ค๊ณ ๊ดํ์ ๋ํ๋ด์ง๋ ์๋๋ค. ํนํ, ๋ฐ๋ณต์ (๋๋ก๋ ์ค์ฒฉ๋) ๋ฌธ์ ์ธ์ฝ๋ฉ๊ณผ ๋ฐ์ดํธ ์ํ์ค ๊ฐ ๋ณํ์ ๊ผฌ์ธ
์ธ๋ถ์ฌํญ์ ์ฃผ์ ๊น๊ฒ ์ดํด์ผ ํ๋ค. ์ํ๊น๊ฒ๋ HTML ํผ์ ๋ณดํธ์ ์ฌ์ฉ์ผ๋ก ์ธํด ์ด ํฌ๋งท์ ๋๋ฆฌ ์ฐ์ด๊ณ ์๋ค. [HTML]
5.1. application/x-www-form-urlencoded ํ์ฑ
๋ ๊ฑฐ์ ์๋ฒ ์ค์ฌ ๊ตฌํ์ ์ธ์ฝ๋ฉ์ด UTF-8์ด ์๋
๊ฒฝ์ฐ๋ name์ด `_charset`์ธ ํํ์ ๋ํด ํน๋ณํ ์ฒ๋ฆฌ ๋ก์ง์ ์ง์ํด์ผ ํ ์ ์๋ค. ์ด๋ฌํ ๋ก์ง์ ์ฌ๊ธฐ์ ๊ธฐ์ ํ์ง ์์ผ๋ฉฐ, UTF-8๋ง์ด
์ค์ํ๋
์ธ์ฝ๋ฉ์ด๋ค.
application/x-www-form-urlencoded ํ์๋ ๋ฐ์ดํธ ์ํ์ค
input์ ๋ฐ์ ๋ค์ ๋จ๊ณ๋ฅผ ์คํํ๋ค:
-
sequences๋ฅผ input์ 0x26(&)์ผ๋ก ๋ถํ ํ ๊ฒฐ๊ณผ๋ก ๋๋ค.
-
output์ name๊ณผ value๊ฐ ๋ฌธ์์ด์ ๋ด๋ ํํ๋ก ๊ตฌ์ฑ๋, ์ด๊ธฐ์๋ ๋น ๋ชฉ๋ก์ผ๋ก ๋๋ค.
-
๊ฐ ๋ฐ์ดํธ ์ํ์ค bytes์ ๋ํด sequences์์:
-
bytes๊ฐ ๋น ๋ฐ์ดํธ ์ํ์ค์ด๋ฉด ๊ณ์.
-
bytes์ 0x3D(=)๊ฐ ์์ผ๋ฉด, name์ bytes์ ์ฒ์๋ถํฐ ์ฒซ ๋ฒ์งธ 0x3D(=) ์ง์ ๊น์ง์ ๋ฐ์ดํธ๋ก, value๋ฅผ ์ฒซ ๋ฒ์งธ 0x3D(=) ์ดํ๋ถํฐ ๋๊น์ง์ ๋ฐ์ดํธ๋ก ๋๋ค. 0x3D(=)๊ฐ ์ฒซ ๋ฒ์งธ ๋ฐ์ดํธ๋ฉด name์ ๋น ๋ฐ์ดํธ ์ํ์ค๊ฐ ๋๊ณ , ๋ง์ง๋ง์ด๋ฉด value๋ ๋น ๋ฐ์ดํธ ์ํ์ค๊ฐ ๋๋ค.
-
๊ทธ ์ธ์๋ name์ bytes ๊ฐ์ผ๋ก, value๋ฅผ ๋น ๋ฐ์ดํธ ์ํ์ค๋ก ๋๋ค.
-
name๊ณผ value์ ๋ชจ๋ 0x2B(+)๋ฅผ 0x20(SP)๋ก ์นํํ๋ค.
-
nameString๊ณผ valueString์ ๊ฐ๊ฐ BOM ์๋ UTF-8 ๋์ฝ๋๋ฅผ ํผ์ผํธ ๋์ฝ๋ฉ๋ name๊ณผ value์ ๋ํด ์คํํ ๊ฒฐ๊ณผ๋ก ๋๋ค.
-
append (nameString, valueString)๋ฅผ output์ ์ถ๊ฐ.
-
-
output์ ๋ฐํํ๋ค.
5.2. application/x-www-form-urlencoded ์ง๋ ฌํ
application/x-www-form-urlencoded ์ง๋ ฌํ๊ธฐ๋
name-value ํํ tuples ๋ชฉ๋ก๊ณผ ์ ํ์ ์ธ์ฝ๋ฉ
encoding(๊ธฐ๋ณธ UTF-8)์ ๋ฐ์ ๋ค์ ๋จ๊ณ๋ฅผ ์คํํ๋ค. ๋ฐํ๊ฐ์ ASCII ๋ฌธ์์ด์ด๋ค.
-
encoding์ output encoding์ ์ป๊ธฐ๋ฅผ encoding์ ๋ํด ์คํํ ๊ฒฐ๊ณผ๋ก ์ค์ ํ๋ค.
-
output์ ๋น ๋ฌธ์์ด๋ก ํ๋ค.
-
๊ฐ tuple์ ๋ํด tuples์์ ๋ฐ๋ณตํ๋ค:
-
๋จ์ธ: tuple์ name๊ณผ tuple์ value๋ ์ค์นผ๋ผ ๊ฐ ๋ฌธ์์ด์ด๋ค.
-
name์ ๋ค์์ ๊ฒฐ๊ณผ๋ก ํ๋ค: percent-encode after encoding์ encoding, tuple์ name, ๊ทธ๋ฆฌ๊ณ
application/x-www-form-urlencodedpercent-encode set์ผ๋ก ์คํํ ๊ฒฐ๊ณผ. -
value๋ฅผ ๋ค์์ ๊ฒฐ๊ณผ๋ก ํ๋ค: percent-encode after encoding์ encoding, tuple์ value, ๊ทธ๋ฆฌ๊ณ
application/x-www-form-urlencodedpercent-encode set์ผ๋ก ์คํํ ๊ฒฐ๊ณผ. -
output์ด ๋น ๋ฌธ์์ด์ด ์๋๋ผ๋ฉด U+0026 (&)๋ฅผ output์ ์ถ๊ฐํ๋ค.
- name์ ์ถ๊ฐํ๊ณ U+003D (=)๋ฅผ ์ถ๊ฐํ ๋ค value๋ฅผ output์ ์ถ๊ฐํ๋ค.
-
- output์ ๋ฐํํ๋ค.
5.3. ํํฌ(Hooks)
application/x-www-form-urlencoded ๋ฌธ์์ด ํ์๋ ์ค์นผ๋ผ ๊ฐ ๋ฌธ์์ด input์ ๋ฐ์ UTF-8๋ก ์ธ์ฝ๋ํ๊ณ , ๊ทธ ๊ฒฐ๊ณผ๋ฅผ
application/x-www-form-urlencoded ํ์ฑ์ ๋๊ธด ๊ฒฐ๊ณผ๋ฅผ
๋ฐํํ๋ค.
6. API
์ด ์ ์์๋ Web IDL์ ์ฉ์ด๋ฅผ ์ฌ์ฉํ๋ค. ๋ธ๋ผ์ฐ์ ์ฌ์ฉ์ ์์ด์ ํธ๋ ์ด API๋ฅผ ๋ฐ๋์ ์ง์ํด์ผ ํ๋ค. JavaScript ๊ตฌํ๋ ์ด API๋ฅผ ์ง์ํด์ผ ํ๋ค. ๊ธฐํ ์ฌ์ฉ์ ์์ด์ ํธ๋ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ ์์ ๋ค์ ํ์์ ๋ง๋ ์ ์ ํ API๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ๊ถ์ฅ๋๋ฉฐ, ๋ฐ๋์ ์ด API์ผ ํ์๋ ์๋ค. [WEBIDL]
6.1. URL ํด๋์ค
[Exposed=*,LegacyWindowAlias =]webkitURL interface {URL constructor (USVString ,url optional USVString );base static URL ?parse (USVString ,url optional USVString );base static boolean canParse (USVString ,url optional USVString );base stringifier attribute USVString href ;readonly attribute USVString origin ;attribute USVString protocol ;attribute USVString username ;attribute USVString password ;attribute USVString host ;attribute USVString hostname ;attribute USVString port ;attribute USVString pathname ;attribute USVString search ; [SameObject ]readonly attribute URLSearchParams searchParams ;attribute USVString hash ;USVString toJSON (); };
URL ๊ฐ์ฒด์๋ ๋ค์์ด ์ฐ๊ด๋์ด ์๋ค:
- URL: URL ๊ฐ.
- query ๊ฐ์ฒด:
URLSearchParams๊ฐ์ฒด.
API URL ํ์๋ ์ค์นผ๋ผ ๊ฐ ๋ฌธ์์ด url๊ณผ ์ ํ์ null ๋๋ ์ค์นผ๋ผ ๊ฐ ๋ฌธ์์ด base(๊ธฐ๋ณธ๊ฐ null)์ ๋ฐ์ ๋ค์ ๋จ๊ณ๋ฅผ ์คํํ๋ค:
-
parsedBase๋ฅผ null๋ก ๋๋ค.
-
base๊ฐ null์ด ์๋๋ฉด:
-
parsedBase๋ฅผ ๊ธฐ๋ณธ URL ํ์๋ฅผ base์ ์คํํ ๊ฒฐ๊ณผ๋ก ์ค์ .
-
parsedBase๊ฐ ์คํจ๋ฉด ์คํจ๋ฅผ ๋ฐํ.
-
-
๊ธฐ๋ณธ URL ํ์๋ฅผ url์ parsedBase์ ํจ๊ป ์คํํ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํ.
initialize๋ฅผ URL ๊ฐ์ฒด url์
URL urlRecord์ ์คํํ
๋:
-
query๋ฅผ urlRecord์ query ๊ฐ(๊ฐ์ด null์ด ์๋๋ฉด ๊ทธ ๊ฐ, ์๋๋ฉด ๋น ๋ฌธ์์ด)์ผ๋ก ๋๋ค.
-
url์ URL์ urlRecord๋ก ์ค์ .
-
url์ query ๊ฐ์ฒด๋ฅผ ์
URLSearchParams๊ฐ์ฒด๋ก ์ค์ . -
์ด๊ธฐํ๋ฅผ url์ query ๊ฐ์ฒด์ query์ ์คํ.
-
url์ query ๊ฐ์ฒด์ URL ๊ฐ์ฒด๋ฅผ url๋ก ์ค์ .
URL ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ๋ ๊ฐ์ฒด์ extract an origin ๋จ๊ณ๋
this์ URL์ origin์ ๋ฐํํ๋
๊ฒ์ด๋ค. [HTML]
new URL(url, base) ์์ฑ์ ๋จ๊ณ๋ ๋ค์๊ณผ ๊ฐ๋ค:
-
parsedURL์ API URL ํ์๋ฅผ url์ base(์์ผ๋ฉด)์ ํจ๊ป ์คํํ ๊ฒฐ๊ณผ๋ก ๋๋ค.
-
initialize๋ฅผ this์ parsedURL์ ์คํ.
๊ธฐ๋ณธ URL์ ์ฌ์ฉํ์ง ์๊ณ
๋ฌธ์์ด์ URL๋ก
ํ์ฑํ๋ ค๋ฉด, ๋จ์ผ ์ธ์๋ก
URL ์์ฑ์๋ฅผ ํธ์ถํ๋ค:
var input = "https://example.org/๐ฉ" ,
url = new URL( input)
url. pathname // "/%F0%9F%92%A9"
์ ๋ ฅ์ด relative-URL ๋ฌธ์์ด์ด๋ฉด ์์ธ๊ฐ ๋ฐ์ํ๋ค:
try {
var url = new URL( "/๐ฃ๐บ" )
} catch ( e) {
// that happened
}
๊ทธ๋ฌํ ๊ฒฝ์ฐ์๋ ๊ธฐ๋ณธ URL์ด ํ์ํ๋ค:
var input = "/๐ฃ๐บ" ,
url = new URL( input, document. baseURI)
url. href // "https://url.spec.whatwg.org/%F0%9F%8D%A3%F0%9F%8D%BA"
URL ๊ฐ์ฒด๋
๊ธฐ๋ณธ URL๋ก ์ฌ์ฉํ ์ ์๋ค
(IDL์ ์ธ์๋ก ๋ฌธ์์ด์ ์๊ตฌํ๋ฏ๋ก,
URL ๊ฐ์ฒด๋
์์ ์ href
getter ๋ฐํ๊ฐ์ผ๋ก ๋ฌธ์์ดํ๋๋ค):
var url = new URL( "๐ณ๏ธโ๐" , new URL( "https://pride.example/hello-world" ))
url. pathname // "/%F0%9F%8F%B3%EF%B8%8F%E2%80%8D%F0%9F%8C%88"
static parse(url, base) ๋ฉ์๋ ๋จ๊ณ:
-
parsedURL์ API URL ํ์๋ฅผ url์ base(์์ผ๋ฉด)์ ํจ๊ป ์คํํ ๊ฒฐ๊ณผ๋ก ๋๋ค.
-
parsedURL์ด ์คํจ๋ฉด null์ ๋ฐํ.
-
url์ ์
URL๊ฐ์ฒด๋ก ๋๋ค. -
initialize๋ฅผ url๊ณผ parsedURL์ ์คํ.
-
url์ ๋ฐํ.
์ ์ canParse(url, base)
๋ฉ์๋ ๋จ๊ณ:
-
parsedURL์ API URL ํ์๋ฅผ url๊ณผ base๊ฐ ์๋ ๊ฒฝ์ฐ ์คํํ ๊ฒฐ๊ณผ๋ฅผ ํ ๋นํฉ๋๋ค.
-
parsedURL์ด ์คํจ๋ฉด false๋ฅผ ๋ฐํํฉ๋๋ค.
-
true๋ฅผ ๋ฐํํฉ๋๋ค.
href getter ๋จ๊ณ์
toJSON() ๋ฉ์๋ ๋จ๊ณ๋
์๋ฆฌ์ผ๋ผ์ด์ฆ๋
this์ URL์ ๋ฐํํ๋ ๊ฒ์
๋๋ค.
href
setter ๋จ๊ณ:
-
parsedURL์ basic URL ํ์๋ฅผ ์ ๋ ฅ๊ฐ์ ์คํํ ๊ฒฐ๊ณผ๋ฅผ ํ ๋นํฉ๋๋ค.
-
this์ query object์ list๋ฅผ ๋น์๋๋ค.
-
query๊ฐ null์ด ์๋๋ฉด this์ query object์ list์ ํ์ฑ query ๊ฒฐ๊ณผ๋ฅผ ํ ๋นํฉ๋๋ค.
origin getter ๋จ๊ณ๋
์๋ฆฌ์ผ๋ผ์ด์ฆ๋ this์ URL์
origin์ ๋ฐํํฉ๋๋ค.
[HTML]
protocol
setter ๋จ๊ณ๋
basic
URL ํ์ฑ์ ์
๋ ฅ๊ฐ๊ณผ U+003A (:)๊ฐ ๋ค๋ฐ๋ฅด๋๋ก ํ ํ
this์ URL์ url๋ก
ํ๊ณ
scheme start
state๋ฅผ state override๋ก ์ง์ ํ์ฌ ์คํํฉ๋๋ค.
username
setter ๋จ๊ณ:
-
this์ URL์ด username/password/port๋ฅผ ๊ฐ์ง ์ ์์ผ๋ฉด return.
-
set the username์ this์ URL๊ณผ ์ ๋ ฅ๊ฐ์ผ๋ก ์ํํฉ๋๋ค.
password
setter ๋จ๊ณ:
-
this์ URL์ด username/password/port๋ฅผ ๊ฐ์ง ์ ์์ผ๋ฉด return.
-
set the password๋ฅผ this์ URL๊ณผ ์ ๋ ฅ๊ฐ์ผ๋ก ์ํํฉ๋๋ค.
host getter ๋จ๊ณ๋ ๋ค์๊ณผ ๊ฐ๋ค:
-
url์ ํธ์คํธ๊ฐ null์ด๋ฉด, ๋น ๋ฌธ์์ด์ ๋ฐํํ๋ค.
-
url์ ํฌํธ๊ฐ null์ด๋ฉด, url์ ํธ์คํธ๋ฅผ ์ง๋ ฌํํ์ฌ ๋ฐํํ๋ค.
-
url์ ํธ์คํธ๋ฅผ ์ง๋ ฌํํ ๊ฒ์, U+003A (:)์ url์ ํฌํธ๋ฅผ ์ง๋ ฌํํ ๊ฒ์ ์ด์ด์ ๋ฐํํ๋ค.
host
setter ๋จ๊ณ๋ ๋ค์๊ณผ ๊ฐ๋ค:
-
this์ URL์ด ๋ถํฌ๋ช ๊ฒฝ๋ก๋ฅผ ๊ฐ์ง๋ฉด, returnํ๋ค.
-
์ฃผ์ด์ง ๊ฐ์ ๊ธฐ๋ณธ URL ํ์ฑํ๋ค. ์ด๋ this์ URL์ url๋ก, host state๋ฅผ state override๋ก ์ฌ์ฉํ๋ค.
host
setter์ ์ฃผ์ด์ง ๊ฐ์
ํฌํธ๊ฐ ์์ผ๋ฉด, this์ URL์ ํฌํธ๋ ๋ณ๊ฒฝ๋์ง
์๋๋ค. host getter๊ฐ URL-port ๋ฌธ์์ด์ ๋ฐํํ๋ฏ๋ก
setter๊ฐ ํญ์ ๋ ๋ค "์ฌ์ค์ "ํ๋ค๊ณ ์๊ฐํ์ ์ ์์ด, ์ด๋ ์์๊ณผ ๋ค๋ฅผ ์ ์๋ค.
hostname getter ๋จ๊ณ๋ ๋ค์๊ณผ ๊ฐ๋ค:
hostname
์ค์ ์ ๋จ๊ณ๋ ๋ค์๊ณผ ๊ฐ๋ค:
-
this์ URL์ด ๋ถํฌ๋ช ๊ฒฝ๋ก๋ฅผ ๊ฐ์ง๋ฉด returnํ๋ค.
-
์ฃผ์ด์ง ๊ฐ์ this์ URL์ url๋ก, ํธ์คํธ๋ช ์ํ๋ฅผ state override๋ก ํ์ฌ ๊ธฐ๋ณธ URL ํ์ฑํ๋ค.
port getter ๋จ๊ณ๋ ๋ค์๊ณผ ๊ฐ๋ค:
port
์ค์ ์ ๋จ๊ณ๋ ๋ค์๊ณผ ๊ฐ๋ค:
-
this์ URL์ด ์ฌ์ฉ์ ์ด๋ฆ/๋น๋ฐ๋ฒํธ/ํฌํธ๋ฅผ ๊ฐ์ง ์ ์์ผ๋ฉด, returnํ๋ค.
-
์ฃผ์ด์ง ๊ฐ์ด ๋น ๋ฌธ์์ด์ด๋ฉด, this์ URL์ ํฌํธ๋ฅผ null๋ก ์ค์ ํ๋ค.
-
๊ทธ๋ ์ง ์์ผ๋ฉด, ์ฃผ์ด์ง ๊ฐ์ this์ URL์ url๋ก, ๊ทธ๋ฆฌ๊ณ ํฌํธ ์ํ๋ฅผ state override๋ก ํ์ฌ ๊ธฐ๋ณธ URL ํ์ฑํ๋ค.
pathname getter ๋จ๊ณ๋ URL ๊ฒฝ๋ก
์ง๋ ฌํ๋ฅผ this์ URL์ ๋ํด ์คํํ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํ๋ ๊ฒ์ด๋ค.
pathname
์ค์ ์ ๋จ๊ณ๋ ๋ค์๊ณผ ๊ฐ๋ค:
-
this์ URL์ด ๋ถํฌ๋ช ๊ฒฝ๋ก๋ฅผ ๊ฐ์ง๋ฉด returnํ๋ค.
-
์ฃผ์ด์ง ๊ฐ์ this์ URL์ url๋ก, ๊ฒฝ๋ก ์์ ์ํ๋ฅผ state override๋ก ํ์ฌ ๊ธฐ๋ณธ URL ํ์ฑํ๋ค.
search getter ๋จ๊ณ๋ ๋ค์๊ณผ ๊ฐ๋ค:
search
์ค์ ์ ๋จ๊ณ๋ ๋ค์๊ณผ ๊ฐ๋ค:
-
์ฃผ์ด์ง ๊ฐ์ด ๋น ๋ฌธ์์ด์ด๋ฉด, url์ ์ฟผ๋ฆฌ๋ฅผ null๋ก ์ค์ ํ๊ณ , this์ ์ฟผ๋ฆฌ ๊ฐ์ฒด์ ๋ชฉ๋ก์ ๋น์ฐ๊ณ , returnํ๋ค.
-
input์, ์ฃผ์ด์ง ๊ฐ์์ ์ ํ U+003F (?) ํ๋๋ฅผ ์ ๊ฑฐํ ๊ฐ์ผ๋ก ๋๋ค(์๋ ๊ฒฝ์ฐ).
-
url์ ์ฟผ๋ฆฌ๋ฅผ ๋น ๋ฌธ์์ด๋ก ์ค์ ํ๋ค.
-
input์ url์ url๋ก, ์ฟผ๋ฆฌ ์ํ๋ฅผ state override๋ก ํ์ฌ ๊ธฐ๋ณธ URL ํ์ฑํ๋ค.
-
์ค์ ํฉ๋๋ค: this์ ์ฟผ๋ฆฌ ๊ฐ์ฒด์ ๋ชฉ๋ก์ ๋ค์ ๊ตฌ๋ฌธ ๋ถ์ํ url์ ์ฟผ๋ฆฌ ๊ฒฐ๊ณผ๋ก.
searchParams getter ๋จ๊ณ๋
this์ ์ฟผ๋ฆฌ
๊ฐ์ฒด๋ฅผ ๋ฐํํ๋ ๊ฒ์ด๋ค.
hash getter ๋จ๊ณ๋ ๋ค์๊ณผ ๊ฐ๋ค:
-
this์ URL์ ํ๋๊ทธ๋จผํธ๊ฐ null ๋๋ ๋น ๋ฌธ์์ด์ด๋ฉด ๋น ๋ฌธ์์ด์ ๋ฐํํ๋ค.
-
U+0023 (#) ๋ค์ this์ URL์ ํ๋๊ทธ๋จผํธ๋ฅผ ๋ถ์ฌ ๋ฐํํ๋ค.
hash
์ค์ ์ ๋จ๊ณ๋ ๋ค์๊ณผ ๊ฐ๋ค:
-
์ฃผ์ด์ง ๊ฐ์ด ๋น ๋ฌธ์์ด์ด๋ฉด, this์ URL์ ํ๋๊ทธ๋จผํธ๋ฅผ null๋ก ์ค์ ํ๊ณ returnํ๋ค.
-
input์, ์ฃผ์ด์ง ๊ฐ์์ ์ ํ U+0023 (#) ํ๋๋ฅผ ์ ๊ฑฐํ ๊ฐ์ผ๋ก ๋๋ค(์๋ ๊ฒฝ์ฐ).
-
this์ URL์ ํ๋๊ทธ๋จผํธ๋ฅผ ๋น ๋ฌธ์์ด๋ก ์ค์ ํ๋ค.
-
input์ this์ URL์ url๋ก, ํ๋๊ทธ๋จผํธ ์ํ๋ฅผ state override๋ก ํ์ฌ ๊ธฐ๋ณธ URL ํ์ฑํ๋ค.
6.2. URLSearchParams ํด๋์ค
[Exposed=*]interface {URLSearchParams constructor (optional (sequence <sequence <USVString >>or record <USVString ,USVString >or USVString )= "");init readonly attribute unsigned long size ;undefined append (USVString ,name USVString );value undefined delete (USVString ,name optional USVString );value USVString ?get (USVString );name sequence <USVString >getAll (USVString );name boolean has (USVString ,name optional USVString );value undefined set (USVString ,name USVString );value undefined sort ();iterable <USVString ,USVString >;stringifier ; };
URLSearchParams
๊ฐ์ฒด๋ฅผ ์์ฑํ๊ณ ๋ฌธ์์ดํํ๋ ๊ฒ์ ๊ฝค ๊ฐ๋จํ๋ค:
let params = new URLSearchParams({ key: "730d67" })
params. toString() // "key=730d67"
URLSearchParams
๊ฐ์ฒด๋ ๋ด๋ถ์ ์ผ๋ก application/x-www-form-urlencoded
ํฌ๋งท์ ์ฌ์ฉํ๋ฏ๋ก,
ํน์ ์ฝ๋ ํฌ์ธํธ์ ์ธ์ฝ๋ฉ ๋ฐฉ์์ด URL ๊ฐ์ฒด(์๋ฅผ ๋ค๋ฉด
href
๋ฐ search)
์ ๋ค๋ฅผ ์ ์๋ค.
ํนํ searchParams
๋ฅผ ์ฌ์ฉํด URL์ query๋ฅผ ์กฐ์ํ ๋ ์ด๋ฐ
์ฐจ์ด๋ก ์ธํด ๋๋ ์ ์๋ค.
const url = new URL( 'https://example.com/?a=b ~' );
console. log( url. href); // "https://example.com/?a=b%20~"
url. searchParams. sort();
console. log( url. href); // "https://example.com/?a=b+%7E"
const url = new URL( 'https://example.com/?a=~&b=%7E' );
console. log( url. search); // "?a=~&b=%7E"
console. log( url. searchParams. get( 'a' )); // "~"
console. log( url. searchParams. get( 'b' )); // "~"
URLSearchParams
๊ฐ์ฒด๋
application/x-www-form-urlencoded
percent-encode set์ ํฌํจ๋ ๋ชจ๋ ๊ฒ์ percent-encodeํ๋ฉฐ,
U+0020 SPACE๋ U+002B(+)๋ก ์ธ์ฝ๋ฉํ๋ค.
์ธ์ฝ๋ฉ์ ๋ฌด์ํ๊ณ (UTF-8 ์ฌ์ฉ), search
๋
query
percent-encode set์ด๋ special-query percent-encode set์
ํฌํจ๋ ๋ชจ๋ ๊ฒ์ percent-encodeํ๋ค(ํด๋น URL์ด special์ธ์ง์ ๋ฐ๋ผ ๋ค๋ฆ).
URLSearchParams
๊ฐ์ฒด์๋ ๋ค์์ด ์ฐ๊ด๋์ด ์๋ค:
- list: ๋ชฉ๋ก. ๊ฐ ํํ์ name๊ณผ value๋ก ๊ตฌ์ฑ๋๋ฉฐ, ์ด๊ธฐ์๋ ๋น ์ํ์ด๋ค.
- URL ๊ฐ์ฒด: null ๋๋
URL๊ฐ์ฒด, ์ด๊ธฐ์๋ null.
initialize๋ฅผ URLSearchParams
๊ฐ์ฒด query์ init์ผ๋ก ์คํํ ๋:
-
init์ด ์ํ์ค์ด๋ฉด, init์ ๊ฐ innerSequence์ ๋ํด ๊ฐ๊ฐ ๋ค์์ ์ํํฉ๋๋ค.
-
innerSequence์ ํฌ๊ธฐ๊ฐ 2๊ฐ ์๋๋ฉด, ์์ธ๋ฅผ ๋ฐ์์ํต๋๋ค.
TypeError. -
(innerSequence[0], innerSequence[1])์ query์ ๋ชฉ๋ก์ ์ถ๊ฐํฉ๋๋ค.
-
-
๊ทธ๋ ์ง ์๊ณ init์ด ๋ ์ฝ๋์ด๋ฉด, init์ ๊ฐ name โ value์ ๋ํด ๊ฐ๊ฐ (name, value)์ query์ ๋ชฉ๋ก์ ์ถ๊ฐํฉ๋๋ค.
-
๊ทธ๋ ์ง ์์ผ๋ฉด:
update๋ฅผ URLSearchParams
๊ฐ์ฒด query์ ์คํํ ๋:
-
query์ URL ๊ฐ์ฒด๊ฐ null์ด๋ฉด ๋ฐํ.
-
serializedQuery๋ฅผ ์ง๋ ฌํ๋ฅผ query์ list์ ์คํํ ๊ฒฐ๊ณผ๋ก ๋๋ค.
-
serializedQuery๊ฐ ๋น ๋ฌธ์์ด์ด๋ฉด serializedQuery๋ฅผ null๋ก ์ค์ ํ๋ค.
-
query์ URL ๊ฐ์ฒด์ URL์ query๋ฅผ serializedQuery๋ก ์ค์ ํ๋ค.
new URLSearchParams(init)
์์ฑ์ ๋จ๊ณ๋ ๋ค์๊ณผ ๊ฐ๋ค:
-
init์ด ๋ฌธ์์ด์ด๊ณ ์์ U+003F(?)๊ฐ ์์ผ๋ฉด ์ฒ์ ์ฝ๋ ํฌ์ธํธ๋ฅผ ์ ๊ฑฐํ๋ค.
-
initialize๋ฅผ this์ init์ ์คํํ๋ค.
append(name, value)
๋ฉ์๋ ๋จ๊ณ๋ ๋ค์๊ณผ ๊ฐ๋ค:
delete(name, value)
๋ฉ์๋ ๋จ๊ณ๋ ๋ค์๊ณผ ๊ฐ๋ค:
get(name) ๋ฉ์๋ ๋จ๊ณ๋
this์
list์์ name์ด name์ธ ์ฒซ ๋ฒ์งธ tuple์
value๋ฅผ ๋ฐํํ๋ฉฐ, ๊ทธ๋ฐ ํํ์ด ์๋ค๋ฉด null์ ๋ฐํํฉ๋๋ค.
getAll(name) ๋ฉ์๋ ๋จ๊ณ๋
this์
list์์ name์ด name์ธ ๋ชจ๋ tuple์
value๋ฅผ ๋ฆฌ์คํธ ์์๋๋ก ๋ฐํํ๋ฉฐ, ์์ผ๋ฉด ๋น sequence๋ฅผ ๋ฐํํฉ๋๋ค.
has(name, value)
๋ฉ์๋ ๋จ๊ณ:
set(name, value)
๋ฉ์๋ ๋จ๊ณ:
URLSearchParams
๊ฐ์ฒด์์ name-value ํํ์ ์ ๋ ฌํ๋ ๊ฒ์ ์บ์ ์ ์ค๋ฅ ์ ๋์ด๋ ๋ฑ ์ ์ฉํ ์ ์์ต๋๋ค. ์ด ์์
์
sort()
๋ฉ์๋๋ฅผ ํธ์ถํด ์ํํ ์ ์์ต๋๋ค:
const url = new URL( "https://example.org/?q=๐ณ๏ธโ๐&key=e1f7bc78" );
url. searchParams. sort();
url. search; // "?key=e1f7bc78&q=%F0%9F%8F%B3%EF%B8%8F%E2%80%8D%F0%9F%8C%88"
์
๋ ฅ์ ๋ณ๊ฒฝํ์ง ์๊ณ ์๋ฅผ ๋ค์ด ๋น๊ต ๋ชฉ์ ์ฒ๋ผ ์ฌ์ฉํ๋ ค๋ฉด ์ URLSearchParams
๊ฐ์ฒด๋ฅผ ์์ฑํ์ธ์:
const sorted = new URLSearchParams( url. search)
sorted. sort()
sort() ๋ฉ์๋ ๋จ๊ณ:
-
this ์ ๋ฆฌ์คํธ ๋ฅผ this ์ ๋ฆฌ์คํธ ๋ฅผ ์ค๋ฆ์ฐจ์์ผ๋ก ์ ๋ ฌ ํ ๊ฒฐ๊ณผ๋ก ์ค์ ํฉ๋๋ค. ์ด๋ a ์ name์ด b ์ name๋ณด๋ค ์ฝ๋ ๋จ์ ์์์ ์์ผ๋ฉด a ๊ฐ b ๋ณด๋ค ์์ ๊ฒ์ผ๋ก ๋ด ๋๋ค.
๋ฐ๋ณต์ ์ฌ์ฉํ value pair๋ this์ list์ tuples์ด๋ฉฐ, key๋ name์ด๊ณ value๋ value์ ๋๋ค.
๋ฌธ์์ดํ ๋์ ๋จ๊ณ๋ ์๋ฆฌ์ผ๋ผ์ด์ง๋ this์ list๋ฅผ ๋ฐํํฉ๋๋ค.
6.3. ๋ค๋ฅธ ๊ณณ์ URL API
URL์ ๋
ธ์ถํ๋ ํ์ค์,
ํด๋น URL์ ๋ฌธ์์ด๋ก ๋
ธ์ถํด์ผ ํฉ๋๋ค
(๋ด๋ถ
์ง๋ ฌํํ์ฌ
URL์). ํ์ค์
URL ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ์ฌ URL์ ๋
ธ์ถํด์๋ ์ ๋ฉ๋๋ค. URL ๊ฐ์ฒด๋
URL
์กฐ์์ ์ํ ๊ฒ์
๋๋ค. IDL์์๋ USVString ํ์
์ ์ฌ์ฉํด์ผ ํฉ๋๋ค.
์ฌ๊ธฐ์ ๋ ๋์ ์์ค์ ๊ฐ๋ ์ ๊ฐ๋ค์ด ๋ถ๋ณ ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ก ๋ ธ์ถ๋์ด์ผ ํ๋ค๋ ๊ฒ์ด๋ค.
ํ์ค์ด ์์ ์ด ์ ์ํ๋ ๊ธฐ๋ฅ์ "URL"์ด๋ผ๋ ์ด๋ฆ์ ๋ณํ์ ์ฌ์ฉํ๊ธฐ๋ก ํ๋ค๋ฉด, ํด๋น ๊ธฐ๋ฅ์ ์ด๋ฆ์ "url"(์๋ฌธ์, ๋์ "l" ํฌํจ)๋ก ์ง์ด์ผ ํ๋ค. "URL", "URI", "IRI"์ ๊ฐ์ ์ด๋ฆ์ ์ฌ์ฉํ์ง ์์์ผ ํ๋ค. ๋ค๋ง, ์ด๋ฆ์ด ๋ณตํฉ์ด์ผ ๊ฒฝ์ฐ "URL"(๋๋ฌธ์)์ด ์ ํธ๋๋ค. ์: "newURL", "oldURL".
HTML์ EventSource
๋ฐ HashChangeEvent
์ธํฐํ์ด์ค๋ ์ ์ ํ ๋ช
๋ช
์์์ด๋ค. [HTML]
๊ฐ์ฌ์ ๊ธ
์๋ ๊ฐ URL์ ๋ ์ํธ์ด์ฉ์ฑ ์๊ฒ ๋ง๋๋๋ฐ ๋ง์ ๋ถ๋ค์ด ๋์์ ์ฃผ์์ผ๋ฉฐ, ์ด ํ์ค์ ๋ชฉํ๋ฅผ ๋์ฑ ๋ฐ์ ์์ผฐ์ต๋๋ค. ๋ง์ฐฌ๊ฐ์ง๋ก ๋ง์ ๋ถ๋ค์ด ์ด ํ์ค์ด ์ค๋๋ ์ ๋ชจ์ต์ด ๋๋๋ก ๋์์ต๋๋ค.
์ด์ ๋ํด, 100ใฎไบบ, Adam Barth, Addison Phillips, Adriรกn Chaves, Adrien Ricciardi, Albert Wiersch, Alex Christensen, Alexandre Morgaut, Alexis Hunt, Alwin Blok, Andrew Sullivan, Arkadiusz Michalski, Behnam Esfahbod, Bobby Holley, Boris Zbarsky, Brad Hill, Brandon Ross, Cailyn Hansen, Chris Dumez, Chris Rebert, Corey Farwell, Dan Appelquist, Daniel Bratell, Daniel Stenberg, David Burns, David Hรฅsรคther, David Sheets, David Singer, David Walp, Domenic Denicola, Emily Schechter, Emily Stark, Eric Lawrence, Erik Arvidsson, Gavin Carothers, Geoff Richards, Glenn Maynard, Gordon P. Hemsley, hemanth, Henri Sivonen, Ian Hickson, Ilya Grigorik, Italo A. Casas, Jakub Gieryluk, James C. Wise, James Graham, James Manger, James Ross, Jeff Hodges, Jeffrey Posnick, Jeffrey Yasskin, Joe Duarte, Joshua Bell, Jxck, Karl Wagner, Kemal Zebari, ็ฐๆๅฅไบบ (Kent TAMURA), Kevin Grandon, Kornel Lesiลski, Larry Masinter, Leif Halvard Silli, Mark Amery, Mark Davis, Marcos Cรกceres, Marijn Kruisselbrink, Martin Dรผrst, Mathias Bynens, Matt Falkenhagen, Matt Giuca, Michael Peick, Michaelโข Smith, Michal Bukovskรฝ, Michel Suignard, Mikaรซl Geljiฤ, Nikita Skovoroda, Noah Levitt, Peter Occil, Philip Jรคgenstedt, Philippe Ombredanne, Prayag Verma, Rimas Miseviฤius, Robert Kieffer, Rodney Rehm, Roy Fielding, Ryan Sleevi, Sam Ruby, Sam Sneddon, Santiago M. Mola, Sebastian Mayr, Shannon Booth, Simon Pieters, Simon Sapin, Steven Vachon, Stuart Cook, Sven Uhlig, Tab Atkins, ๅ้ๅๅฒ (Takeshi Yoshino), Tantek รelik, Tiancheng "Timothy" Gu, Tim Berners-Lee, ็ฐกๅ ๅบญ (Tim Guan-tin Chien), Titi_Alone, Tomek Wytrฤbowicz, Trevor Rowbotham, Tristan Seligmann, Valentin Gosu, Vyacheslav Matva, Wei Wang, Wolf Lammen, ๅฑฑๅฒธๅๅฉ (Yamagishi Kazutoshi), Yongsheng Zhang, ๆ็ฌใใ (Yui Naruse), ๊ทธ๋ฆฌ๊ณ zealousidealroll ์ฌ๋ฌ๋ถ๊ป ์ง์ฌ์ผ๋ก ๊ฐ์ฌ๋๋ฆฝ๋๋ค!
์ด ํ์ค์ Anne van Kesteren (Apple, annevk@annevk.nl)์ด ์์ฑํ์ต๋๋ค.
์ง์ ์ฌ์ฐ๊ถ
Copyright ยฉ WHATWG (Apple, Google, Mozilla, Microsoft). ์ด ์ ์๋ฌผ์ ํฌ๋ฆฌ์์ดํฐ๋ธ ์ปค๋จผ์ฆ ์ ์์ ํ์ 4.0 ๊ตญ์ ๋ผ์ด์ ์ค์ ๋ฐ๋ผ ๋ผ์ด์ ์ค๊ฐ ๋ถ์ฌ๋ฉ๋๋ค. ์์ค ์ฝ๋์ ํฌํจ๋ ๋ถ๋ถ์ ๋ํด์๋, ํด๋น ๋ถ๋ถ์ BSD 3-Clause ๋ผ์ด์ ์ค์ ๋ฐ๋ผ ์์ค ์ฝ๋์ ๋ผ์ด์ ์ค๊ฐ ๋ถ์ฌ๋ฉ๋๋ค.
์ด ๋ฌธ์๋ ํํ ํ์ค(Living Standard)์ ๋๋ค. ํนํ ์ฌ์ฌ ๋ฒ์ ์ ๊ด์ฌ์ด ์๋ค๋ฉด ํํ ํ์ค ์ฌ์ฌ ์ด์์ ์ฐธ๊ณ ํ์ญ์์ค.