URI (Uniform Resource Identifier)
- 리소스를 식별하는 통합된 방법
- 인터넷 상의 자원을 식별하는 문자열
- 웹 페이지, 이미지, 동영상 등 다양한 자원을 포함한다.
- 비유 : 사람을 식별하는 모든 정보 (이름, 주소, 주민번호 등)
- 예시 :
http://www.example.com/index.html
URL (Uniform Resource Locator)
- URI의 하위 집합
- 자원의 위치와 접근 방법을 명시적으로 나타낸다.
- 프로토콜, 호스트, 경로 등을 포함한다.
- 비유 : 사람을 찾아가는 방법 (집 주소, 전화번호 등)
- 예시 :
https://www.google.com/search?q=URI
URN (Uniform Resource Name)
- URI의 하위 집합
- 자원의 이름만을 나타낸다.
- 위치나 접근 방법은 포함하지 않는다.
- 비유 : 사람의 이름
- 예시 :
urn:isbn:978-0-321-74713-2
URI 인코딩과 디코딩
URI 인코딩
- URI에서 사용할 수 없는 문자를 16진수 코드의 형태인 ‘%XX’로 변환하는 과정
- 웹 브라우저와 서버 간에 데이터를 안전하고 정확하게 전송하기 위해 필요하다.
- 대표적인 예약어
- ’ ‘, ‘?’, ‘&’, ‘=’, ‘#’, ‘+’, ‘/’
- 이외에도 많이 존재한다.
- 비예약 문자는 그대로 유지된다.
- 예약 문자는 ‘%XX’ 형태로 변환된다.
- 공백 문자는 ‘+’ 또는 ‘%20’으로 변환된다.
- 한글은 유니코드 문자 코드를 사용하여 ‘%XX’ 형태로 변환된다.
URI 디코당
- 인코딩된 URI를 다시 원래 문자로 변환하는 과정
- 웹 서버는 요청받은 URI를 디코딩하여 해당하는 리소스를 찾고 사용자에게 제공한다.
- ‘%XX’ 형태의 16진수 코드를 원래 문자로 변환한다.
웹 브라우저 요청 흐름
- 예시 :
https://sangwon0724.github.io/posts/spring-jpa-028/#q-type
- 사용자가 웹 브라우저에 URL을 입력한다.
- 웹 브라우저는 URL에 포함된 도메인 이름을 IP 주소로 변환하기 위해 DNS 서버에 쿼리를 전송한다.
- DNS 서버는 도메인 이름에 해당하는 IP 주소를 반환한다.
- 웹 브라우저는 웹 서버에 HTTP 요청 메시지를 감싼 패킷을 생성해서 전달한다.
- TCP/IP 계층에서 3-way handshake 과정을 통해 웹 서버와 연결된 후 메시지를 전달하는 과정을 거친다.
- 웹 서버는 HTTP 응답 메시지를 감싼 패킷을 생성해서 웹 브라우저로 전송한다.
- HTTP 요청 메시지에 포함된 정보
- 요청 메서드 (GET, POST, PUT, DELETE 등)
- 요청 URL
- HTTP 버전
- 헤더 정보 (사용자 에이전트, 쿠키 등)
- HTTP 응답 메시지에 포함된 정보
- 응답 코드 (200 OK, 404 Not Found 등)
- 응답 메시지
- HTTP 버전
- 헤더 정보 (콘텐츠 유형, 콘텐츠 길이 등)
- 본문 (HTML, CSS, JavaScript, 이미지 등)