Spring

[Spring]HTTP 란? (1)

코딩로봇 2025. 3. 20. 21:02

HTTP 란? (HyperText Transfer Protocol)

  • 다양한 형태(TEXT,IMAGE,FILE,HTML,JSON)가 World Wide Web(WWW,웹) 상에서 데이터를 주고받기 위한 프로토콜이다.
  • 서버간의 요청과 응답을 통해 작동한다.
  • TCP/IP 통신 프로토콜 기반으로 동작한다.
  • stateless 프로토콜 : 데이터를 주고받기 위해 행해지는 각각의 데이터들이 서로 독립적으로 관리된다. 
  • 단방향성이다.

 

💡 HTTP 는 클라이언트 to 서버 요청 뿐아니라, 서버 to 클라이언트 , 서버 to 서버간의 데이터 통신에도 사용된다.

 

 

HTTP 동작 순서

  • 클라이언트는 Request(요청)을 보내고 , 응답을 기다린다.
  • 서버는 요청에 대한 처리를 수행 후 결과를 Response(응답) 한다.

 

HTTP 특징

💡 HTTP 는 인터넷 상에서 불특정 다수의 통신 환경을 기반으로 설계되었다.

 

1.클라이언트와 서버 구조

 

  • 클라이언트, 서버 각자 독립적으로 발전이 가능하다.

 

2.무상태(Stateless)

  • 서버는 클라이언트의 상태를 보존하지 않는다.
  • 장점 - 수평 확장성이 높고,갑자기 요청량이 증가해도 서버 증설이 쉽다.
  • 단점 - 클라이언트가 데이터를 추가적으로 전송해야한다.

 

3.비연결(Connectionless)

  • 연결을 유지하지 않는다. 즉,서버 자원을 효율적으로 사용할 수 있지만, 추가 요청을 할려면 새로 연결을 해야하고 모든 데이터를 다시 다운해야한다.-> 캐시 브라우저 캐싱으로 해결가능

 

 HTTP Message 구조

💡 HTTP 는 요청,응답 메세지 두가지 종류가 있고 구조가 각각 다르다.

 HTTP 요청 메세지

1.Start Line 

✔ HTTP Method

  • 요청의 의도를 가진 GET,POST,PUT,PATCH,DELETE 가 존재한다.
  •  Create - POST
     Read - GET
     Update - PUT(전체), PATCH(일부)
     Delete - DELETE
                           

✔ path

  • HTTP Request 가 전송되는 대상 ,절대 경로

 

✔ HTTP Version

  • HTTP Version 을 나타낸다.

 

2.Header

  • field-name: OWS field-value OWS (OWS : 띄어쓰기 허용)` 구조를 가진다.
  • field-name`은 대소문자 구분을 하지 않는다.
  • 임의의 Header를 추가할 수 있다. (단, 서버가 값을 알고 있어야 함)
  • 요청의 추가 정보들을 가지고 있다.

3.Empty Line

  • 공백 한줄
  • 필수 값

4.Message Body

  • 실제로 전송하는 데이터
  •  

 

 

 HTTP 응답 메세지

1. Start Line   

  • HTTP Version
  • Status Code - 요청이 성공했는지, 실패했는지 나타내는 코드
  • Status Text - 코드와 함께 전달될 메세지

2. Header 

  • Response에서만 사용되는 Header 값들이 따로 존재한다.

3. Empty Line

  • 공백 한줄, 필수값    

4. Message Body

  • 실제 전송하는 데이터가 담겨 있는 부분
  • 만약 전송할 데이터가 없다면, Body가 공백으로 존재한다.

 

HTTP Status Code

1xx (정보)

2xx (성공)

더보기
  • 대표 상태코드
    • 200 OK
      • 요청 성공
    • 201 Created
      • 새로운 리소스 생성
    • 202 Accepted
      • 요청이 수신되었으나 처리가 완료되지 않음
      • 주로 Batch 처리에서 사용된다.
      ex) 설정한 시간마다 반복적으로 동작하는 특정 작업.
    • 204 No Content
      • 요청은 성공했지만, 응답 데이터가 없음
      ex) 저장, 작성버튼 클릭 시

3xx (리다이렉션)

4xx (클라이언트 에러)

더보기
  • 대표 상태코드
    • 400 Bad Request
      • 클라이언트가 HTTP 요청 내용을 수정 후 보내야 한다.
      ex) GET 메소드로 만들어진 API인데 POST로 보낸다?
    • ex) API 스펙과 일치하지 않을 때, 숫자를 문자로, 문자를 숫자로 등
    • 401 Unauthorized
      • 클라이언트가 리소스에 대한 **인증(Authentication)**이 필요하다.
      • 응답에 WWW-Authenticate 헤더와 함께 인증 방법을 설명한다.
      ex) 로그인
    • 403 Forbidden
      • 서버가 요청을 받았지만 승인 거부
      • 주로 인가(Authorization) 관련문제
      ex) 일반 유저, 관리자
    • 404 Not Found
      • 요청한 리소스가 서버에 없다.
      • 이를 이용하여 리소스를 숨겨놓기도 한다. 있지만 없는척 가능

5xx (서버 에러)

더보기
  • 대표 상태코드
    • 500 Internal Server Error
      • 대부분 500으로 처리한다.
    • 503 Service Unavailable
      • 서비스 이용 불가
      • Retry-After Header를 사용하면 얼마뒤에 복구되는지 응답할 수 있다.

 

다음은 HTTP Header 에 대해 알아보자