HTTP 첫번째 프로토콜

Jan 30, 2024
HTTP 첫번째 프로토콜

[ HTTP 첫번째 프로토콜(1.1) ]

클라이언트 > 서버

notion image
클라이언트가 서버에게 login.html의 내용을 요청하면, 서버는 해당 내용을 클라이언트에게 보내주게 되는데, 이때, 요청과 응답의 데이터는 HTTP 프로토콜을 통해 주고 받게 된다. HTTP 요청은 일반적으로 1. 헤더(Header)와 2. 바디(Body)로 구성된다. 헤더는 요청의 meta데이터(데이터에 대한 정보를 설명하는 데이터)를 담고 있으며, 바디는 실제 데이터를 담고 있다. 클라이언트 > 서버의 header와 body는 request http header / request http body 라고 불린다.
 

GET 요청

GET 요청은 HTTP 프로토콜에서 사용되는 요청 방식 중 하나이며, 클라이언트가 서버로부터 정보를 요청하는 목적으로 사용한다.
GET 요청은 서버에게 어떤 리소스를 달라고 요청하는 것이라 바디에 데이터를 담지 않는다. (줄 게 없다) 대신 헤더에는 요청의 종류(GET), URL, 클라이언트의 주소(출발지 주소)가 담긴다. (*목적지 주소(ip)는 URL에 포함되어 있기 때문에 생략)
그럼 서버는, 제일 처음에 GET을 본다. GET인거 확인하면 아, 바디 없구나? 하고 바디를 버림 이후 URL을 파싱해서 자원명을 확인, 자원을 찾고, 읽고, 자기 버퍼에 담아놓는다, 최종적으로 출발지 IP주소를 확인해서 응답해서 쏘는 것!
💡
파싱은 데이터를 분석하고 원하는 형식으로 추출하는 과정… 번역
 

서버 > 클라이언트 (+ MIME + Stateless)

notion image
서버 > 클라이언트의 header와 body는 response http header / response http body 라고 불린다. response http header에는 출발지 IP, 목적지 IP, MIME, UTF-8 response http body에는 클라이언트가 요청한 .html의 내용이 들어간다.

MIME 타입

데이터의 형식을 나타내며, 웹 서버가 클라이언트에게 전송하는 데이터의 형식을 명시(식별)하기 위해 사용 * 웹에서는 파일의 확장자가 아닌 MIME 타입을 통해 데이터의 형식을 식별하므로 확장자가 의미 없고 (확장자를 사용하면 파일의 확장자에 종속되는듯?), MIME 타입을 통해 데이터의 형식을 식별한다. (MIME은 파일 확장자를 대체하는 개념...정도로 이해하면 될 듯) 이를 통해 클라이언트는 수신한 데이터의 형식을 확인하고 적절한 처리 방식을 선택할 수 있다.
데이터를 받으면 클라이언트는 1. 출발지 주소 (데이터를 보낸 서버의 주소)를 확인한다 2. 목적지 주소 (클라이언트 자신의 주소)를 확인한다. (이 데이터가 나(클라이언트)한테 온게 맞는지~ 확인하기 위함) 3. MIME 타입 확인 만약, HTML인 경우 text/html이라는 MIME타입을 가지게 되고, 클라이언트가 이 MIME 타입 확인 -> 데이터 형식 파악 -> 형식에 맞는 데이터 처리
💡
"text/html"은 HTML 문서를 나타내는 타입으로, 웹 페이지의 콘텐츠가 HTML 형식임을 나타냄
 

Stateless

클라이언트와 서버 간의 통신에서 상태를 유지하지 않는 것을 의미 (요청 다 받았지? 연결 끊는다! 하는 것) 서버는 각각의 요청을 받을 때마다 해당 요청에 대한 처리를 하고, 응답을 보내면 연결을 끊는다. 이후에 다시 클라이언트로부터 요청이 오면 새로운 연결을 맺고 처리를 진행하는 것. 즉, 상태를 유지하지 않는다. (=클라이언트의 이전 상태나 정보를 서버가 기억하지 않는다!) (=반이중 통신!)
 

+

지금은 HTTP2 까진가 나와서... 조금 다르긴하지만 개념을 이해하는데 문제 없다.
💡
APP의 버퍼트 라이터에 GET, 출발지 아이피 주소, URL이 막 섞여있는 상태다. 즉, 버퍼에 이 header, body 데이터들이 다 싸잡아서 들어있는 것. 이걸 구문하기 위해 head, body가 있다.
notion image
💡
여기에 나오는 헤더랑 바디는 세그먼트에 붙는 헤더랑 완전 다름, 세그먼트의 헤더는 os가, 이 헤더, 바디는 우리(APP)가!
 

웹에서 살펴보는 Headers [F12]

notion image
캐싱 → 클라이언트가 서버로부터 받은 자원(예: 이미지, 문서 등)을 일시적으로 저장하는 것 이렇게 저장된 자원은 클라이언트가 다시 요청할 때 재다운로드하지 않고 캐시에서 바로 가져와 사용할 수 있다.
Pragma 헤더의 "no-cache" 클라이언트는 매 요청마다 캐시된 자원을 무시하고 서버로부터 항상 최신 자원을 받아온다. 즉, 클라이언트가 Pragma 헤더에 "no-cache"를 포함한 요청을 보낼 때마다 서버는 항상 새로운 사진을 제공한다. (요청할 때마다 계—속 사진이 바뀐다)
콘텐트 타입 → TEXT/html 이게 바로 MIME
 

 
notion image
User-Agent 이 헤더는 클라이언트의 장치나 브라우저 정보를 서버에 전달하고, 서버는 이를 기반으로 요청에 맞는 콘텐츠를 제공. 이를 통해 서버는 요청한 클라이언트의 브라우저 종류, 버전, 운영 체제 등을 알 수 있다. (ex. 나는 크롬이다, 나는 Edge다.)
 

 
💡
여기 있는 값들은 프로토콜만 알면 다 바꿀 수 있다. 해킹도 하고, 장난도 칠 수 있다는 말. 그래서 보안이 발전하는 것!
💡
원래 html은 보안이 중요하지 않았다. 하지만 아이디, 패스워드 등 의미 있는 개인정보들을 주기 시작하면서 보안이 중요해지고, 이 보안 때문에 프로토콜이 발전함!
 
 
Share article

codingb