2023. 3. 29. 22:19ㆍCS
URL 인코딩 (또는 퍼센트 인코딩)은
특수 문자와 기타 예약된 문자들을 웹 주소 (URL)에서
안전하게 표현하기 위해 사용되는 방법입니다.
이 방식은 일반적으로 웹 주소의 쿼리 문자열 부분에서 문자 인코딩을 위해 사용됩니다.
URL 인코딩은 다음과 같은 과정을 포함합니다:
- 대상 문자열을 인코딩할 때, 각 문자를 해당 문자의 ASCII 코드 값으로 나타냅니다.
- 특수 문자와 예약된 문자는 '%' 기호 뒤에 16진수 값으로 변환됩니다.
예를 들어 공백 문자는 '%20'으로 인코딩되고, '#'은 '%23'으로 인코딩 됩니다. - URL에 안전한 문자들은 변환되지 않고 그대로 사용됩니다. 이러한 문자들은 알파벳 (A-Z, a-z), 숫자 (0-9), 그리고 일부 특수 문자 (-, _,., ~) 등입니다.
URL 인코딩의 주요 목적은 웹 주소에서 사용되는 문자열이
웹 서버와 클라이언트 간에 안전하게 전송될 수 있도록 하는 것입니다.
이를 통해 클라이언트와 서버는 문자열의 원래 형태를 잃지 않고, 데이터를 정확하게 처리할 수 있습니다.
예를 들어, 사용자가 검색어
"안녕하세요! 어떻게 지내세요?"
를 입력하면
웹 브라우저는 이 문자열을 URL 인코딩하여 다음과 같이 변환합니다.
"안녕하세요!%20어떻게%20지내세요%3F"
이렇게 변환된 문자열은 웹 서버로 전송되어,
서버는 이를 디코딩하여 원래의 문자열로 복원할 수 있습니다.
문자열이 인코딩 되지 않으면 안전하지 않은 경우?
예시를 보자.
만약 사용자가 "C# 프로그래밍"이라는 검색어로 구글링 한다고 해보자.
이를 URL 인코딩하지 않고 그대로 URL에 포함시키면 다음과 같은 형태의 웹 주소가 생성됩니다.
https://www.google.com/search?q=C# 프로그래밍
이때, '#' 문자는 URL에서 fragment identifier로 사용되는 예약된 문자입니다.
따라서 웹 서버는 '#' 이후의 문자들을 무시하고, 실제로는 "C"라는 검색어만을 인식하게 됩니다.
이러한 문제를 해결하기 위해 URL 인코딩을 사용하면
'#' 문자가 '%23'으로 대체되어 웹 주소는 다음과 같이 변환됩니다.
https://google.com/search?q=C%23%20%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D
이렇게 변환된 웹 주소는 웹 서버에서 정확하게 해석되어,
사용자가 원하는 검색 결과를 얻을 수 있습니다.
이처럼 인코딩 되지 않은 문자열은 예약된 문자와 특수 문자 때문에
웹 주소가 손상되거나 웹 서버에서 잘못 해석되는 문제가 발생할 수 있습니다.
이러한 이유로 URL 인코딩은 웹 주소에서 문자열을 안전하게 전송하는 데 필수적인 방법입니다.
Fragment Identifier 란?
위에서 '#'은 Fragment Identifier로 사용되는 예약된 문자라는 말을 했습니다.
이 Fragment Identifer 란 웹 페이지 내에서 특정 위치나 섹션을 가리키는 데 사용됩니다.
브라우저는 이 식별자를 사용하여 웹 페이지를 불러온 후 자동으로 해당 위치나 섹션으로 스크롤합니다.
다음 예시를 보겠습니다.
https://en.wikipedia.org/wiki/Coffee
https://en.wikipedia.org/wiki/Coffee#History
위 두 URL 은 같은 페이지에 대한 URL이지만
첫 번째 URL은 커서의 위치가 최상단에 있고,
두 번째 URL은 커서의 위치가 "History"에 맞춰져 있는 것을 확인할 수 있습니다.
'CS' 카테고리의 다른 글
프로토콜 스택: 웹 브라우저와 운영체제 간의 통신 이해하기 (0) | 2023.04.02 |
---|---|
도커란? docker? (0) | 2023.03.31 |
DNS란? eTLD란? (0) | 2023.03.28 |
데이터베이스(Database) 란? (0) | 2023.03.22 |
DNS Round Rrobin 이란? (2) | 2023.03.21 |