HTTP, HTTP 메서드 본문

HTTP란 무엇인가에 관한 나의 궁금증은 의외로 매우 사소한 부분에서 시작되었다. 

 

포트폴리오 웹 페이지를 만들고 있는데, 리액트로 만들어서 vercel로 배포를 하고 보니 포트폴리오 페이지 치고 url이 너무 맘에 들지 않았다. 이왕이면 이것은 나를 소개하는 페이지!! 라는 게 url에 똻!! 하고 보였으면 좋겠어서, 6,600원을 주고 1년짜리 내 이름으로 된 도메인을 구입했는데, 

 

http://를 쓰면 정상적으로 웹 페이지가 뜨는데 https://를 쓰면 페이지가 아예 뜨지 않는 것이다.

 

대충 https://와 http://는 보안과 관련된 부분에서 차이가 난다는 것까지는 알고 있었지만, 만약에 내 이름 도메인을 https://를 써서 연결하고 싶으면 어떻게 해야 하나 찾아보니 무슨 인증서를 또 따로 구매를 해야 하고 등등 뭐가 복잡해지는 것 같기에 그냥 포기했다. 그러고 보니 궁금한 거다. 우리가 늘상 쓰는 http란 무엇인가??

 

mdn의 설명에 따르면 "하이퍼텍스트 전송 프로토콜(HTTP)은 HTML과 같은 하이퍼미디어 문서를 전송하기위한 애플리케이션 레이어 프로토콜입니다."라고 되어 있다. 말이 조금 어려운데, 'HTTP 완벽 가이드'의 제1장에 소개된 첫 문장을 보면  HTTP는 현대 인터넷의 공용어로서, 전 세계의 웹브라우저, 서버, 웹 애플리케이션은 모두 HTTP를 통해 서로 대화한다, 고 한다. 쉽게 이해해보자면 HTTP는 하나의 언어이자, 그 언어 사용에 대한 일종의 규칙, 규약과 같은 것이라고 볼 수 있겠다. 전 세계의 모든 인터넷이 HTTP를 통해 통신한다. 우리는 인터넷을 통해 사진을 보고, 영상을 보고, 텍스트를 보고, 파일을 내려받는 등 정말 정말 다양한 일들을 수행하는데, 그 모든 것들이 HTTP라는 정해진...방식? 틀? 규약? 에 맞춰 일어나는 것이다. 'HTTP 완벽 가이드' 책에서는 HTTP를 "인터넷의 배달원"이라고도 표현하고 있다.

 

HTTP가 인터넷의 배달원이라면 배달할 무언가가 있어야 할 터. 이를 HTTP 메시지라고 일컫는다. 모든 HTTP 메시지는 요청 메시지와 응답 메시지로 구분된다. '모든'이라고 했으니 HTTP는 오직 '요청'과 '응답'으로만 이루어진다는 얘기다. 요청을 하는 컴퓨터를 클라이언트, 그 요청을 받아 응답을 보내주는 컴퓨터를 서버라고 한다. (받는다는 뜻에서 server...)

 

서버에는 수많은 종류의 리소스들이 있다. 리소스는 웹 콘텐츠의 원천으로서, 가장 단순하게는 html파일부터 시작해 모든 종류의 파일을 포함한다. 클라이언트는 서버에 어떠한 특정 리소스에 대하여 어떠한 요청을 보내면, 서버는 열심히 리소스를 뒤져서 클라이언트가 요청한 것을 찾아 응답을 돌려주는 식인데, 이 때 리소스를 구분하는 리소스의 위치, 리소스의 이름을 URL이라고 한다. (더 정확하게 말하자면 리소스의 이름은 URI, Uniform Resource Identifier이고 URL은 Uniform Resource Locator로서 위치를 통해 리소스를 구분하는 형태를 뜻하며 URL은 URI의 부분집합이지만, 현실적으로 오늘날 거의 대부분이 URI가 URL로 쓰이고 있으므로 URL이라고 표현했다.)

 

 

 

요청 메시지의 형식은 다음과 같다.

---------------------------------

<메서드><요청 URL><버전>

<헤더>

 

<엔터티 본문>

---------------------------------

 

 

응답 메시지의 형식은 다음과 같다.

---------------------------------

<버전><상태코드><사유 구절>

<헤더>

 

<엔터티 본문>

---------------------------------

 


 

요청 메시지 - HTTP 메서드:

GET, HEAD, POST, PUT, TRACE, OPTIONS, DELETE

 

GET (조회)

클라이언트가 서버에 리소소를 가져오도록 요청하기 위해 쓰이는 메서드. 

 

HEAD

GET처럼 동작하지만, 서버는 응답으로 헤더만을 돌려준다. 클라이언트가 리소스 전체가 필요하지 않고 헤더에 들어있는 정보만 필요할 때 쓰인다. 

 

POST(생성)

클라이언트가 입력한 데이터를 서버에 전송하는 메서드. post 영어 단어 뜻 그대로 데이터를 실어 부친다고 이해하면 쉽다. POST 요청은 보통 <fom>요소나 <input>, <button> 요소를 통해 이루어지며, 서버에 변경사항을 만든다.

 

PUT(수정)

서버 안에 있는 콘텐츠의 내용을 변경하게 만드는 메서드이다. PATCH는 부분 수정, PUT은 전체 수정.

 

PATCH

리소스의 부분적인 수정을 사용할 때 쓰이는 메서드.

 

TRACE

앞에서 설명을 하진 않았지만, 클라이언트와 서버 사이에는 방화벽, 프락시, 게이트웨이 등 많은 애플리케이션이 있을 수 있다. 이 때 원래의 HTTP 요청을 수정할 수 있는 기회가 생기는데, TRACE 메서드는 클라이언트에게 자신의 요청이 서버에 도달했을 때 어떻게 보이게 되는지 알려준다.

 

OPTIONS

웹 서버에게 여러 가지 종류의 지원 범위에 대해 물어본다. 서버에게 특정 리소스에 대해 어떤 메서드가 지원되는지 물어볼 수 있다. 

 

DELETE(삭제)

서버에게 해당 리소스를 삭제할 것을 요청하는 메서드이다.