
이 글은 'HTTP 완벽 가이드' 책을 읽고 정리한 내용입니다.
URL(Uniform Resource Locator) 은 인터넷의 리소스를 가리키는 표준이름으로 리소스의 식별자 역할을 한다.
- URI의 한 종류로 다른 하나는 URN이 있다.
URL은 다음과 같은 구조로 나뉜다.
- "스킴://서버위치/경로"
- http://www.codejuggler.com/index.html
- 스킴(http://) : 웹 클라이언트가 리소스에 어떻게 접근하는지 알려준다. (HTTP, FTP 와 같은 프로토콜)
- 서버의 위치(www.mywebpage.com) : 웹 클라이언트가 리소스가 어디에 호스팅 되어 있는지 알려준다.
- 리소스의 경로(/index.html) : 웹 서버에서 요청받은 리소스가 무엇인지 알려준다.
URL은 HTTP 프로토콜이 아닌 다른 프로토콜을 사용할 수 있다.
<스킴>://<사용자 이름>:<비밀번호>@<호스트>:<포트>/<경로>;<파라미터>?<질의>#<프래그먼트>
1. 스킴
4. 경로
5. 파라미터
Q. HTTP에서 보통 경로 뒤에 "?" 이후 쿼리 파라미터 형식으로 요청을 하지 않나?
A. 리소스 자체에 접근하는데 필요한 정보이며 쿼리 파라미터는 리소스 형식의 범위를 좁히기 위한 것으로 6. 질의 문자열에서 설명한다.
6. 질의 문자열
API 개발할 때 주로 사용한다. 보통 검색 기능을 구현할 때 많이 사용하는데 쿼리 파라미터 형식으로 검색 조건에 따른 검색어 입력 값을 받아 해당 조건에 맞는 데이터를 select해 결과를 반환해준다.
7. 프래그먼트

웹 클라이언트는 몇몇 단축 URL을 인식하고 사용하는데 크게 두가지 기술이 있다.
URL을 표기하는 방법은 크게 두가지로 나뉜다.\
이는 상대 경로, 절대 경로를 생각하면 되는데 상대 경로란 현재 위치에서의 대상 위치를 나타내는 것이고 절대 경로란 현재 위치와 상관없이 대상 위치를 전부 나타내는 것이다.
<HTML>
<HEAD><TITLE>Joe's Tools</TITLE></HEAD>
<BODY>
...
<P>Joe's ~~ <A HREF="./hammers.html"></A> hammers</P>
</BODY>
</HTML>
html 코드에서 A 태그의 URL이 경로 부분만 표현된 것을 알 수 있다. 이렇게 상대 URL로 표현할 경우 기저 URL이 필요하다.
<BASE>HTML 태그를 기술할 수 있다.URL을 파싱하는 것에 불과하지만,. 컴포넌트 단위로 분리한다는 점에서 이 작업을 'URL 분해하기'라고 부르기도한다.

위에서 언급한 기저 URL을 가져오는 방법에 따라서 판단하고 여러가지 컴포넌트(파라미터, 질의 등)의 여부 확인 후 새로운 절대 URL로 변환하는 과정을 표현한 것이다.
=> 즉, 상대 URL을 받았을 때 일련의 과정을 거처 절대 URL로 변환
웹 브라우저에서 특정 서비스에 접근하기 위해 URL을 치는 과정에서 자동완성되는 경험을 해본 적이 있을 것이다. 이는 URL 확장 기능 덕분이다.
1. 호스트 명 확장
2. 히스토리 확장
모든 프로토콜이 데이터를 전송하기 위해 서로 다른 장치를 가지고 있기 때문에 안전하게 전송될 수 있도록 URL을 설계하는 것이 중요했다. 안전한 전송이란 정보가 유실될 위험 없이 전송할 수 있는 것을 의미한다.
URL은 다음과 같은 인코딩 규칙을 통해 안전성을 보장한다.
URL은 많은 컴퓨터가 그러는 것처럼 US-ASCII 문자 집합을 사용
문제점
안전한 문자 집합을 이용하는 경우 그 표현의 한계를 넘기 위해, URL에 있는 안전하지 않은 문자들을 표현할 수 있는 인코딩 방식이 고안되었다. '%'와 같이 안전하지 않은 문자를 ASCII 코드로 표현되는 두 개의 16진수 숫자로 이루어진 이스케이프 문자로 바꾼다.
URL 내에서 몇몇 문자는 특별한 의미로 예약되어 있기 때문에 다른 용도로 사용하기 위해 그 전에 반드시 인코딩을 해야한다. 예시는 다음과 같다.
