앞의 글을 읽으시면 이해에 도움이 됩니다.
2023.04.08 - [Computer Science/네트워크] - [네트워크] Application-Layer Protocols
1. HTTP란?
- HTTP는 HyperText Transfer Protocol의 약자로, application-layer의 대표적인 protocol입니다.
- HTTP는 서버 프로그램과 클라이언트 프로그램 두 개로 구현되어 잇습니다.
- 각기 다른 엔드 시스템에서 실행되는 두 개의 프로그램은 HTTP 메시지를 주고받음으로써 대화합니다.
- HTTP는 메시지의 구조와 어떻게 메시지를 교환해야 하는지를 정의하고 있습니다.
- 우리가 보는 웹 페이지는 object로 이루어져 있습니다. object는 이미지일 수도 있고, HTML 파일일 수도 있습니다.
- 대부분의 웹 페이지는 HTML file과 몇 가지의 관련된 object로 이루어져 있습니다.
- 이러한 object들은 URL을 통해서 접근되고, URL은 오브젝트가 있는 서버의 호스트 이름과 오브젝트의 경로로 구성됩니다.
- 따라서 HTTP는 웹 클라이언트가 웹 서버에세 웹 페이지를 요청하고, 서버가 어떻게 웹 페이지를 클라이언트에게 주는지 정의합니다.
- 이처럼 클라이언트는 HTTP를 통하여 서버에게 페이지에 있는 객체를 요청합니다.
- 그러면 서버는 이러한 HTTP 요청을 받아서, 객체를 포함하고 있는 HTTP 응답 메시지를 클라이언트에게 보냅니다.
- 아래 글에서는 HTTP의 다양한 속성에 대해 알아보겠습니다.
2. HTTP and TCP
- HTTP는 TCP를 사용합니다. 따라서 HTTP 클라이언트는 맨 처음 서버와 TCP connection을 연결해야 합니다. 앞선 글들에서 배운 것처럼 이때는 포트 번호 80번을 사용합니다.
- 한 번 TCP connection이 성사되면, 클라이언트와 서버는 TCP를 통해 서로에게 접속합니다. (참고로 이 모든 과정은 socket interface로 작동합니다.)
- TCP의 Reliable Data Transfer 덕분에 HTTP는 네트워크 안에서 데이터를 잃을 걱정도, TCP가 어떻게 손상된 데이터를 복구하는지에 대해 알 필요가 없습니다.
- 왜냐면 그러한 역할은 TCP와 그 하위 계층의 역할이기 때문입니다.
- HTTP는 객체를 포함하여 전달합니다. 그러면 객체는 한두 가지가 아닐 텐데 그때마다 TCP connections을 만들어서 보내야 할까요? 아니면 어떻게 해야 할까요?
- 자세한 내용은 다음 글에서 쓰겠습니다.
3. Stateless
- HTTP를 사용하는 서버는 클라이언트에게 요청된 파일 혹은 객체를 전송하는데, 이때 클라이언트의 어떠한 정보도 저장하지 않습니다.
- 따라서 클라이언트가 몇 초 간격으로 동일한 객체를 똑같이 요청한다면, 서버는 클라이언트에게 그 객체를 얼마 전에 받아갔다고 말하는 것 대신에, 이전에 무엇을 했는지 까먹은 채로 다시 객체를 전달합니다.
- 왜냐하면 HTTP 서버는 클라이언트의 어떠한 정보도 유지하지 않기 때문에, HTTP를 Stateless Protocol이라고 합니다.
참고
경북대학교 컴퓨터학부 COMP0414-001 컴퓨터 망 수업
Computer Networking: A Top Down Approach / James F. Kurose, Keith W. Ross 저 / PEARSON / 2021년
Chat GPT, Bing AI
다음 글에서는 HTTP - Non-Persistent에 대해 알아보겠습니다.
2023.04.09 - [Computer Science/네트워크] - [네트워크] HTTP - Non-Persistent
감사합니다.
지적 환영합니다.
'Computer Science > 네트워크' 카테고리의 다른 글
[네트워크] HTTP - Persistent (0) | 2023.04.09 |
---|---|
[네트워크] HTTP - Non-Persistent (0) | 2023.04.09 |
[네트워크] Application-Layer Protocols (0) | 2023.04.08 |
[네트워크] Transport Protocol(TCP, UDP) Services (0) | 2023.04.08 |
[네트워크] Transport-Layer Protocols for Application (0) | 2023.04.08 |