[CS] HTTP(Hyper Text Transfer Protocol)란?

HTTP(Hyper Text Transfer Protocol)란?
웹에서 정보를 주고 받기 위한 프로토콜을 말하는데, 한마디로 웹 브라우저(클라이언트)와 서버가 데이터를 주고 받는 통신 방법이다.
⚠️ 여기서 잠깐, 프로토콜에 대해 알고 싶다면?
[CS] 프로토콜(Protocol)이란? (Feat. OSI 7계층)
프로토콜(Protocol)이란? 기계(컴퓨터)끼리 데이터를 주고 받기 위한 규칙 / 약속 / 표준을 말한다.프로토콜은 어디에 쓰일까?분야예시 프로토콜설명웹HTTP, HTTPS브라우저 - 서버 통신파일 전
y-flm.tistory.com
HTTP의 특징 4가지
- 특징 ①: 클라이언트 - 서버 구조
클라이언트(브라우저)는 요청하는 쪽이고, 서버는 요청을 받아 응답하는 쪽이다.
HTTP는 이러한 클라이언트-서버 구조를 가지고 있다. - 특징 ②: 무상태(Stateless)
HTTP에서 서버는 클라이언트의 이전 요청 상태를 기억하지 않는다는 무상태의 특징을 가지고 있다.
그렇기 때문에 매번 요청할 때 마다 서버는 새로운 사람처럼 대응하고,
로그인 정보 같은 것을 유지하려면 Cookie, Session, Token 같은 걸 따로 사용해야한다. - 특징 ③: 텍스트 기반 프로토콜
사람이 읽을 수 있는 텍스트 형태로 구성되어 있으며, 개발자 도구 → 네트워크 탭에서 실제 요청/응답 내용을 확인할 수 있다. - 특징 ④: URL + Method 조합으로 동작
GET /users HTTP/1.1 와 같은 HTTP 요청 예시가 있다면,
여기서 GET은 무슨 동작을 할지 결정하는 메서드이고,
/users는 어떤 데이터를 요청할지에 대한 리소스 경로를 말하고 HTTP/1.1은 HTTP 버전을 말한다.
그럼 실제 HTTP의 요청/응답 구조는 어떻게 될까?
[HTTP 요청]
GET /products/123 HTTP/1.1
Host: www.example.com
User-Agent: Mozilla/5.0
Accept: text/html
- 무슨 동작인지 (GET)
- 요청할 리소스 경로 (/products/123)
- 요청자 정보 (User-Agent)
- 어떤 형식의 응답을 원하는지 (Accept)
[Method 종류]

* PUT과 PATCH의 차이점
구분 | PUT | PATCH |
의미 | 전체 자원 교체 | 일부 자원 수정 |
데이터 | 전체 데이터 필요 | 수정할 필드만 전달 |
동작 방식 | 기존 자원을 덮어씀 | 기존 자원을 부분 업데이트 |
멱등성 | 있음 | 있음 (대부분의 경우) |
사용 예시 | 유저 정보 전체 수정 | 유저 이메일만 수정 |
예시로는 아래와 같은 형식의 서버 데이터가 있다고 가정해보자.
{
"id": 1,
"name": "Alice",
"email": "alice@email.com",
"age": 25
}
PUT을 이용하여 요청을 보내면 아래와 같다.
PUT /users/1
Content-Type: application/json
{
"id": 1,
"name": "Alice B",
"email": "alice.b@email.com",
"age": 26
}
기존 데이터를 덮어씌우며, 만약 전달하지 않은 필드가 있다면 사라질 수 있다.
PATCH를 이용하여 요청을 보내면 아래와 같다.
PATCH /users/1
Content-Type: application/json
{
"age": 26
}
기존 데이터를 유지하면서 일부만 수정하고, 전달하지 않은 필드는 그대로 유지된다.
[HTTP 응답]
HTTP/1.1 200 OK
Content-Type: text/html
Content-Length: 2730
<html>
<body>...</body>
</html>
- 200 OK: 성공했단 뜻 (응답 코드)
- Content-Type: 보내는 데이터의 타입
- 서버는 요청을 처리한 뒤 상태 코드와 함께 응답을 보내고, 본문(body)에 HTML, JSON, 이미지 등이 들어간다.
응답 코드가 뭘까?
응답 코드는 말 그대로 HTTP로 요청을 하고 응답을 받을 때 나타나는 코드이다.
서버가 클라이언트에게 요청을 받으면 응답상태에 따라서 다른 상태코드를 클라이언트에게 돌려준다.
응답 코드는 100 ~ 599까지 숫자로 나뉘고, 앞자리로 의미를 구분한다.
코드 범위 | 의미 | 예시 코드 | 설명 |
1xx | 처리 중 | 100 | 임시 응답 |
2xx | 성공 | 200 OK, 201 Created | 요청이 잘 처리됨 |
3xx | 리다이렉션 | 301, 302 | 다른 위치로 이동함 |
4xx | 클라이언트 오류 | 404 Not Found | 요청 자체가 틀림 |
5xx | 서버 오류 | 500 Internal Server Error | 서버 문제로 실패 |
이 중에서 자주 보이는 상태 코드들이 있다.
- 200 OK: 정상 처리
- 201 Created: POST로 리소스 생성 성공
- 301 Moved Permanently: 페이지 영구 이동
- 302 Found: 임시 이동 (리디렉션)
- 400 Bad Request: 요청 자체가 잘못됨
- 401 Unauthorized: 로그인 필요함
- 403 Forbidden: 권한 없음
- 404 Not Found: 페이지 없음
- 500 Internal Server Error: 서버 터짐
- 503 Service Unavailable: 서버 과부하 or 점검 중
HTTP도 많이 들어봤을테지만 동시에 HTTPS도 많이 들어봤을 것이다.
그렇다면 둘의 차이는 뭘까?
HTTP와 HTTPS
HTTP는 모든 데이터가 평문으로 전송되기 때문에 보안이 없는데, 그래서 등장한 것이 HTTPS이다.
HTTPS는 HTTP에 SSL/TLS를 추가한 것이고, 이를 통해 암호화를 할 수 있다.
항목 | HTTP | HTTPS |
보안 | 암호화 안됨 | 암호화 됨 (SSL/TLS 사용) |
주소 | http:// | https:// |
데이터 노출 | 평문 전송 | 암호화 전송 |
브라우저 표시 | "주의 요함" 표시 가능 | 자물쇠 아이콘 표시 |
중요한 차이점은 HTTP는 누구든 요청/응답을 볼 수 있고, HTTPS는 SSL/TLS를 통해 암호화되서 제 3자가 볼 수 없다.