아래와 같은 URL 을 주소창에 입력 하고, Enter 를 쳤다고 치자.
https://www.google.com:443/search?q=hello&hl=ko
이럴경우 무슨일이 일어날까?
1. 서버를 찾는다.
정확히는 DNS 조회를 한다. DNS 서버에 등록된 구글 서버 IP 를 알아내야지 HTTP 통신을 할수 있기 때문.
해당 IP 주소를 반환 받고, HTTPS 의 기본 PORT 는 443 으로, 생략하더라도 기본적으로 받아진다.
그후 HTTP 요청 메시지를 생성 한다.
2. HTTP 요청 메시지 생성
GET /search?q=hello&hl=ko HTTP/1.1
Host: www.google.com
다른 부가적인 정보가 더 있지만, 위와 같이 생성해준다고 한다.
이때부터의 순서는 이렇다
- 1. 웹 브라우저가 HTTP 메시지 생성
- 2. SOCKET 라이브러리를 통해 전달
syn, syn + ack, ack
A: TCP/IP 연결 (IP, PORT)
B: 데이터 전달
- 3. TCP/IP 패킷 생성, HTTP 메시지 포함
아래와 같은 형태의 패킷을 생성
-------------------------------------------------------------------------------------------------------------------------------------------------------------
출발지 IP, PORT
목적지 IP, PORT
GET /search?q=hello&hl=ko HTTP/1.1
Host: www.google.com
-------------------------------------------------------------------------------------------------------------------------------------------------------------
- 4. 인터넷을 통해 보낼 서버로 전송
3. 요청한 서버로의 패킷 전송
구글서버에 요청 패킷이 도착하게 되면, 구글 서버는 TCP/IP 패킷을 받아서 내용물을 확인하고,
HTTP 메시지를 해석한다. ( " /search?q=hello&hl=ko HTTP/1.1 " )
해석이 끝나면 데이터 요청 메시지에 해당하는 데이터를 찾는다.
데이터를 찾게 되면 구글 서버는 응답 메시지를 생성한다
HTTP/1.1 200 OK
Content-Type : text/html;charset=UTF-8
Content-Length: 3423
<html>
<body>...</body>
</html>
이후 위와 같은 과정으로 TCP/IP 패킷을 씌우고 응답 패킷을 발송하게 된다.
'CS > HTTP' 카테고리의 다른 글
HTTP API 를 만들어보자 - URI 설계 (0) | 2022.09.06 |
---|---|
HTTP 메시지 (0) | 2022.09.06 |
비 연결성 ( Connectionless ) (0) | 2022.09.05 |
무상태 프로토콜 ( Stateless ) 지향 (0) | 2022.09.05 |
HTTP 란 무엇을 의미하는가? (0) | 2022.09.05 |