HTTP
HTTP란 HyperText Transfer Protocol의 약자로, 텍스트 기반의 통신 규약으로 인터넷에서 데이터를 주고받을 수 있는 프로토콜이다. 상태 정보를 저장하지 않는 Stateless(무상태)의 특징과 클라이언트의 요청에 맞는 응답을 보낸 후 연결을 끊는 Connectionless(비연결성)의 특징을 가지고 있다. 모든 프로그램이 이 규약에 맞춰 개발해서 서로 정보를 교환할 수 있게 되었다.
동작
사용자(클라이언트)가 브라우저를 통해서 어떠한 서비스를 URL을 통하거나 다른 곳을 통해서 요청(request)을 하면 서버에서는 해당 요청사항에 맞는 결과를 찾아 사용자에게 응답(response)하는 형태로 동작한다.
- 요청 : client -> server
- 응답 : server -> client
HTML 문서만이 HTTP 통신을 위한 유일한 정보 문서는 아니다. Plain text로부터 JSON 데이터 및 XML과 같은 형태의 정보도 주고 받을 수 있으며, 보통은 클라이언트가 어떠한 정보를 HTML 형태로 받고 싶은지, JSON 형태로 받고 싶은지 명시해주는 경우가 많다.
특징
- HTTP 메시지는 HTTP 서버와 HTTP 클라이언트에 의해 해석이 된다.
- TCP/IP를 이용하는 응용 프로토콜이다.
- 컴퓨터와 컴퓨터간에 데이터를 전송할 수 있도록 하는 장치
- 인터넷이라는 거대한 통신망을 통해 원하는 정보를 주고 받는 기능을 이용하는 응용 프로토콜
- HTTP는 연결 상태를 유지하지 않는 비연결성 프로토콜이다.
- 이러한 단점을 해결하기 위해 Cookie와 Session이 등장했다.
- HTTP는 연결을 유지하지 않는 프로토콜이기 때문에 요청 및 방식으로 동작한다.

예시
- Server : 어떠한 자료에 대한 접근을 관리하는 네트워크 상의 시스템
(요청에 대한 응답을 보내준다) - Client : 그 자료에 접근할 수 있는 프로그램
(ex 웹 브라우저, 핸드폰 어플리케이션 등...)
클라이언트 프로그램에서 사용자가 회원가입을 시도하게 되면, 서버로 회원정보를 보내게 되고 서버는 회원 정보를 저장해주기도 한다. 이 과정에서 클라이언트와 서버 간의 교류가 HTTP라는 규약을 이용하여 발생하게 된다.
Request (요청)
클라이언트가 서버에서 연락하는 것을 요청이라고 한다. 요청을 보낼 땐 요청에 대한 정보를 담아 서버로 보낸다.
예시
서버가 주문서를 받아 클라이언트가 어떤 것을 원하는지 파악할 수 있게 한다. 이처럼 요청은 식당에서 주문서를 작성하는 것과 같다고 생각하자.
Request Method
클라이언트와 서버 사이에 이루어진 요청(Request)과 응답(Response) 데이터를 전송하는 방식을 일컫는다. 즉, 서버에 주어진 리소스에 수행하길 원하는 행동, 서버가 수행해야 할 동작을 지정하는 요청을 보내는 방법이다.
메소드명 | CRUD | 설명 |
GET | Read | 리소스 조회 |
POST | Create | 요청 데이터 처리, 주로 등록에 사용 됨 |
PUT | Update | 리소스를 대체(덮어쓰기) 대체 할 리소스가 없으면 생성 |
PATCH | - | 리소스 부분 변경 (PUT이 전체 변경, PATCH는 일부 변경) |
DELETE | Delete | 자료의 삭제를 요청할 때 |
Request HTTP 메시지 예시
GET https://eun-developer.tistory.com HTTP/1.1 // 시작줄
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) ... // 헤더
Upgrade-Insecure-Requests: 1
1. 시작줄
첫 줄은 메시지의 시작줄로 메서드 구조 버전으로 구성되어있다.
- GET : HTTP Method
- https://eun-developer.tistory.com : 사이트 주소
- HTTP/1.1 : HTTP 버전
2. 헤더
메시지의 두번째 줄부터는 헤더라고 일컫는다. 헤더는 요청에 대한 정보를 담고 있다.
User-Agent, Upgrade-Insecure-Requests 등 헤더에 해당 되며, 종류는 매우 많다.
3. 본문
본문은 요청을 할 때 함께 보낼 데이터를 담는 부분이다. 헤더에서 한 줄 띄워진 위치에 자리해있으며, 현재 예시에는 단순히 주소로만 요청을 보내고 있고 따로 데이터를 담아 보내지 않기 때문에 본문이 비어있다.
Response
서버가 요청에 대한 답변을 클라이언트에게 보내는 것을 일컫는다. 즉, 응답이다.
Status Code (상태코드)
상태 코드에는 굉장히 많은 종류가 있다. 모두 숫자 세자리로 이루어져 있으며, 아래와 같이 크게 다섯 부류로 나눌 수 있다.
번호 | 상태 | 설명 |
1XX | 조건부 응답 (Information responses) |
요청을 받았으며 프로세스를 계속 진행한다. |
2XX | 성공 (Successful responses) |
클라이언트가 요청한 동작을 수신하여 이해했고, 승락했으며, 성공적으로 처리했음을 가르킨다. |
3XX | 리다이렉션 완료 (Redirection messages) |
클라이언트는 요청을 마치기 위해 추가 동작을 취해야 한다. |
4XX | 요청 오류 (Client error responses) |
클라이언트에 오류가 있음을 나타낸다. |
5XX | 서버 오류 (Server error responses) |
서버가 유효한 요청을 명백하게 수행하지 못했음을 나타낸다. |
Response HTTP 메시지 예시
HTTP/1.1 200 // 시작줄
Connection: keep-alive // 헤더
Content-Encoding: gzip Content-Length: 35653
Content-Type: text/html;
<!DOCTYPE html><html lang="ko" data-reactroot=""><head><title...
1. 시작줄
첫 줄은 버전 상태코드 상태 메시지로 구성되어 있다. 200은 성공적인 요청이었다는 뜻이다.
2. 헤더
메시지의 두번째 줄부터는 헤더라고 일컫는다. 헤더는 응답에 대한 정보를 담고 있다.
3. 본문
헤더에서 한 줄 띄어진 위치에 자리해있으며, 응답에는 대부분의 경우 본문이 있다. 보통 client가 필요한 데이터를 server로 요청하고 요청에 대한 처리 결과와 데이터를 응답 메시지에 담아 client로 보내주기 때문이다. 응답 메시지에 HTML이 담겨 있는걸 볼 수 있는데 해당 HTML을 받아 브라우저에 화면에 렌더링 한다.