14일 진행했던 모의면접에서 네트워크 지식이 얼마나 없는지 새삼 깨달았습니다.
알아야 할 내용은 산더미이지만 일단 가장 기초적인 것부터 정리해보기로 했습니다.
HTTP는 HTML 문서와 같은 리소스들을 가져올 수 있도록 해주는 프로토콜입니다. HTTP는 웹에서 이루어지는 모든 데이터 교환의 기초이고, client-server protocol(통신규약)이기도 합니다.
HTTP 통신은 응답 후 연결을 끊고 과거에 대한 정보를 담지 않는 무상태(stateless)가 특징입니다. 따라서 로그인 등 유저의 상태를 알아야 응답할 수 있는 요청이라면, HTTP 요청에는 반드시 정보를 담아야 합니다. 요청과 응답의 진행과정에서 데이터가 필요한 경우, 쿠키나 세션 등을 사용하게 됩니다.
TCP/IP의 경우 기본적으로 연결을 유지합니다. HTTP는 비연결성(connectionless) 특징을 가지고 있어 실제로 요청을 주고 받을 때만 연결을 유지하고, 응답을 주고 나면 TCP/IP 연결을 끊습니다.
비연결성은 최소한의 자원으로 서버 유지를 가능하게 하는 장점이 있지만, HTTP요청은 HTML, CSS, JS, 이미지 등 수많은 자원이 함께 다운로드 되기 때문에 연결을 끊고 다시 연결하는 방식은 비효율적입니다. 그래서 지금은 HTTP 지속 연결(Persistent Connections)을 이용해 연결이 이루어지고 난 뒤 각각의 자원들을 요청하고 모든 자원에 대한 응답이 돌아온 후 연결을 종료합니다.
HTTP 메세지의 구조는 헤더와 바디로 구성됩니다. 헤더에는 요청에 대한 정보가 들어가고 바디에는 서버로 보내야할 데이터가 담깁니다.
요청(request)와 응답(response)은 다음과 같은 구조를 가집니다.
start line과 HTTP headers를 묶어 요청이나 응답의 head라고 하고, payload는 body라고 말합니다.
요청 메세지의 start line에는 3가지 요소가 있습니다.
요청의 headers는 '헤더 이름: 값'으로 입력합니다. 헤더의 종류에는 general headers, request header, representation headers가 있습니다.
GET, HEAD, DELETE, OPTIONS처럼 서버에 리소스를 요청하는 경우 본문은 필요 없지만, POST, PUT과 같은 일부 요청은 데이터를 업데이트 하기 위해 body가 필요합니다.
응답의 첫 줄은 status line이라고 부르며 현재 프로토콜 버전, 상태 코드(200, 302, 404 등), 상태 텍스트가 담깁니다.
응답에 들어가는 HTTP headers는 요청 헤더와 동일한 구조를 가집니다. 요청헤더와 마찬가지로 general, response, representation headers로 나눌 수 있습니다.
응답의 본문도 2가지로 나뉠 수 있습니다.
참고
https://cotak.tistory.com/59
https://tansfil.tistory.com/58
https://documentation.help/DogeTool-HTTP-Requests-vt/http_request.htm