웹에서 클라이언트(보통 브라우저)와 서버 간에 데이터를 주고받는 프로토콜
비연결성(stateless), 텍스트 기반인 애플리케이션 계층(응용 계층)의 프로토콜
기본 구조
클라이언트 (브라우저, 앱 등)
└─→ [HTTP 요청] ──→
서버 (웹 서버)
←── [HTTP 응답] ──┘
HTTP가 요청하는 대상을 resource라고 하며, 자원의 특성을 제한하지 않음
단지 자원과 상호작용하는 데 사용할 수 있는 인터페이스를 정의함
-> 주고받을 자원의 특성과 무관하게 자원을 주고받을 수단(인터페이스)의 역할만을 수행함
대부분의 자원은 URI로 식별됨
media type: HTTP에서 메시지로 주고받는 자원의 종류. MIME type(Multipurpose Internet Mail Extension Type)이라고도 함.
-> HTTP는 주고받을 미디어 타입에 특별히 제한이 없고, 독립적으로 동작이 가능한 미디어 독립적 프로토콜임
미디어 타입은 '타입/서브타입'으로 구성됨. 타입==데이터 유형, 서브타입==세부 유형
| 미디어 타입 | 설명 |
|---|---|
text/plain | 일반 텍스트 |
text/html | HTML 문서 |
text/css | CSS 스타일시트 |
text/javascript | JavaScript (구버전 표현, 현재는 application/javascript 사용 권장) |
text/csv | CSV 형식 데이터 |
시작 라인
ex) 요청 라인 = method(공백)요청대상(공백)HTTP버전(줄바꿈) GET /index.html HTTP/1.1
method: 클라이언트가 서버의 자원ㅇ에 대해 수행할 작업의 종류
| 메서드 | 설명 |
|---|---|
GET | 데이터를 요청함 (URL 기반) |
POST | 데이터를 전송함 (Body 사용) |
PUT | 자원의 전체 수정 |
PATCH | 자원의 일부 수정 |
DELETE | 자원 삭제 |
HEAD | 응답 헤더만 요청 |
요청 대상: HTTP 요청을 보낼 서버의 자원. 보통 URI의 경로.
HTTP 버전: 사용된 HTTP 버전. 'HTTP/버전'으로 표기.
상태 라인 = HTTP버전(공백)상태코드(공백)이유 구문*(줄바꿈) GET /index.html HTTP/1.1
필드 라인
:을 기준으로 header-name과 하나 이상의 header-value로 구성됨ex)
요청 시 : Host, User-Agent, Accept, Authorization 등
응답 시 : Content-Type, Set-Cookie, Cache-Control, Content-Length 등
메시지 본문
클라이언트가 보낸 요청에 대해 서버가 어떻게 처리했는지를 숫자로 표현한 것.
HTTP 응답의 가장 앞줄에 포함되어 있으며, 일반적으로 3자리 숫자로 표현됨
ex)
HTTP/1.1 200 OK: 200-상태코드, OK-상태 메시지
| 범주 | 범위 | 의미 |
|---|---|---|
| 1xx | 100–199 | 정보: 요청을 받았고 계속 처리 중 |
| 2xx | 200–299 | 성공: 요청이 성공적으로 처리됨 |
| 3xx | 300–399 | 리다이렉션: 추가 작업 필요 |
| 4xx | 400–499 | 클라이언트 오류: 요청에 문제가 있음 |
| 5xx | 500–599 | 서버 오류: 서버가 요청 처리 실패 |
자주 쓰는 상태 코드
| 코드 | 의미 |
|---|---|
200 OK | 성공 |
201 Created | 생성 성공 |
204 No Content | 응답 본문 없음 |
301/302 | 리다이렉션 |
400 Bad Request | 잘못된 요청 |
401 Unauthorized | 인증 실패 |
403 Forbidden | 권한 없음 |
404 Not Found | 존재하지 않는 자원 |
500 Internal Server Error | 서버 내부 오류 |