HTTP(Hypertext Transfer Protocol)
클라이언트와 서버 사이 하이퍼텍스트 기반 데이터를 전송하는 프로토콜이다.
하이퍼텍스트는 링크가 담긴 텍스트이다. html 를 뜯어보면 다른 페이지를 갈 수 있는 링크가 달려 있고, css나 이미지와 같은 리소스를 가져올 수 있는 링크가 입력되어 있다.
클라이언트(브라우저, 앱 프로그램)은 서버에 특정 자료 혹은 페이지에 대한 요청을 보낸다. 클라이언트는 절대 응답하지 못하여 서버가 될 수 없다.
서버는 클라이언트와 반대로 클라이언트의 요청에 응답해주는 존재이다.
HTTP 프로토콜은 클라이언트와 서버로 구성되고, 요청과 응답이라는 액션으로 작동한다.
HTTP가 프로토콜이라고 했으니 실제로 http를 어떻게 사용하는지 알아 보자. 특정 웹 페이지 혹은 리소스를 요구하는 프로토콜이기 때문에 자료 위치를 표현하는 방법을 이해해야 한다. URI (Uniform Resource Identifier)의 하위에 URN(Uniform Resource Name)와 URL (Uniform Resource Locator) 이 존재한다. URN은 특정 네임스페이스로 리소스를 식별하는 방식이다. 웹 브라우저에서 주로 URL를 사용하기 때문에 URL의 구성 요소를 살펴보자
예를 들어,
http://www.example.com/path/to/index.html?key1=value1&key2=value2#somethingFragment
http://
→ 스키마 혹은 프로토콜 / 여러가지 프로토콜이 나올 수 있음.
[www.example.com](http://www.example.com)
→ 도메인 네임
:80 → 포트 번호
포트는 웹서어 리소스에 접근하기 위한 기술적인 게이트이다. http는 80번 포트를, https는 443번 포트를 사용한다. 일반적으로 사용할 때, 브라우저 혹은 프로그램에서 포트를 입력받지 않아도 자동으로 생성한다.
/path/to/myfile.html → 리소스 경로
?key1=value1&key2=value2 → 쿼리
#somethingFragment → 앵커 , 일종 북마크
앞서 설명했듯 HTTP는 요청과 응답만 존재하기 때문에 응답이 끝나고 클라이언트와 서버가 다시 연결되더라도 이전의 클라이언트 상태를 서버가 기억하지 못한다. 무상태 특성 덕분에 서버는 불특정 다수 클라이언트의 요청을 처리할 수 있고, 서버의 부담을 줄일 수 있다. 또한, 서버의 스케일 아웃, 로드밸런싱 등 효율적으로 서버 자원을 관리할 수 있다.
두 개체가 지속적인 데이터 송수신을 기대하고 지속적인 연결을 유지하는 소켓과 달리, HTTP는 비연결성 프로토콜이다. 클라이언트의 요청과 서버의 응답이 끝나면 클라이언트와 서버 간 연결이 끊긴다.