저번 HTTP 1편 포스트에서 HTTP에 대한 개념과 특징에 대해서 알아보았습니다. 이번 포스트에서는 실제로 HTTP 통신을 어떤식으로 하는지 공부해보겠습니다.
HTTP 프로토콜에서 서버와 클라이언트 간의 통신은 여러 줄의 텍스트로 이루어진 Message를 주고 받으며 이루어집니다. 사실 처음 HTTP를 보았을 때는 뭔가 프로토콜이라는 어려운 이름도 있고 인터넷에서 쓰이는 방식이니 통신에 특별한 구조(?)를 사용하지 않을까 싶었었는데 그냥 정말 단순한 텍스트였습니다.
HTTP의 한 예시를 들어보았습니다. 보시는 것처럼 여러 정보가 들어가 있는 하나의 텍스트입니다. 그렇지만 우리가 채팅을 하듯이 단순한 텍스트는 아니겠죠?
프로토콜은 '데이터 전달과 전송에 대한 규칙' 이라고 했습니다. 따라서 하나의 프로토콜은 다른 프로토콜과 구분이 될 수 있는 규칙이 있습니다. 그 규칙 중 하나로 위의 HTTP Message에는 주고 받는 방식과 특별한 구조가 정해져 있습니다.
HTTP에서는 클라이언트와 서버는 Request와 Response의 방식으로 서로 소통을 합니다. 클라이언트는 Request(요청)을 하고 서버는 그에 대한 Response(응답)을 하는 방식이죠. 즉 서버는 클라이언트의 요청 없이 Message를 보낼 수 없습니다.
저는 현재 이전 포스트인 HTTP 1편의 글을 열어보려고 주소창에 해당 주소를 넣고 enter를 친 상황입니다. 물론 해당포스트를 모두 받아오려면 html
, css
, js
, 이미지 파일
등등 많은 것들을 Request 하고 가져와야 하지만 html
만 예시로 들어보겠습니다.
GET /@skydreamer21/HTTPs1 HTTP/2
/@skydreamer21/HTTPs1
를 가져와줘!(GET
) Host: velog.io Cache-Control: max-age=0 ... Accept-Language: ko-KR,ko;q=0.9,en-US;q=0.8,en;q=0.7
(위의 예시에서 start line을 제외한 나머지 부분)
Header와 Body를 구분해주는 한 개의 empty line 입니다.
GET
을 활용할 때는 대부분 body가 없습니다. (현재 위의 예시 또한 Body가 없는 request입니다.) 하지만 블로그에 글을 써서 올리고 싶을 때는 제가 쓴 글을 서버에 전달을 해줘야겠죠? 이런 경우처럼 클라이언트 측에서 입력한 데이터를 보내야 할 때는 body가 있습니다. 이 때 쓰는 HTTP method POST
입니다.앞선 저의 HTTP 1편 포스트에 대한 Request의 결과로 위와 같은 Response가 왔습니다. Response의 Message 또한 구조는 Request와 동일합니다.
HTTP/2 200 OK
404
일 것입니다. (기분이 안좋아지기도 하구요🙁)200
은 정상적으로 처리되었을 때의 Status Code입니다.404 Error
페이지를 찾을 수 없습니다.
Date: Sun, 02 Oct 2022 06:57:37 GMT Content-Type: text/html; charset=utf-8 Content-Length: 97992
📝
Date
헤더 정보
Date는 말그대로 해당 Message의 날짜와 시간을 나타낸 것으로 Requset, Response 모두에 담길 수 있습니다. 이러한 헤더 구성요소를 가리켜서 General Header라고 합니다.
Request와 동일합니다. (Header와 Body 구분)
HTTP 2편에서는 HTTP을 사용한 통신방식과 그 주체라고 할 수 있는 message에 대하여 알아보았습니다. 그 과정에서
에 대해서 큰 틀을 공부해보았구요.
다음 HTTP 3편에서는 좀 더 세부적으로 들어가 message의 요소에 대한 글을 써볼까 합니다. Header에 수많은 정보가 들어가기 때문에 Header에 대해서도 다루어 볼 예정입니다.