HyperText Transfer Protocol
- HTML과 같은 하이퍼미디어 문서를 전송하기 위한 애플리케이션 계층 프로토콜
웹 브라우저를 사용하는 유저와 같은 최종 사용자에게 TCP/IP 환경에서 정보를 주고받을 수 있게 해주고 의미 있는 데이터들을 유저들에게 전달하게 해준다.
- SMTP / FTP / SSH / HTTP 등...
POST /albums HTTP/1.1 - 메소드 / 요청 주소 / HTTP 버전
Host: localhost:9000
User-Agent: insomnia/2022.5.1
Content-Type: application/json - JSON / TEXT 등 리소스의 media type
Accept: */*
Content-Length: 81 - 개체 본문(Body)의 크기 byte
{
"id": "4",
"title": "Test Title",
"artist": "Test Artist",
"price": 49.99
}
브라우저에 웹 사이트 주소를 입력하거나 로그인을 하면 위 HTTP 메시지 형식으로 해당 웹 사이트에 HTTP 요청을 보내게 된다.
웹 사이트의 IP 주소는 DNS 서버를 통해 알 수 있다.
애플리케이션 계층과 전송 계층 사이에 존재하며 하위 계층에서 어떤 방식으로 데이터가 전달되는지 몰라도 쉽게 네트워크 프로그래밍을 할 수 있도록 도와주는 라이브러리이다.
- 네트워크 통신을 이용한 데이터 교환 기법
Socket 연결을 통해 클라이언트-서버 간 네트워크 통신이 가능해졌으면 HTTP 메시지를 전송할 수 있게 된다.
HTTP 프로토콜은 TCP 위에서 동작하는데 TCP의 특징은 다음과 같다.
1. 연결 지향
2. 데이터 신뢰성 보장
- TCP를 통해 전달되는 패킷의 헤더는 위와 같다.
- Flags 내부에 SYN와 FIN 비트가 있다.
- TCP 헤더에 Source Port와 Destinaion Port에 값을 넣어준다.
연결 지향의 특징을 가지는 TCP 통신은 데이터를 주고받기 전 3-way handshake를 통해 상대방과의 연결을 확립한다.
- Client -> Server
Sequence Number를 x로 설정하고 SYN bit가 1인 패킷을 보낸다.- Server -> Client
ACK Number가 (x + 1)이고 Sequence Number는 y, SYN bit가 1인 패킷을 보낸다.- Client -> Server
ACK Number가 (y + 1)인 패킷을 보낸다.
연결 과정을 마친 후 유저의 데이터(HTTP 메시지)는 전송 계층에서 TCP 헤더에 Source Port와 Destination Port에 알맞은 값을 넣어주고 네트워크 계층에서 IPv4 헤더에 Source IP와 Destination IP에 알맞은 값을 넣어준 후 서버에 전달된다.
유저의 데이터를 모두 정상적으로 보낸 것을 확인하면 클라이언트와 서버 간 연결을 종료하는데 이때는 4-way handshake 과정을 거치며 연결을 끊게 된다. 3-way handshake와 비슷한 방식으로 과정이 진행된다.
서버는 클라이언트의 요청에 맞는 행동을 한 후 응답을 보낸다.
HTTP/1.1 201 Created
Content-Type: application/json; charset=utf-8
Date: Mon, 29 Aug 2022 11:00:58 GMT
Content-Length: 93