인터넷 상에서 클라이언트 - 서버 간에 데이터를 주고받기 위한 프로토콜이다 HTTP는 HTML 문서, 이미지, 동영상, 등 모든 종류의 데이터를 주고 받을 수 있다
HTTP 특징
- 비연결성(Connectionless) : 클라이언트와 서버가 연결을 맺은 후, 통신이 끝나게 되면 연결을 끊는 것을 말한다
- 무상태(Stateless) : 비연결성이기 때문에 서버에서는 클라이언트에 대한 이전 상태정보를 가지고 있지 않을 것을 말한다
장점
불특정 다수에 클라이언트들이 접속하는데 그 모든 사람들에 대해서 연결을 계속 유지해야 한다면 많은 리소스들이 발생해야하지만 유지하지 않기 때문에 불필요한 리소스를 절약할 수 있다
단점
클라이언트의 이전 상태들을 기억하고 있지 않기 때문에 매번 새로운 사람들이 들어오는 것과 같아 상태를 유지 시켜줄 수 없다
이러한 단점을 극복하기 위해서 쿠키, 세션, JWT와 같은 방법을 이용한다
HTTP METHOD
클라이언트가 서버에게 요청을 할 때 어떤 목적을 가지고 있는지에 대해서 표현하는 것을 말한다
- GET : 요청 받은 URI의 정보를 검색하여 응답한다
- POST : 요청된 자원에 대해서 생성한다
- PUT : 요청된 자원에 대해서 수정한다
- DELETE : 요청된 자원에 대해서 삭제한다
CRUD는 데이터 처리의 기본 기능이고 해당 HTTP METHOD와 맞춰본다면
- POST - C(CREATE)
- GET - R(READ)
- PUT - U(UPDATE)
- DELETE - D(DELETE)
다음와 같이 매칭될 수 있음을 알 수 있다
이외에도 아래와 같은 HTTP METHOD들이 존재한다
- HEAD : GET과 유사하지만 BODY를 제외하고 응답코드만 전달한다
- OPTIONS : 웹 서버측 제공 메소드, HTTP 헤더에 담아서 전달한다
- TRACE : 요청 리소스가 수신되는 경로를 보여준다
- CONNECT : 요청 된 리소스와 양방향 통신을 시작한다
- PATCH : PUT과 유사하고 전체 자원을 갱신하는 반면 PATCH는 일부만 수정시 사용한다
POST과 PUT의 차이점
- 멱등성(Idempotent) 여러 번을 수행해도 값이 같은 것을 의미한다
- POST : 리소스를 추가하는 연산으로서 Idempotent하지 않다
- PUT : 값을 계속 UPDATE 수행해봤자 같은 결과가 나오기 때문에 Idempotent하다
- 리소스 결정권 URI가 서버? 클라이언트? 누구에 의해 결정되는 것인지를 의미한다
- POST :
POST /board
다음과 같이 게시글 생성 요청을 보낼 때 생성할 때 서버에서 리소스 위치를 결정한다 - PUT :
PUT /board/12
다음과 같이 해당 board를 수정하기 위해서는 클라이언트에서 12와 같이 특정지어주어야 한다
- POST :
HTTP State Code
200번대 : 성공
- 200 : 요청이 성공적으로 완료됨
- 201 : 요청이 성공적으로 완료되었고 그 결과 새로운 리소스가 생성됨(일반적으로 POST)
- 202 : 요청은 받아들여졌으나, 아직 동작을 수행하지 않은 상태
- 203 : 요청을 성공하였지만, 요청에 대한 검증이 되지 않은 상태
- 204 : 요청을 성공했지만, 제공할 내용이 없음을 의미
- 205 : 204와 동일, 새로고침등을 통해 새로운 내용등을 확인할 것
- 206 : 요청의 일부분만 성공
300번대 : 요청을 마치기 위해 , 추가 조치가 필요
- 300 : 클라이언트가 동시에 여러 응답을 가르키는 URL을 요청한 경우 응답 목록과 함께 반환
- 301 : 요청한 URL이 옮겨졌을 때 사용, 옮겨진 URL에 대한 정보와 함께 응답
- 302 : 301과 동일, 하지만 여전히 옮겨지지 전 URL 요청
- 303 : 요청 받은 행동 수행을 위해서는 다른 URL로 요청
- 304 : 이전의 동일한 요청과 비교하여 변화가 없음을 의미(단시간에 반복된 동일 요청에 대한 대응 코드)
- 305 : 직접적인 요청이 아니라 반드시 프락시(우회경로)를 통해 요청되어야 됨
400번대 : 클라이언트 측 오류
- 400 : 잘못된 문법으로 인하여 서버가 요청을 이해할 수 없음
- 401 : 인증을 위해 권한 인증등을 요구
- 403 : 서버에 의해 요청이 거부
- 404 : 요청한 URL이 존재 X
- 405 : 요청한 URL이 Method을 지원 X
500번대 : 서버 측 오류
- 500 : 서버에서 오류 발생
- 501 : 클라이언트 요청에 대한 서버의 응답 수행 기능이 없음
- 502 : 게이트웨이로 작업하는 동안 잘못된 응답을 수신했음을 의미
- 503 : 현재 서버가 요청 준비가 되지 않음, 유지보수나, 과부하로 인해 작동 중단되었을 때
- 504 : 서버가 게이트웨이 역할을 하고 있으며, 적시에 응답을 받을 수 없을 때
- 505 : 요청된 HTTP 버전은 서버에서 지원 X