정의
- HyperText Transfer Protocol의 약자로 웹 상에서 Server와 Client 간의 데이터 전송을 위한 프로토콜
- TCP/IP 기반 프로토콜
- Request/Response 구조로 구성 (Client: HTTP Requset <-> Server: HTTP Response)
HTTP Request
- Request Line, Header, Empty Line, Message Body로 구성
Request Line
[HTTP Method] [Request target] [HTTP version]
- HTTP 메소드, 전송 목표 주소, HTTP 버전으로 구성
ex) POST /test.html HTTP/1.1
Header
- Request에 대한 추가 정보를 담고 있는 부분
※ 주요 파라미터
- Host = 요청하려는 서버의 호스트명과 포트 번호
- Accept = Client가 처리 가능한 미디어 타입
ex) Accept: text/html => 응답으로 HTML 타입 허용
- Authorization = 인증 토큰
- Content-Type = Message Body의 MIME 타입 지정
★ 지정 안할 시 Client에서 어떤 타입으로 보내도 데이터를 받는 쪽에서는 텍스트 데이터(String)으로 인식함
※ MIME(Multipurpose Internet Mail Extensions) 타입 = 서버에서 클라이언트에게 전송할 문서(데이터)의 타입을 알려 주기 위한 메커니즘
=> 크게 text(문자), multipart(이미지), audio(오디오), video(비디오), application(바이너리)로 구분
- application/json = JSON (REST API)
- application/x-www-urlencoded = 쿼리 스트링([key=value&key&value])
- application/octet-stream = 바이너리 데이터의 기본값
- text/css, text/javascript, text/html, text/plain = css, javascript, html, plain에 맞추어 텍스트로 전달
(text/plain이 기본값)
- Cookie = [key=value; key=value;] 형태로 쿠키 데이터 지정
- Origin = 서버로 POST 요청을 보낼 때 어느 주소에서 요청이 시작되었는지 지정 (요청을 보낸 주소와 받는 주소가 다르면 CORS 에러 발생)
Empty Line
- Header와 Message Body를 구분하는 빈 줄
Message Body
- Request가 전송하는 데이터
- 전송하는 데이터가 없을 경우에는 비어 있음
HTTP Response
- Status Line, Header, Empty Line, Message Body로 구성
Status Line
[HTTP version] [Status Code] [Status Text]
- HTTP 버전, HTTP 상태 코드, 상태 코드 관련 텍스트로 구성
ex) HTTP/1.1 200 OK
Header
- Request와 동일
Empty Line
- Header와 Message Body를 구분하는 빈 줄
Message Body
- Response가 전송하는 데이터
- 전송하는 데이터가 없을 경우에는 비어 있음
TCP 소켓 통신과의 비교
- HTTP, TCP 소켓 통신 모두 IP와 포트 번호를 활용하는 연결지향적 통신
- 실시간으로 데이터를 주고 받는 경우에는 소켓 통신이 유리
- HTTP는 TCP 소켓 통신의 일종이지만 TCP 소켓 통신은 HTTP의 일종이 X
'CS > 네트워크' 카테고리의 다른 글
CLI vs REST 비교 (0) | 2023.12.13 |
---|---|
Ceph (0) | 2023.12.11 |
Message Broker (0) | 2023.09.20 |
RSA (0) | 2023.05.03 |
Client 인증 방식 (Cookie, Session, JWT) (0) | 2023.05.02 |
댓글