- Published on
HTTP 통신에 대하여
- Authors
- Name
- piano cat
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 메세지는 요청메세지와 응답메세지로 구분한다.
- HTTP 요청 메세지 예시
GET /search?q=test&m=ko HTTP/1.1
Host: www.google.com
(CRLF)
message body
- 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(서버 오류)
Header
요청헤더
필드이름: 필드값
요청헤더엔 다양한 값들이 있지만 대표로 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
참고