[Spring] HTTP

thingzoo·2023년 6월 23일
0

Spring

목록 보기
4/54
post-thumbnail

HTTP(HyperText Transfer Protocol)

  • RFC 2616에서 규정된 Web에서 데이터를 주고 받는 프로토콜(통신규약)
    • 통신 규약: 컴퓨터끼리 데이터를 주고 받을 때 정해둔 약속
  • 매우 범용적인 양식을 가지고 있어 전 세계에서 제일 널리 쓰임
  • 이름에는 하이퍼텍스트 전송 프로토콜로 정의되어 있지만, 실제로는 HTML, XML, JSON, Image, Voice, Video, Javascript, PDF 등 다양한 컴퓨터에서 다룰 수 있는 것은 모두 전송 가능
  • HTTP는 TCP를 기반으로 한 REST의 특징을 모두 구현하고 있는 Web기반의 프로토콜

HTTP 통신 방법

메세지를 주고(Request) 받는(Response) 형태의 통신 방법

  1. 브라우저는 서버에게 자신이 원하는 페이지(URL 등의 정보)를 요구(Request)한다.
  2. 서버는 브라우저가 원하는 페이지가 있는지 확인하고, 있다면 해당 페이지에 대한 데이터를 실어 응답(Response)해준다. 만약 없다면 없는 페이지에 대한 데이터를 반환한다.
  3. 브라우저는 서버에게 전달 받은 데이터를 기반으로 브라우저에 그려준다.
  • "데이터"는 어떠한 데이터든 주고 받는게 가능하다.

HTTP 구성 요소

Method (호출/요청 방식)

  • GET: 리소스 취득
  • POST: 리소스 생성, 추가
  • PUT: 리소스 갱신, 생성
  • DELETE: 리소스 삭제
  • PATCH: 리소스의 일부분만 수정
  • HEAD: 헤더 데이터 취득
  • OPTIONS: 지원하는 메소드 취득
  • TRACE: 요청메시지 반환
  • CONNECT: 프록시 동작의 터널 접속으로 변경

Header (추가 데이터, 메타 데이터)

  • 브라우저가 어떤 페이지를 원하는지
  • 요청 받은 페이지를 찾았는지
  • 요청 받은 데이터를 성공적으로 찾았는지
  • 어떤 형식으로 데이터를 보낼지
GET naver.com HTTP/1.1

이러한 사례 외에도 아주 다양한 의사 표현을 위한 데이터를 모두 Header 필드에 넣고 주고 받는다. 위에서 설명 된 메서드도 사실은 헤더에 포함되어 서버로 보내진다.

Payload (데이터, 실제 데이터)

  • 서버가 응답을 보낼 때에나 클라이언트(브라우저)가 요청을 할때도 Payload를 보낼 수 있다.
  • "GET method를 제외하곤 모두 Payload를 보낼 수 있다" 는게 HTTP에서의 약속
  • HTML
    <!DOCTYPE html>
    <html>
    <head><title>By @ResponseBody</title></head>
    <body>Hello, Spring 정적 웹 페이지!!</body>
    </html>
  • JSON
    { 
      "name":"Robbie",
      "age": 20
    }
  • HTTP의 Payload를 통해 위와 같은 데이터들을 요청하고 응답 받을 수 있다.

Status Code

코드의미내용
1XXInformation(처리중)처리중인 상태. 클라이언트는 요청을 계속하거나 서버의 지시에 따라서 재요청(최근 거의 사용 안함)
2XXSuccessful요청의 성공
3XXRedirection다른 리소스로 리다이렉트. 해당 코드를 받았을 때는 Response의 새로운 주소로 재요청
4XXClient Error클라이언트의 요청에 에러가 있는 상태. 재전송해도 에러가 해결되지 않음.
5XXServer Error서버 처리중 에러가 발생한 상태. 재전송시 에러가 해결되었을 수도 있음.

자세한 코드는 따로 정리하도록 하쟈...

profile
공부한 내용은 바로바로 기록하자!

0개의 댓글