Published on

HTTP 통신에 대하여

Authors
  • avatar
    Name
    piano cat
    Twitter

HTTP 란?

하이퍼 텍스트 트랜스퍼 프로토콜이다. 현재는 모든 데이터를 프로토콜에 담아서 전송한다.

Requset / Response 구조이며, 클라이언트에서는 서버에 요청을 보내고 서버는 응답한다.

Stateless

HTTP 통신은 Stateless 한 특징을 가지고 있다. 즉 서버는 클라이언트의 상태를 보존하지 않는다.

stateful vs stateless

Stateful을 상태를 유지해야하기때문에 항상 같은 서버가 유지되어야한다. Stateless는 상태를 보관하지않으므로, 새로운 서버를 추가로 증설해도 상관이 없다.

즉, Stateless 한 HTTP 프로토콜은 서버 확장성 높은 장점이 있지만 단점으로는 클라이언트에서 모든 정보를 전송해주어야한다.

하지만 모든것을 stateless 로 설계할 수 없다. 만약 로그인한 상태를 서버에서 알고 있어야한다면, 로그인한 상태를 서버에 유지 시켜주어야한다. 이런 경우 브라우저 쿠키, 서버 세션 등을 사용하여 상태를 유지한다.

Connectionless

클라이언트가 서버에 요청을 하고 응답을 받으면 바로 TCP/IP 연결을 끊어 연결을 유지 하지 않는다

즉, 이를 통해 서버자원을 효율적으로 사용할수 있게 된다.

HTTP 메세지

Start-line
Header
(CRLF)
Message body

HTTP 메세지는 요청메세지와 응답메세지로 구분한다.

  1. HTTP 요청 메세지 예시
GET /search?q=test&m=ko HTTP/1.1
Host: www.google.com
(CRLF)
message body
  1. HTTP 응답 메세지 예시
HTTP/1.1 200 OK
Content-Type: text/html;charset=UTF-8
Content-Length: 4432
(CRLF)
message body

Start-line

요청메세지는 request-line 이라고 부른다.

ex)

GET /search?q=test&m=ko HTTP/1.1

HTTP 메서드 (공백) 요청대상 (공백) HTTP 버전

응답메세지는 status-line 이라고 부른다.

ex)

HTTP/1.1 200 OK

HTTP 버전(공백) 상태코드(공백) 상태문구

상태코드 예시: 200(성공), 300(리다이렉트), 400(클라이언트오류), 500(서버 오류)

요청헤더

필드이름: 필드값

요청헤더엔 다양한 값들이 있지만 대표로 Host, User-Agent, Accept, cookie, Referer 등이 있다. ex)

Host: www.google.com
Accept: */*
Cookie: __gads=ID=9f6eba5bdabb2975-2215604f90e2002d
Referer: http://localhost:3000/
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/117.0.0.0 Safari/537.36

응답헤더

필드이름: 필드값 요청헤더도 마찬가지로 다양한 값들이 있지만 대표로 Server, content-type, Cache-Control, Date, set-cookie 등이 있다.

ex)

Cache-Control: no-cache, no-store, max-age=0, must-revalidate
content-type: application/json; charset=UTF-8
Server: GSE
Date: Wed, 15 Nov 2023 05:48:49 GMT
set-cookie: SIDCC=ACA-OxOPi1Uy_FsGceXgvJwP4GnCZ8o9fxgIhBLdlzcv, 14-Nov-2024 05:48:49 GMT; path=/; domain=.google.com; priority=high

참고