HTTP protocol

heyj·2022년 3월 15일
0

네트워크

목록 보기
1/3
post-thumbnail

14일 진행했던 모의면접에서 네트워크 지식이 얼마나 없는지 새삼 깨달았습니다.
알아야 할 내용은 산더미이지만 일단 가장 기초적인 것부터 정리해보기로 했습니다.

HTTP

HTTP는 HTML 문서와 같은 리소스들을 가져올 수 있도록 해주는 프로토콜입니다. HTTP는 웹에서 이루어지는 모든 데이터 교환의 기초이고, client-server protocol(통신규약)이기도 합니다.

1. Stateless, Connectionless

HTTP 통신은 응답 후 연결을 끊고 과거에 대한 정보를 담지 않는 무상태(stateless)가 특징입니다. 따라서 로그인 등 유저의 상태를 알아야 응답할 수 있는 요청이라면, HTTP 요청에는 반드시 정보를 담아야 합니다. 요청과 응답의 진행과정에서 데이터가 필요한 경우, 쿠키나 세션 등을 사용하게 됩니다.

TCP/IP의 경우 기본적으로 연결을 유지합니다. HTTP는 비연결성(connectionless) 특징을 가지고 있어 실제로 요청을 주고 받을 때만 연결을 유지하고, 응답을 주고 나면 TCP/IP 연결을 끊습니다.

비연결성은 최소한의 자원으로 서버 유지를 가능하게 하는 장점이 있지만, HTTP요청은 HTML, CSS, JS, 이미지 등 수많은 자원이 함께 다운로드 되기 때문에 연결을 끊고 다시 연결하는 방식은 비효율적입니다. 그래서 지금은 HTTP 지속 연결(Persistent Connections)을 이용해 연결이 이루어지고 난 뒤 각각의 자원들을 요청하고 모든 자원에 대한 응답이 돌아온 후 연결을 종료합니다.

HTTP 메세지의 구조는 헤더와 바디로 구성됩니다. 헤더에는 요청에 대한 정보가 들어가고 바디에는 서버로 보내야할 데이터가 담깁니다.

2. HTTP message

요청(request)와 응답(response)은 다음과 같은 구조를 가집니다.

  1. start line: start line에는 요청이나 응답의 상태를 나타냅니다. 응답에서는 status line이라고 부릅니다.
  2. headers: 요청을 지정하거나 메시지에 포함된 본문을 설명하는 헤더의 집합입니다.
  3. empty line: 헤더와 본문을 구분합니다.
  4. body: 요청과 관련된 데이터나 응답과 관련된 데이터 또는 문서를 포함합니다. 요청과 응답의 유형에 따라 선택적으로 사용합니다.

start line과 HTTP headers를 묶어 요청이나 응답의 head라고 하고, payload는 body라고 말합니다.

Request

1) Start line

요청 메세지의 start line에는 3가지 요소가 있습니다.

  • HTTP method
  • 요청대상(일반적으로 URL, URI)또는 프로토콜, 포트, 도메인의 절대 경로(origin, absolute, authority, asterisk 형식으로 작성)
  • HTTP 버전

2) headers

요청의 headers는 '헤더 이름: 값'으로 입력합니다. 헤더의 종류에는 general headers, request header, representation headers가 있습니다.

  • general headers: 메세지 전체에 적용되는 헤더
  • request headers: fetch를 통해 가져올 리소스나 클라이언트 자체에 대한 자세한 정보를 포함하는 헤더
  • representation headers: body에 담긴 리소스의 정보를 포함하는 헤더

3) body

GET, HEAD, DELETE, OPTIONS처럼 서버에 리소스를 요청하는 경우 본문은 필요 없지만, POST, PUT과 같은 일부 요청은 데이터를 업데이트 하기 위해 body가 필요합니다.

  • single-resource bodies(단일-리소스 본문): 헤더 두 개(content-type과 content-length)로 정의된 단일 파일로 구성
  • multiple-resource bodies(다중-리소스 본문): 여러 파트로 구성된 본문에서 각 파트마다 다른 정보를 지님

Response

1) status line

응답의 첫 줄은 status line이라고 부르며 현재 프로토콜 버전, 상태 코드(200, 302, 404 등), 상태 텍스트가 담깁니다.

2) headers

응답에 들어가는 HTTP headers는 요청 헤더와 동일한 구조를 가집니다. 요청헤더와 마찬가지로 general, response, representation headers로 나눌 수 있습니다.

  • general headers: 메세지 전체에 적용되는 헤더
  • response headers: 위치 또는 서버 자체에 대한 정보 등 응답에 대한 부가적인 정보를 갖는 헤더
  • representation headers: body에 담긴 리소스 정보를 포함하는 헤더

3) body

응답의 본문도 2가지로 나뉠 수 있습니다.

  • single-resource bodies(단일-리소스 본문)
  • multiple-resource bodies(다중-리소스 본문)

참고

https://cotak.tistory.com/59
https://tansfil.tistory.com/58
https://documentation.help/DogeTool-HTTP-Requests-vt/http_request.htm

0개의 댓글