URL 인코딩

URL 인코딩(URL encoding)은 URL의 구성 요소에 포함되는 문자나 데이터를 안전하게 표현하기 위해 특정 바이트를 문자 시퀀스로 변환하는 방법을 가리킨다. 가장 널리 쓰이는 형태는 % 뒤에 두 자리 16진수를 붙이는 퍼센트 인코딩(percent-encoding)이다. URL은...

분류URI·URL 문자 인코딩
정식 명칭퍼센트 인코딩
주요 용도URL 구성 요소의 바이트 안전 표현
관련 기술World Wide Web, HTML, HTTP, 웹 브라우저
관련 명세WHATWG URL Standard

URL 인코딩(URL encoding)은 URL의 구성 요소에 포함되는 문자나 데이터를 안전하게 표현하기 위해 특정 바이트를 문자 시퀀스로 변환하는 방법을 가리킨다. 가장 널리 쓰이는 형태는 % 뒤에 두 자리 16진수를 붙이는 퍼센트 인코딩(percent-encoding)이다. URL은 자원의 위치와 매개변수를 표현하는 동시에 구문 구분자를 사용하므로 데이터 자체와 구분자를 구별해야 한다.

URI 구문에서 /, ?, #, &와 같은 문자는 위치에 따라 특별한 의미를 갖는다. 이들이 데이터로 등장할 때에는 올바른 구성 요소 규칙에 따라 인코딩해야 한다. URL 전체를 하나의 규칙으로 일괄 처리하면 구분자로 쓰여야 할 문자가 데이터로 바뀌거나 데이터가 잘못 분리될 수 있다.

국제 문자와 공백 등의 인코딩에는 문자에서 바이트로 변환하는 단계가 관여한다. 현대 웹 플랫폼에서는 UTF-8이 일반적인 기반이며, 퍼센트 인코딩은 변환된 각 바이트를 %HH 형식으로 나타낸다. application/x-www-form-urlencoded 형식에서는 공백을 +로 표현하는 규칙이 적용되는 등 URL 경로의 인코딩과 다른 동작이 존재한다.

웹에서 입력 양식을 제출하거나 API 요청의 질의 문자열을 만들 때에는 URL과 URLSearchParams, encodeURIComponent 등의 인터페이스를 사용할 수 있다. 이 도구들은 비슷한 목적을 갖지만 인코딩 대상과 세부 규칙이 같지는 않다. 특히 질의 키와 값, 경로 세그먼트, 프래그먼트의 처리 범위를 명확히 구별해야 한다.

퍼센트 인코딩을 여러 번 적용하거나 예상하지 못한 단계에서 디코딩하면 경로 순회, 필터 우회 및 서명 검증 오류가 발생할 수 있다. 따라서 URL 파싱과 정규화, 권한 검사는 같은 기준으로 이루어져야 한다. URI의 일반 구문은 RFC 3986에서 다루며 브라우저의 실제 URL 처리 절차는 WHATWG URL Standard에서 자세히 정의한다.[1]

기본 개념

퍼센트 인코딩

예약 문자

문자와 바이트

UTF-8

16진수 인코딩

국제 문자

구성 요소별 인코딩

경로

질의

프래그먼트

호스트

폼 인코딩

application/x-www-form-urlencoded

공백 처리

웹 API

URLSearchParams

encodeURIComponent

보안과 호환성

다중 인코딩

정규화

경로 검증

관련 문서

  1. WHATWG URL Standard ↩