기술 정리 & CS/Web 일반

[Web 기본] HTTP 통신 정리

yubi5050 2022. 5. 17. 15:07

HTTP(Hyper Text Transfer Protocol 통신

웹상에서의 정보를 주고 받는 프로토콜 통신 규약

 

HTTP 통신 주요 특징 목차

  • 요청 (Request)
  • 응답 (Response)
  • Stateless
  • 쿠키/세션
  • 요청/응답 예시
 

요청 (Request)

  • 웹 브라우저를 통해 서버에 어떠한 정보를 요청하는 것 (프론트 => 서버)
  • 요청하는 정보 자체는 Request 객체가 관리한다.

 

응답 (Response)

  • 웹 브라우저의 요청에 대해 서버가 응답하는 것 (서버 => 프론트)
  • 응답하는 정보 자체는 Respons 객체가 관리한다.
 

Stateless

  • 웹은 기본적으로 클라이언트와 서버간에 서로 직접적인 연결이 되어 있지 않다.
  • 각각의 HTTP 통신은 독립적이며, 그 전에 처리된 HTTP 통신에 대해 알 수 없다.
  • 따라서 서버에서 보낸 HTTP 요청에 대해 클라이언트는 독립적으로 응답만 보내면됨
  • HTTP의 Stateless를 보완(통신상태 저장, 유지)하기 위한 쿠키(Cookie), 세션(Session)등이 존재
 

쿠키 (Cookie)

  • 웹 브라우저(클라이언트)가 웹 사이트에서 보내온 정보를 저장 (Token을 쿠키에 저장)

 

세션 (Session)

 

요청 (Request) 메시지 구조

구분 역할 example
1. Start Line HTTP Method +
Request target +
HTTP Version

HTTP Method : 요청이 의도한 액션. : GET, POST, PUT, PATCH, DELETE
Request target: 전송 목표 url
HTTP Version: 사용되는 HTTP 버전 (주로 1.1 버전이 널리 쓰임)

2. Headers 요청에 대한 추가 정보(=메타 데이터)
Headers:{
   Host: 요청을 보내는 목표(기본) 주소 (ex. www.apple.co.kr)
   User-Agent: 요청을 보내는 클라이언트의 대한 정보 (ex. chrome, firefox)
   Content-Type: 요청 Body 타입 (ex. application/json, text/csv, image/png..)
   Accept : 받을 수 있는 응답(response) Body의 타입
   Content-Length: body 내용의 길이
   Authorization: 회원의 인증/인가 처리를 위한 로그인 토큰이 담기는 곳
}

3. Body 실제 데이터 부분
POST /payment-sync HTTP/1.1
Accept: application/json
Connection: keep-alive
Content-Length: 83
Content-Type: application/json
{
    'uid:'a123',
    'status':'paid'
}

 

 

응답 (Response) 메시지 구조

구분 역할 example
1. Start Line HTTP Method + 
Request target + 
HTTP Version

HTTP 응답 메시지의 상태 알려줌
HTTP Version: 사용되는 HTTP 버전 (주로 1.1 버전이 널리 쓰임)
Status Code : HTTP 응답 상태 숫자 코드
Status Text : 숫자 코드 보완용 Text

2. Headers 요청에 대한 추가 정보(=메타 데이터)
요청의 헤더와 유사

Headers:{
   Host: 요청을 보내는 목표(기본) 주소 (ex. www.apple.co.kr)
   User-Agent: 요청을 보내는 클라이언트의 대한 정보 (ex. chrome, firefox)
   Content-Type: 요청 Body 타입 (ex. application/json, text/csv, image/png..)
   Accept : 받을 수 있는 응답(response) Body의 타입
   Content-Length: body 내용의 길이
   Authorization: 회원의 인증/인가 처리를 위한 로그인 토큰이 담기는 곳
}

3. Body 실제 데이터 부분
(요청과 거의 동일)

HTTP/1.1 404 Not Found
Connection : close
Content-Length : 1573
Content-Type : text/html; charset=UTF-8
Body: {
"message": "Failed"
"token": "ksdkfnknsdjf" (암호화된 유저 정보)
}