프로그래밍 끄적끄적
[HTTP] URI와 웹 브라우저 요청 흐름 본문
🌳 URI (Uniform Resource Identifier)
🍃 URI, URL, URN
URI는 로케이터(locator), 이름(name) 또는 둘 다 추가로 분류될 수 있다. URL은 리소스의 위치, URN은 리소스에 이름을 부여한 것이다. 위치는 변할 수 있지만 이름은 변하지 않는다. (예. 어떤 책의 isbn URN) 하지만 URN 만을 가지고 실제 리소스를 찾을 수 있는 방법이 보편화 되지 않았기 때문에 잘 사용하지 않는다.
URI 뜻
▪ Uniform: 리소스를 식별하는 통일된 방식
▪ Resource: 자원, URI로 식별할 수 있는 모든 것
▪ Identifier: 다른 항목과 구분하는데 필요한 정보
🍃 URL
URL은 아래와 같은 구조를 가진다.
scheme://[userinfo@]host[:port][/path][?query][#fragment]
1. Scheme
▪ 어떤 방식으로 자원에 접근할 것인가에 대한 약속 규칙인 프로토콜을 주로 사용 (ex. http, https, ftp)
▪ https는 http에 보안이 추가된 것
2. userinfo
▪ URL에 사용자 정보를 포함할 때 사용하나, 거의 사용하지 않음
3. host
▪ 호스트명 (도메인명 또는 IP 주소를 직접 입력)
4. port
▪ 포트 (일반적으로 생략하며, 생략시 http는 80, https는 443)
5. path
▪ 리소스가 있는 경로로, 계층적 구조로 되어 있음 (ex. /members/100)
6. query
▪ key=value 형태로 되어있음
▪ ? 로 시작하고 & 으로 추가가 가능함
▪ query parameter, query string이라고도 불림
7. fragment
▪ html 내부 북마크 등에서 사용함 (서버로 전송되는 정보 X)
🌳 웹 브라우저 요청 흐름
🍃 클라이언트 -> 서버 (HTTP 요청 메시지)
https://www.google.com/serach?q=hello&hl=ko 라는 URL 주소를 요청한다고 가정하자.
웹 브라우저는 먼저 호스트명(www.google.com)과 포트(생략되었지만 https이므로 443) 정보를 통해 DNS에 조회하여 IP 주소를 알아낸다. 이후 아래와 같은 HTTP 요청 메시지를 생성한다.
GET /search?q=hello&hl=ko HTTP/1.1
Host: www.google.com
웹 브라우저가 HTTP 메시지를 생성하고 나면, 3 hand shake(SYN, SYN+AKC, ACK)를 통해 서버와 연결한 후, SOCKET 라이브러리를 통해 TCP/IP 계층에 전달한다. IP 주소와 PORT 정보가 담긴 헤더를 HTTP 메시지에 붙이고 요청 패킷을 서버에 전송한다.
🍃 서버 -> 클라이언트 (HTTP 응답 메시지)
요청 패킷이 서버에게 도착하면, 패킷들이 순서에 맞게 누락되지 않고 잘 왔는지 확인 후 헤더들을 떼어 버리고 HTTP 메시지를 처리한다. 즉, path, query에 쓰여진 정보를 통해 클라이언트가 요청하는게 무엇인지 파악한 후 필요한 정보를 담아 아래와 같은 HTTP 응답 메시지를 만든다.
HTTP/1.1 200 OK
Content-Type: text/html;charset=UTF-8
Content-Length: 3423
<html>
<body> ... </body>
</html>
1. HTTP/1.1: HTTP 버전을 명시함
2. 응답 타입 (ex. 200 OK)
3. Content-Type: 데이터의 형식 정보를 넘김
4. Content-Length: 데이터의 길이
참고자료
https://www.inflearn.com/course/http-%EC%9B%B9-%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC/dashboard
'HTTP' 카테고리의 다른 글
[HTTP] HTTP 메서드 활용(2) (0) | 2021.11.09 |
---|---|
[HTTP] HTTP 메서드 활용(1) (0) | 2021.11.09 |
[HTTP] HTTP 메서드 (0) | 2021.11.09 |
[HTTP] HTTP 기본 (0) | 2021.11.03 |
[HTTP] 인터넷 네트워크 (IP, TCP, UDP, POPT, DNS) (0) | 2021.11.03 |