HTTP
HTTP는 Hyper Text Transfer Protocol의 약자로, HTML 문서와 같은 리소스들을 가져올 수 있도록 해주는 프로토콜이다. HTTP는 웹에서 이루어지는 모든 데이터 교환의 기초이며 클라이언트-서버 프로토콜이다.
HTTP로 클라이언트와 서버가 통신을 주고 받는 과정에서, HTTP가 클라이언트나 서버의 상태를 확인하지 않는다. Stateless(무상태성)이 HTTP의 큰 특징이다.
- Clinets : browsers(Chrome, Edge, Safari...). can be any thpe of program or device.
- Servers : computers in the cloud.
HTTP Messages
HTTP messages 는 클라이언트와 서버 사이에서 데이터가 교환되는 방식을 말한다.
요청(Requests)
: 클라이언트가 서버로 전달해서 서버의 액션이 일어나게 하는 메세지.
응답(Responses)
: 요청에 대한 서버의 답변.
HTTP 요청과 응답의 구조는 서로 닮아있다.
start-line
: start line에는 요청이나 응답의 상태를 나타낸다.
항상 첫 번째 줄에 위치한다. 응답에서는 status line이라고 부른다.
HTTP headers
: 요청을 지정하거나, 메시지에 포함된 본문을 설명하는 헤더의 집합.
empty line
: 헤더와 본문을 구분하는 빈 줄이 있다.
body
: 요청과 관련된 데이터나 응답과 관련된 데이터 또는 문서를 포함한다.
요청과 응답의 유형에 따라 선택적으로 사용한다.
HTTP Requests
HTTP Request Message
= Request Header + 빈 줄 + Request Body
- Header
- 첫 번째 줄 (start-line)
- 요청 메서드 + 요청 URI + HTTP 프로토콜 버전
GET /doc/test.html HTTP/1.1
- 두 번째 줄 (http headers)
- Header 정보들 (요청에 대한 meta 정보, key:value 값으로 되어 있다.)
- 각 줄은
LF
와 CR
으로 구분된다.
- 빈 줄 (empty-line)
- 요청에 대한 모든 메타 정보가 전송 됨을 알려준다.
- Body
- 요청의 실제 메시지(내용)(HTML 폼 컨텐츠 ..)
- POST, PUT의 경우에만 존재. GET은 body가 대부분 없다.
- XML이나 JSON 데이터가 들어갈 수 있다.
HTTP Responses
HTTP Response Message
= Response Header + 빈 줄 + Response Body
- Header
- 첫 번째 줄 (status-line)
- HTTP 프로토콜 버전 + 응답 코드 + 응답 메세지
HTTP/1.1 200 OK
HTTP/1.1 404 Not Found.
- 두 번째 줄 (http headers)
- Header 정보들 (요청에 대한 meta 정보, key:value 값으로 되어 있다.)
- 날짜, 웹 서버 이름, 웹 서버 버전, 컨텐츠 타입/길이 . . .
- Request Headers와 거의 같지만, Response Headers에만 있는 값이 있다. (예를 들면, 서버)
- 각 줄은
LF
와 CR
으로 구분된다.
- 빈 줄 (empty-line)
- 요청에 대한 모든 메타 정보가 전송 됨을 알려준다.
- Body
- 실제 응답 리소스 데이터.
- 201, 204와 같은 상태 코드를 가진 응답에는 보통 body가 존재하지 않는다.
HTTP 기본 속성 개념
요청 메서드
- 서버에게 요청의 종류를 알려주기 위해 사용한다.
- 각 메서드의 사용 목적
- GET : 정보 요청/조회 (SELECT)
- POST : 정보 등록 (INSERT)
- PUT : 정보 수정 (UPDATE)
- DELETE : 정보 삭제 (DELETE)
- HEAD : http 헤더 정보만 요청. 서버에 문제 없는지 확인.
- OPTIONS : 웹 서버가 지원하는 메서드의 종류를 요청.
- TRACE : 클라이언트의 요청을 그대로 반환하는 메서드.
PUT vs PATCH
쉽게 말하자면, PUT은 정보를 통째로 갈아끼울 때,
PATCH는 정보 중 일부 를 특정 방식으로 변경할 때 사용한다.
자원을 수정하는 HTTP 메서드 - PUT vs PATCH