본문 바로가기

Spring

HTTP 특징

HTTP를 Spring에 넣는게 약간 고민되긴 하지만 어쨋든 알아야 하니까.. ㅎ..

 

Hyper Text Transfer Protocol - 텍스트를 전송하기 위한 프로토콜 = 약속, 규칙

 

1. 무상태 Stateless 

  • 각 요청을 별개의 요청으로 취급하므로 클라이언트의 이전 요청 상태를 기억하지 않습니다.
  • 상태 정보를 유지하려면 쿠키, 세션, 토큰 등을 이용해야 합니다.

2. 클라이언트 - 서버 모델

  • HTTP 클라이언트가 요청을 보내고, 서버가 요청을 처리하여 응답을 반환하는 구조를 가집니다.
  • 클라이언트와 서버는 독립적으로 동작합니다.

3. 확장성

  • HTTP는 헤더 필드를 통해 확장이 가능합니다. 
  • 표준 헤더 외에도 사용자 정의 헤더를 추가하여 필요한 정보를 주고받을 수 있습니다. 

4. 유연한 데이터 형식

  • HTML, XML, JSON, 이미지, 비디오, 파일 등을 포함하여 다양한 MIME 타입을 지원합니다.
  • 웹 페이지, API, 파일 전송 등을 쉽게 구현할 수 있습니다.

HTTP는 텍스트 기반 프로토콜인데 어떻게 파일이나 이미지나 동영상 등 다양한 형식의 데이터를 전달할 수 있는걸까요? 

 

Multipurpose Internet Mail Extensions이 콘텐츠 형식을 명확히 정의하여 클라이언트와 서버가 데이터를 정확히 해석하고 처리할 수 있도록 합니다. 

 

MIME 타입은 '타입/서브타입' 형식입니다. 예를 들어 text/html, image/jpeg, video/mp4, application/json 이런 형태를 띄고 있습니다. 요청할 때는 Accept 헤더로, 응답할 떄는 Content-Type 헤더를 통해 사용됩니다.

GET /index.html HTTP/1.1
Host: www.example.com
Accept: text/html // 데이터 타입

HTTP/1.1 200 OK
Content-Type: text/html // 데이터 타입
Content-Length: 137

 

5. 요청-응답 구조

  • HTTP는 클라이언트 - 서버 모델을 따르며, 클라이언트는 요청을 보내고 서버는 응답하는 구조입니다.
  • 일반적으로 클라이언트는 브라우저, 서버는 웹 서버 입니다.
// HTTP GET 요청
GET /index.html HTTP/1.1
Host: www.example.com

// HTTP 응답 헤더
HTTP/1.1 200 OK // 상태 코드
Content-Type: text/html // 데이터 형식
Content-Length: 48
// 응답 바디
<html>
<body>
<h1>Hello, World!</h1>
</body>
</html>

// 엄청 간단한 요청-응답 메시지

 

6. HTTP 메서드

  • GET, POST, PUT, DELETE, PATCH등 메서드를 통해 서버에 요청할 작업을 정의합니다.
더보기

* PUT과 PATCH 모두 서버 리소스를 업데이트할 때 사용되는데 PUT은 전체 리소스를 업데이트할 때, PATCH는 일부 리소스를 업데이트할 때 사용됩니다. 예를 들어 사용자 리소스에 이름과 이메일이 있다면 PUT은 이름과 이메일 모두 변경할 때 사용하고, PATCH는 이메일만 변경할 때 사용합니다.

 

7. 상태 코드

  • HTTP 응답 헤더에는 상태 코드가 포함되어 있습니다. 
  • 2xx(성공), 4xx(클라이언트 오류), 5xx(서버 오류) 등이 있습니다.

8. 보안 

  • HTTPS는 SSL/TLS를 사용하여 데이터 전송을 암호화합니다.
  • 데이터 기밀성, 무결성, 인증을 보장합니다.