HTTP 메시지는 요청 메시지와 응답 메시지의 내용이 조금 다르다.
우선 HTTP 메시지의 구성을 살펴보자
HTTP-message = start-line
*( header-field CRLF )
CRLF
[ message-body ]
CRLF는 엔터를 의미
tools.ietf.org/html/rfc7230#section-3
HTTP 1.1의 공식 스펙을 확인해보면 위와 같은 형식으로 이루어진다고 기술되어 있다.
HTTP 메시지 구조는 크게 4가지로 나눌 수 있다
- start-line : 시작 라인
- *( header-field CRLF ) : 헤더
- CRLF : 공백 라인
- [ message-body ] : 내용
start-line (요청 메시지)
요청 메시지에서 start-line = request-line
request-line = method SP(공백) request-target SP HTTP-version CRLF(엔터)
CRLF는 엔터, SP는 공백(띄어쓰기)를 의미
-
HTTP 메서드
-
GET, POST, PUT, DELETE 등등
-
-
요청 대상 (/search?q=hello&hl=ko)
-
absolute-path[?query] (절대경로[?쿼리])
-
절대경로= "/" 로 시작하는 경로
(http://...?x=y 와 같이 다른 유형의 경로지정 방법도 있음)
-
-
HTTP Version
start-line (응답 메시지)
응답 메시지에서 start-line = status-line
status-line = HTTP-version SP(공백) status-code SP reason-phrase CRLF(엔터)
-
HTTP 버전
-
HTTP 상태 코드: 요청 성공, 실패를 나타냄
-
200: 성공
-
400: 클라이언트 요청 오류
-
500: 서버 내부 오류
-
-
이유 문구: 사람이 이해할 수 있는 짧은 상태 코드 설명 글
-
ex) OK
-
header
header-field = field-name ":" OWS field-value OWS
OWS:띄어쓰기 허용 (field-name 다음 ":"는 반드시 띄어쓰기 없이 입력 해야함. ex) Content-Length: 3423
field-name은 대소문자 구문 없음
-
HTTP 전송에 필요한 모든 부가정보
-
메시지 바디의 내용, 메시지 바디의 크기, 압축, 인증, 요청 클라이언트(브라우저) 정보, 서버 애플리케이션 정보, 캐시 관리 정보 등등
-
필요시 임의의 헤더 추가 가능
-
message-body
- 실제 전송할 데이터
- HTML 문서, 이미지, 영상, JSON 등등 byte로 표현할 수 있는 모든 데이터 전송 가능
'개발 지식 > WEB 기본 지식' 카테고리의 다른 글
Stateful, Stateless (상태유지, 무상태) (0) | 2021.01.30 |
---|---|
웹 브라우저 요청 흐름 (0) | 2021.01.24 |
TCP, UDP (0) | 2021.01.17 |
IP(인터넷 프로토콜) (0) | 2021.01.13 |