HyperText Transfer Protocol 의 약자로 웹 상에서 서버와 클라이언트 간에서 데이터를 요청, 응답 하기 위한 정형화된 약속(규약) 입니다.
예시를 들어서 살펴보면, A(사람 = 클라이언트) 가 B(창고 = 서버)에게 창고 안에 있는 물건들의 무언가를 요청하려고 합니다. A는 B에게 막무가내로 물건을 요청할 수 없습니다. 서로간의 약속이 필요하죠. 예를 들어 어떤 물건을 요청할 것인지, 물건을 달라고 할수도 있으며 물건을 버려달라고 할수도 있고 물건을 바꿔달라고 혹은 새로 채워달라고 할수도 있습니다. 이때 B는 요청을 하는 A가 인증을 받은 사람인지, 어떤 요청을 하는지 등을 알아야 할 필요가 있고, 이 요청을 처리하려면 서로간의 일관된 약속이 필요합니다. 이 일관된 약속을 우리가 HTTP 프로토콜이라고 부르는 것입니다.
클라이언트 는 우리가 사용하는 브라우저 (예를 들어 Chrome, Safari, Edge..) 등이 있고, 서버는 브라우저에서 요청을 보내는 목적지를 말하게 됩니다.
우리가 사용하는 HTTP 버전은 HTTP 1.1 버전이고, 기본 포트는 80번 입니다. 또한 HTTP는 TCP/IP 프로토콜 위에서 동작합니다.
HTTP 프로토콜은 Connectionless 입니다. 서버와 클라이언트 간 연결이 지속된게 아닌, 한번 요청으로 연결이 끊긴다는 이야기 입니다. 클라이언트의 접속 유지를 최소화 하기 때문에 서버는 다수의 요청을 처리할 수 있습니다.
Connectionless 에서 파생된 특성인데, 서버는 요청에 대한 응답으로 연결을 끊어버리기 때문에 클라이언트의 상태를 유지할 수 없습니다. 그렇기 때문에 클라이언트의 이전 요청과 현재 요청은 서로 관련이 없는 독립적인 상태이게 됩니다.
http://www.localhost:8080/api/common/code?name=thomas
http 는 프로토콜 을 의미합니다.
www.localhost 는 호스트 를 의미합니다.
8080 은 포트번호 를 의미합니다.
api/common/code 는 요청하는 자원의 경로를 의미합니다.
?name=thomas 은 query 입니다.
HTTP 에는 주료 사용하는 4가지 메서드가 있습니다. GET, POST, PUT, DELETE 입니다.
HTTP 요청을 보내 응답을 받을때 클라이언트에서는 상태 코드를 받게 됩니다. 상태 코드는 숫자로 되어있는데, 상태 코드를 통해 우리의 요청이 성공했는지, 실패했는지, 실패했다면 어떤 이유로 실패했는지 알 수 있습니다. 간단하게 어떤 상태코드가 있는지 살펴보면..
HTTP 프로토콜의 Stateless 특성으로 인해서 서버는 클라이언트의 정보를 기억할 수 없습니다. 그렇기 때문에 클라이언트는 요청 시에 쿠키나 헤더에 항상 인증 토큰을 담아서 요청하게 됩니다.
다음 학습에서는 쿠키와 브라우저 스토리지에 대해서 학습할 예정입니다.
지금 남기는 기록은 캡틴판교님의 HTTP 프로토콜을 참고하였습니다. 양질의 정보를 남겨주셔서 감사합니다.
캡틴 판교님의 포스팅
https://joshua1988.github.io/web-development/http-part1/