URI
NOTE
URI (통합 자원 식별자) = URL + URN
웹 기술에서 사용하는 논리적 물리적 리소스를 식별하는 고유한 문자열 시퀀스
•
Uniform
◦
리소스 식별하는 통일된 방식
•
Resource
◦
자원 = URI로 식별할 수 있는 모든 것 (제한X)
◦
웹 브라우저 HTML, 실시간 교통정보 등 모든 정보를 말함
•
Identifier
◦
다른 항목과 구분하는데 필요한 정보
URL, URN
NOTE
위치(URL)는 변할 수 있지만 이름(URN)은 변하지 않는다
URL(위치)는 변할 수 있다.
URN(이름)은 변하지 않는다.
•
URN → ISBN(어떤 책의 고유번호)
•
URN 이름만으로 실제 리소스를 찾을 수 있는 방법이 보편화되지 않음
•
사실 그렇게 중요한건 아니고 URI = URL 로 이해하는게 좋다
두 주소 모두 index.html을 가리키고 있다
•
1번째 주소
◦
웹 서버의 실제 파일 위치를 나타내는 주소 (URI, URL)
•
2번째 주소
◦
index라는 파일이 웹 서버에 존재하지 않으므로 URL은 아니다.
◦
하지만 서버 내부에서 이를 처리하여 결국 INDEX.HTML을 가리키기 때문에 URI라고 볼 수 있다.
URL 분석
NOTE
https://www.google.com/search?q=hello&hl=ko을 분석해보자!
scheme:[//[userinfo@]host[:port]][/path][?query][#fragment]
Java
복사
위의 구조형식
•
scheme (프로토콜)
https를 의미한다!
◦
어떤 방식으로 자원에 접근할 것인가에 관한 클라이언트 서버간 약속 규칙
•
userinfo
사용자 정보(거의 안씀)
•
host
도메인 명, IP주소
•
port
접속포트
•
path
리소스 경로
•
query
웹 서버에 제공하는 파라미터
•
fragment
HTML 내부 북마크 등에 사용
웹 브라우저 요청 흐름
1. 웹 브라우저에 URL 입력
NOTE
2. DNS 조회, HTTP 요청 메시지 생성
NOTE
•
DNS 조회
•
HTTP 요청 메시지 생성
http 메서드/path, query string/HTTP 버전/호스트(도메인명)
3. 3-way-handshake(SOCKET 라이브러리), 7→4계층 이동
NOTE
TCP 전송을 위해 3-way handshake로 클라이언트-서버 연결!
캡슐화/역캡슐화에서 배운 데이터 계층에 따른 PDU 구조
•
SOCKET 라이브러리를 통해 헤더 부분이 IP, PORT 정보를 넣어 3way-handshake로 웹브라우저(클라이언트) 와 웹서버(서버)를 연결한다
•
연결이되면 HTTP 메시지를 TCP/IP 계층에 전달한다.
4. 4계층 패킷 생성
NOTE
TCP에서 PORT 등의 데이터를 넣어주면서 TCP/IP 패킷을 생성한다!
5. 클라이언트 → 서버, 요청 패킷 전달
NOTE
수 많은 노드를 거쳐 웹 서버에 패킷을 전달한다. (노드, 라우터를 통함)
다음과 같이 많은 라우터와 노드들을 거쳐서 데이터 전송..
6. 서버에서 HTTP 응답 메시지 생성
NOTE
웹 서버(서버)에 도착한 패킷의 헤더 부분은 버리고 HTTP 메시지(데이터 부분)을 서버가 해석하여 HTTP 응답 메시지를 생성
7. 서버 → 클라이언트, 응답 메시지 생성
NOTE
헤더 부분에 출발지(IP, PORT), 목적지(IP, PORT) 정보 등을 담고 데이터 부분에 HTTP 응답 메시지를 담아 만든 응답패킷을 웹 브라우저(클라이언트)에 전달
8. 웹 브라우저 HTML 렌더링
NOTE
웹 브라우저(클라이언트)가 웹 서버로부터 받은 응답 패킷에서 헤더 부분을 버리고 HTTP
응답 메시지의 데이터(HTML)을 렌더링하여 화면에 뿌려준다