HTTP (HyperText Transfer Protocol)
HTTP는 HTML 문서 등의 데이터를 주고받기 위한 프로토콜(통신 규약)이다. HTTP에서의 통신은 클라이언트 측에서 데이터를 요청하는 request와 그에 대한 서버 측의 응답인 response로 이루어진다. 그렇기 때문에 HTTP는 클라이언트-서버 프로토콜이다. 여기서 클라이언트는 사용자를 대신하는 개체인 사용자 에이전트를 의미하는데 대부분의 경우에는 브라우저이지만 API 테스트용 개발자 도구인 Postman과 같이 그 외의 경우도 존재한다. 참고로 HTTP는 OSI 7 계층 중 어플리케이션 레벨에 속하는 프로토콜로 기본 포트 번호는 80번이다. (HTTPS의 기본 포트는 443)
HTTP의 특징 중 하나는 확장성이 뛰어나다는 것이다. 클라이언트와 서버가 새로운 통신 헤더 시멘틱에 대해 합의한다면 얼마든지 새로운 기능을 추가할 수 있다. 그렇기 때문에 하이퍼텍스트 문서를 가져오기 위해 처음 등장한 HTTP를 현재는 미디어 전송, 폼 제출 등 다양한 방면으로 활용할 수 있게 되었다.
HTTP의 가장 중요한 특징은 상태가 없다는 것이다. (stateless) 그렇기 때문에 이전 request와 그 다음 request는 서로 아무런 관련이 없다. 서버가 request에 대한 정보를 저장하지 않는다는 것은(세션 등이 없음) 서버 리소스 부담의 경감을 의미한다. 그렇지만 HTTP 쿠키를 이용하면 서버에 부담을 주지 않으면서 상태가 있는 세션을 만들 수 있다. HTTP 통신 헤더의 확장성을 통해 HTTP 쿠키가 추가되면 각 request가 동일한 컨텍스트 및 상태를 유지할 수 있게 된다.
HTTP가 웹 통신의 근간으로 자리잡으면서 점점 더 많은 웹의 기능을 통제하는 것이 가능해졌다. HTTP를 통해 통제 가능한 대표적인 웹의 기능들은 다음과 같다.
(1) 캐시 : HTTP로 문서가 캐시되는 방식(대상, 기간 등)을 제어할 수 있다.
(2) origin 규약 완화 : 기본적으로 보안 이슈로 인해 브라우저와 웹 사이트는 동일한 origin끼리만 데이터를 주고받을 수 있다. 그렇지만 HTTP 헤더를 통해 CORS 정책을 준수하면서 기준을 완화할 수 있다.
(3) 인증 : HTTP 쿠키, WWW-Authenticate, 그 외 유사 기능 헤더 등을 사용하여 접근을 제한할 수 있다.
(4) 세션 : 쿠키를 통해 세션을 형성함으로써 상태와 요청을 결합할 수 있다.
HTTP/1.1 vs HTTP/2.0
HTTP1/1은 커넥션 하나당 한 개의 request와 한 개의 response만이 허용된다. 즉 한 번에 여러 request 혹은 여러 response가 이루어질 수 없기 떄문에 동시에 하나의 리소스만이 전송될 수 있다. 그렇기 때문에 HTML 문서 로드, link 태그로 CSS 파일 로드, script 태그로 JS 파일 로드, img 태그로 이미지 파일 로드 등 수많은 리소스 요청이 개별적으로 이루어지면서 전체적인 로드 시간이 매우 길어진다는 문제점이 있었다.
반면 HTTP/2.0은 커넥션 당 여러 request와 response가 가능하기 때문에 동시에 여러 리소스를 전송할 수 있다. 그렇기 때문에 웹 페이지의 로딩 성능을 향상시킬 수 있다.
'CS 공부' 카테고리의 다른 글
[Network] HTTP status code (0) | 2022.04.16 |
---|---|
[Network] 프록시 서버 (Proxy Server) (0) | 2022.04.16 |
[CS] 프로세스와 스레드 (0) | 2022.04.16 |
[CS] 스레드 안전 (Thread-safe) (0) | 2022.02.27 |
[Infra] Scale up & Scale out (0) | 2022.02.23 |