HTTP란?
01. HTTP (HyperText Transport Protocol) 개요
HTML 및 JSON, XML등의 리소스들을 주고받는 인터넷 통신 프로토콜(규약)을 말한다. HTTP는 웹에서 이루어지는 모든 데이터 교환의 기초이며 클라이언트-서버 모델을 따르는 프로토콜이다. 사전의 정의된 프로토콜에 따라 클라이언트에 의해 전송되는 메세지인 요청(Request)와 그에 대한 서버의 응답인 (Response)의 형식을 따른다.
02. HTTP 구성요소
앞서 말한대로 HTTP는 클라이언트-서버 모델을 따른다. 요청(Request) & 응답(Response)의 형식으로 이루어지며, 이 요청과 응답 사이에는 다양한 작업을 수행하는 게이트웨이, 또는 캐시 역할을 하는 프록시 등의 개체가 존재한다.
클라이언트
주로 웹 브라우저가 클라이언트에 해당하며, 이 브라우저는 항상 요청을 보내는 개체다. (결코 서버가 될 수 없다.) 브라우저는 페이지의 HTML, CSS, JavaScript 등으로 작성된 코드들을 내부 엔진으로 해석하여 사용자에게 보여준다.
서버
클라이언트의 요청에 의해 알맞은 요청을 처리하거나 응답하여 문서를 제공하는등의 역할을 한다.
프록시(Proxy)
웹브라우저와 서버 사이에서는 수많은 HTTP 메세지를 교환하는 중개 역할을 한다. 클라이언트 입장에서 트랜잭션을 수행하며, 프록시가 없다면 클라이언트는 HTTP 서버와 직접 통신해야하고, 프록시가 있다면 프록시 서버를 통해 통신할 수 있다.
03. HTTP 대표적인 특징
무상태(Stateless)
HTTP는 무상태(Stateless) 프로토콜이며 이는 서버가 클라이언트의 상태를 저장하지 않는것을 의미한다. 클라이언트의 이전 요청이 다음 요청에 영향을 끼치지 않는다. 상태의 유지를 위해선 쿠키(Cookie)나 세션(Session), 혹은 토큰(Token)을 이용한다.
서버가 무상태를 유지하는 중요한 이유중 하나는 서버가 확장 가능해야하기 때문이다. 대규모 서비스의 경우 여러개의 서버를 갖게 되는데, 만약 특정 서버에서 상태를 저장해서 사용하면 각 서버간의 상태를 계속 조회해야 하므로 비효율적이며 많은 비용이 들어간다.
비연결성
클라이언트와 서버가 한번 연결을 맺어도 요청에 대한 응답이 끝나면 다시 연결이 끊기는것을 의미한다. 연결을 계속 유지할경우 비효율적으로 리스소를 계속 사용하기 때문에 비연결성을 유지한다.
그러나 연결을 끊지 않고 유지해야하는것이 좋은 경우 (매번 연결을 끊고 다시 연결하는 작업의 오버헤드가 너무 큰경우) HTTP의 KeepAlive 속성을 사용하면, 서버와 클라이언트가 주기적으로 패킷을 교환하여 연결을 유지한다.
04 HTTP 메세지
요청(Request)
요청은 위와같이 HTTP Method, 가져오려는 URL Path, 프로토콜의 버전과 함께 Header를 포함한다. 또한 메서드의 종류에 따라 Header 밑에 Body가 포함되는경우가 있다.
응답(Response)
HTTP의 버전, HTTP 상태코드, 상태 메세지와 함께 Header를 포함한다. 요청과 마찬가지로 메서드의 종류에 따라 Header 밑에 Body가 포함된다.
05. HTTP 메소드
HTTP 메소드는 총 9가지가 존재하며, 주로 사용하는 5가지는 다음과 같다.
- GET - 서버에게 리소스를 요청
- PUT - 리소스 대체, 리소스가 없는 경우 생성 (덮어쓰기)
- POST - 요청 데이터를 처리하고, 서버에 메세지 바디를 통해 데이터를 전달 및 등록
- PATCH - 리소스 일부 변경
- DELETE - 리소스 삭제
외에 기타 메소드 4가지는 다음과 같다.
- HEAD - GET과 동일하지만 HTTP 메세지 없이 상태줄과 헤더만 반환한다.
- OPTIONS - 대상 리소스에 허용된 메소드 확인 (CORS에 주로 사용)
- CONNECT - 리소스에 대해 양방향 연결을 시작하는 메소드
- TRACE - 요청한 리소스가 수신되는 경로 확인
06. HTTP 상태코드
클라이언트의 요청에 대해 응답의 상태를 나타내는 코드이며 대표적으로 사용되는것들은 다음과 같다
- 200 OK - 요청에 의한 응답이 성공했음을 나타낸다.
- 202 Accepted - 서버가 요청을 접수했지만 아직 처리하지 않았음을 나타낸다.
- 304 Not Modified - 캐싱 후 서버의 값이 변경되었는지 확인
- 400 Bad Request - 클라이언트의 요청이 잘못되어 요청을 처리할 수 없음을 나타낸다.
- 401 Unauthorized - 해당 리소스에 접근하기 위해 클라이언트의 인증이 필요함을 나타낸다.
- 403 Forbidden - 서버가 요청을 받았지만 접근을 거부한 경우를 나타낸다.
- 404 Not Found - 요청 리소스를 찾을 수 없음을 나타낸다.
- 405 Method NotAllowed - 해당 메소드의 요청을 거부한 경우를 나타낸다.
- 50x - 각종 에러코드
그 외에 상태코드는 이곳 을 참조하자.
Reference
https://developer.mozilla.org/ko/docs/Web/HTTP/Overview