URL(uniform resource locator)
: 인터넷 상에서의 리소스의 위치. 애플리케이션은 URL을 사용하여 정보에 쉽게 접근 가능.
- URI(Uniform Resource Identifier)의 부분집합으로 본다.
- 인터넷에 존재하는 어떤 리소스든지 가리킬 수 있다.
- 대충
스킴://서버위치/리소스경로
구조. e.g )https://www.github.com/hungry-jay?tab=repositories
URN : 리소스가 어디에 존재하든 상관없이 “이름만으로” 리소스 식별
- 이걸 사용하면 리소스의 위치가 바뀌어도 계속 URN으로 접근 가능
- 바꿔말하면 URL은 리소스의 위치가 바뀐다면 더이상 사용 불가
- URN을 지원하려면 많은 변화가 필요하므로 부담
URL의 구조
1
2
<스킴>://<사용자이름>:<비밀번호>@<호스트>:<포트>/<경로>;<파라미터>?<질의>#<프래그먼트>
http://joowon_son:1234@192.168.0.1:8080/index.html;page=1?key=value#abc
스킴: 어떤 프로토콜을 사용할지(http, ftp, smtp 등)
사용자 이름, 비밀번호: 몇몇 스킴에서는 이러한 credential을 사용
ssh -i ${key} ubuntu@${서버주소}
이러한 ssh cli를 생각해보면, key의 자리에 credential
호스트: IP 혹은 호스트명(리소스가 어디에 호스팅 되어있는지)
포트: 리소스를 호스팅하는 서버가 열어놓은 Port
경로: 리소스가 서버 어디에 있는지 가리킨다.
파라미터: 특정 스킴에서 입력 파라미터 기술 용도. key - value 쌍.
애플리케이션이 리소스에 접근할때 필요한 추가 정보(어떤 포트를 열었는지, 사용자 이름을 명시하는지 등)
e g)
http://www.abc.com/hammers;sale=false/index.html;graphics=true
- 여기서 두 경로조각(hammers, index.html)은 각 다른 파라미터를 가진다.
질의: 요청받을 리소스 형식의 범위를 좁히기 위해 애플리케이션에 parameter 전달 용도
- e.g)
?item = 1234&color=red
- e.g)
프래그먼트: 리소스 일부분 가리키는 이름
.html
같은 리소스에서, 보다 특정된 일부분을 가리킬 때- 일반적으로 http는 객체 전체를 다루기 때문에 프래그먼트 전달 X이고, 브라우저가 리소스의 일부를 보여줌.
상대 URL
: 리소스 위치 전체를 사용하지 않음. 기저(Base) URL 필요
- 상대 URL은 프래그먼트이거나 URL 일부
- e.g)
http://127.0.0.1:8000/index.html
에서 상대 URL로./main.html
을 가리키고 있다면, 절대 URL은http://127.0.0.1:8000/main.html
이 되는 것 - 장점 : 리소스 집합 경로를 바꾸더라도, 새로운 기저(base) URL에 의해 해석되기 때문에 변경에 용이
URL 확장
: 브라우저에 입력하고 있는데 자동 완성시켜주는 것. 이는 Proxy와 같은 다른 HTTP 애플리케이션 사용 시 다른 문제가 있을 수 있다고 함.
- 호스트 명 확장: naver를 입력하면 자동으로
www.
,.com
을 붙여 전체 URL을 만들어준다. - 히스토리 확장: URL 기록을 저장해 놓는 것. URL을 입력하면 그 입력된 URL 앞 글자들을 포함한 완결형태의 URL 선택하게 해줌.
URL 인코딩 규칙(안전하지 않은 문자)
- URL에는 출력되지 않은 문자(공백 등)이 포함될 수 없다.
- 영어와 이스케이프 문자(
\n
,\t
등) 포함 - 안전하지 않은 문자를 표현할 수 있는 인코딩 방식: 기호 %로 시작해, 두개의 16진수 숫자인 이스케이프 문자로 바꾼다.
http://www.abc.com/%20tools.html
- 문자 제한:
%
,/
,.
,?
등 몇 문자들은 예약어이므로, 사용하기 위해서는 인코딩 되어야한다. - 이외에도 안전하지 않거나 제한된 문자는 변환(인코딩)해야한다.
스킴
- http:하이퍼 텍스트 전송 프로토콜. 사용자 이름, 비밀번호가 없다
- https: 양 끝(client, server)에서 암호화와 복호화를 위해 SSL(secure socket layer)을 사용
- ftp: FTP 서버에 있는 파일을 내려받거나 올리기 위한 파일전송 프로토콜
- rtsp, rtspu: 실시간 스트리밍 프로토콜
- telnet: 대화형 서비스
- smtp: 이메일
Reference)
HTTP 완벽가이드