HTTP
HTTP와 관련된 모든 개념들에 대해
웹 공통
HyperText Transfer Protocol
웹에서 클라이언트와 서버가 서로 데이터를 주고받기 위해 사용하는 통신 규칙(Protocol)
핵심 특징: 비연결성, 무상태
비연결성
- 클라이언트는 서버에 요청을 보내고 응답을 받으면 바로 연결을 끊는다
- 이는 서버가 수많은 요청을 동시에 감당할 수 있게 함
- 그러나 매번 요청마다 새로 연결해야 해서 속도 저하 발생 가능
보완책: Keep-Alive & HTTP/2
Connection: Keep-Alive헤더를 사용해 일정 시간 동안 연결을 유지HTTP/2에서 하나의 연결로 여러 요청/응답을 동시에 처리하는 Multiplexing 기술 등장
무상태
- 서버는 클라이언트의 이전 요청 상태를 기억하지 않음
- 즉, 각 요청은 완전히 독립적인 것으로 간주
보완책: 쿠키와 세션
- 쿠키, 세션, JWT를 사용해 사용자의 상태를 유지
- 서버는 로그인 시 쿠키를 발급하고, 클라이언트는 이후 요청마다 쿠키를 함께 보내 자신의 상태/자격을 증명
HTTP 메시지 구조
- 클라이언트가 보내는 Request
- 서버가 보내는 Response
HTTP Request
GET /users/123?active=true HTTP/1.1 <-- 1. 시작 줄 (Start Line)
Host: api.example.com <-- 2. 헤더 (Headers)
User-Agent: Chrome/105.0.0.0
Accept: application/json
Authorization: Bearer my-secret-token
{ "comment": "Hello booduki" } <-- 3. 본문 (Body)
1. 시작 줄 (Start Line)
- HTTP 메서드: 요청의 의도/목적 (
GET/POST등) - 요청 대상:
/users/123?active=true처럼 요청하는 리소스의 경로와 쿼리 문자열을 나타냄 - HTTP 버전:
HTTP/1.1,HTTP/2등 사용된 프로토콜의 버전 명시
2. 헤더 (Headers)
-
(Key, Value) 형태의 메타데이터로, 요청에 대한 부가 정보를 담고 있음
-
Host: 요청을 보내는 서버의 도메인 이름 (필수) -
User-Agent: 요청을 보낸 클라이언트의 정보 -
Accept: 클라이언트가 이해할 수 있는 데이터 타입 (application/json,text/html등) -
Authorization: 인증 정보(인증 토큰)을 담아 보내는 헤더
3. 본문 (Body)
- 서버에 전달할 실제 데이터를 담는 부분
GET요청은 보통 본문이 비어있고,POST나PUT은 서버에 생성하거나 수정할 데이터를 본문에 담아 보냄
HTTP Response
HTTP/1.1 200 OK <-- 1. 상태 줄 (Status Line)
Content-Type: application/json <-- 2. 헤더 (Headers)
Content-Length: 54
Connection: keep-alive
{ "userId": 123, "name": "Seungjun" } <-- 3. 본문 (Body)
1. 상태 줄 (Status Line)
- HTTP 버전: 요청과 마찬가지로 프로토콜 버전을 나타냄
- 상태 코드: 요청 처리 결과를 나타내는 세 자리 숫자 (매우 중요)
- 상태 텍스트: OK, Not Found처럼 상태 코드를 사람이 이해하기 쉽게 설명하는 짧은 문구
2. 헤더 (Headers)
- 응답에 대한 부가 정보
- 자주 쓰이는 응답 헤더
Content-Type: 응답 본문의 데이터 타입Content-Length: 응답 본문의 길이를 바이트 단위로 알려줌Set-Cookie: 서버가 클라이언트에게 쿠키를 저장하라고 명령할 때 사용Location: 페이지를 다른 곳으로 리다이렉트 시킬 때 이동할 URL 명시
3. 본문 (Body)
- 클라이언트에게 전달할 실제 데이터가 담기는 부분
HTTP 메서드
리소스에 대해 수행하려는 작업의 종류
GET: 리소스 조회POST: 리소스 생성PUT: 리소스 전체 수정PATCH: 리소스 부분 수정DELETE: 리소스 삭제
HTTP 상태 코드
서버가 클라이언트의 요청을 어떻게 처리했는지 알려주는 가장 중요한 지표
2xx (성공): 요청이 성공적으로 처리되었음
200 OK: 요청 성공201 Created: 리소스 생성 성공(POST,PUT에 대해)204 No Content: 성공했지만 응답 본문에 보낼 데이터는 없음 (주로DELETE)
3xx (리다이렉션): 요청을 완료하려면 추가적인 동작 필요
301 Moved Permanently: 요청한 리소스의 URL이 영구적으로 변경됨302 Found: 일시적으로 다른 URL로 이동해라
4xx (클라이언트 에러): 클라이언트 측에 오류가 있음
400 Bad Request: 요청의 형식이 잘못 됨(e.g. 필요한 파라미터 누락)401 Unauthorized: 인증되지 않은 사용자의 요청 (로그인 필요)403 Forbidden: 인증은 되었지만 해당 리소스에 접근할 권한 없음404 Not Found: 요청한 리소스를 찾을 수 없음
5xx (서버 에러): 서버 측에 오류가 있음
500 Internal Server Error: 서버 코드 실행 중 예외가 발생하는 등 서버 내부에 문제 발생503 Server Unavailable: 서버가 과부하 등으로 인해 일시적으로 요청을 처리할 수 없음