HTTP

김시환·2023년 5월 2일
0

네트워크

목록 보기
4/5

HTTP

HTTP (HyperText Transfer Protocol) : 인터넷 상에서 데이터를 주고 받는데 사용되는 프로토콜

HTTP의 특징

클라이언트 - 서버 구조

클라이언트는 서버에 요청을 하고, 서버는 해당 요청에 대한 응답을 클라이언트에게 보내는 구조로 데이터를 주고 받는다!

Stateless

Stateless : 서버가 클라이언트의 상태를 유지하지 않는다!

클라이언트가 A,B,C라는 요청을 순서대로 하고 이에 대한 결과를 이어 서버에 ABC라는 값을 저장하고 싶다고 해보자.

<서버가 상태를 유지할 경우>
클라이언트는 A,B,C 요청을 하기만 하면 서버에 클라이언트의 상태가 유지되어 있기 때문에 A 요청을 했다면 서버에 해당 클라이언트가 A를 요청했다는 상태가 유지되기 때문에 B와 C 요청이 들어왔을 때, 요청에 대한 결과를 이어 붙이기만 하면 된다!

<서버가 상태를 유지할 수 없는 경우>
클라이언트는 우선 A요청을 한다. 다음에 클라이언트가 B 요청을 할 때, 서버는 클라이언트가 A요청을 이미 했다는 사실을 알지 못한다. 따라서 클라이언트는 B 요청을 할 때, 이전에A요청을 했다는 사실도 같이 전달해야 한다.

Stateless의 장점 : 서버에서 상태를 유지하지 않기 떄문에 서버 증설이 쉽다! 따라서 과도한 트래픽이 발생하거나 서버 오류가 발생했을 떄, 대처하기가 쉽다.

하지만 실무에서 모든 것을 Stateless로 개발할 수는 없다!! -> 로그인 같은 기능을 구현할 때에는 로그인 상태가 유지되어야 한다!!

비연결성

HTTP는 기본적으로 연결을 유지하지 않는다!
-> 이런 점의 문제 : HTTP를 사용할 때마다 TCP 연결을 새로해야함 -> 비용 발생! -> 이를 해결하기 위해 HTTP 지속 연결 : TCP 연결을 한번 하고 종료되기 까지 발생하는 많은 HTTP를 처리

거의 모든 형태의 데이터 전송 가능

HTTP 메시지에 거의 모든 형태의 데이터를 담아 전송할 수 있다!

HTTP 메서드

GET : 리소스 조회
POST : 요청 처리, 메시지 바디를 통해 서버로 요청 데이터 전달!
PUT : 리소스 대체, 클라이언트가 리소스 위치를 알고 URI 지정!
PATCH : 리소스 부분 변경
DELETE : 리소스 삭제

HTTP 메서드 속성

Safe

  • 호출해도 리소스를 변경하지 않는다

Idempotent(멱등)

  • 몇 번을 호출하더라도 결과가 같다
  • GET, PUT, DELETE -> 멱등
  • POST -> 멱등 x

Cachable

  • GET,HEAD,POST,PATCH 캐시 가능!
  • 실제로는 GET,HEAD 캐시로 사용
  • POST, PATCH는 메시지 바디의 내용까지 캐싱하도록 구현이 쉽지 않다

HTTP Status code

상태 코드

상태 코드 : 클라이언트가 보낸 요청의 처리 상태를 응답에서 알려주는 기능

2xx (Successful)

  • 200 : 요청 성공
  • 201 : 요청 성공 -> 새로운 리소스 생성
  • 202 : 요청이 접수되었으나 처리까지는 되지 않음
  • 204 : 요청 성공헀지만, 응답의 본문 내용 없음

3xx (Redirection)

  • 웹브라우저는 3xx 응답의 결과에 Location 헤더가 있으면, Location 위치로 자동으로 이동한다!
  • 301, 308 : 영구적으로 URI 이동, 301은 리다이렉트 시 요청 메서드가 GET으로 변함
  • 302, 303, 307 : 일시적으로 URI 변경, 302와 303은 리다이렉트 시 요청 메서드가 GET으로 변한다.

4xx (Client Error)

  • 오류의 원인이 클라이언트에 있다!
  • 400 : 잘못된 요청
  • 401 : 인증 필요!
  • 403 : 승인 거부 -> 접근 권한이 불충분한 경우
  • 404 : 요청 리소스가 서버에 없다!

5xx (Server Error)

  • 오류의 원인이 서버에 있다!
  • 500 : 서버 내부 오류
  • 503 : 서버 과부하나 작업 등으로 요청 처리 일시적 불가
profile
1년차 개발자입니다.

0개의 댓글

관련 채용 정보