본문 바로가기

CS/네트워크

[HTTP] 01. HTTP 개관

이 포스팅은 "HTTP-완벽 가이드" 책을 학습하고 정리한 것입니다.

https://www.aladin.co.kr/shop/wproduct.aspx?ItemId=49731592

 

HTTP 완벽 가이드

HTTP 규약이 어떻게 동작하고 웹 기반 애플리케이션을 개발하는 데 어떻게 사용하는지 설명한다. 하지만 이 책은 단순히 HTTP에 대해서만 다루지는 않는다. HTTP가 효율적으로 동작하도록 함께 사

www.aladin.co.kr

 

 

 


 

 

 

1.1 HTTP: 인터넷의 멀티미디어 배달부

 HTTP는 이미지, 텍스트, 비디오, HTML 페이지 등을 웹을 통해 전송하는데 사용되는 프로토콜이다. HTTP는 Hyper Text Transfer Protocol의 약자이다. HTTP는 전송되는 데이터가 손상되거나, 꼬이지 않는 것을 보장한다(정확하게는 HTTP 하단 계층에 있는 TCP가 하는 역할). 덕분에, 클라이언트는 HTTP 응답 데이터를 신뢰할 수 있고, 서버(or 정보 제공자)는 어플리케이션 고유기능에 집중할 수 있다.

 

1.2 웹 클라이언트와 서버

 웹 서버는 데이터를 저장하고, 클라이언트의 요청에 대해 데이터를 제공한다. 웹 서버는 HTTP를 사용하여 클라이언트와 통신한다. 이로인해 HTTP 서버라고 불리기도 한다. HTTP 서버와 HTTP 클라이언트는 WWW를 지탱하는 기본 요소이다.

 

1.3 리소스

 웹 서버는 웹 리소스를 관리하고 제공한다. 리소스는 정적 컨텐츠 리소스와 동적 컨텐츠 리소스로 나뉜다. 정적 리소스는, 이미지 or 동영상 or 텍스트 등과 같은 정적 파일 혹은 데이터를 의미한다. 클라이언트의 구분없이 동일한 리소스를 제공한다. 동적 컨텐츠 리소스는 클라이언트가 누군지에 따라, 혹은 그때의 상황에 따라 제공하는 컨텐츠가 달라진다. 리소스는 특정 컨텐츠 타입에 종속되지 않으며, 어떠한 타입의 컨텐츠도 리소스가 될 수 있다. 예를 들어, 검색 엔진, 웹 캠 게이트웨이와 같은 형태의 컨텐츠도 리소스가 될 수 있다.

 

1.3.1 미디어 타입

 HTTP에서 다루는 데이터 타입은 수천가지가 되기 때문에, 이를 관리하고자 MIME(Multipurpose Internet Mail Extension) 타입 이라는 데이터 포맷 라벨을 사용한다. 여기서 라벨이라고 표현한 이유는, HTTP 헤더에 아래와 같은 형식으로 타입을 명시하기 때문이다.

Content-type: image/jpeg

 웹 서버는 모든 HTTP 객체에 MIME 타입을 붙이며, 웹 브라우저는 해당 MIME 타입이 자신이 다룰수 있는 타입인지 확인한다.

 MIME 타입은 아래 형식으로 표현된다.

Content-type: 주 타입/부 타입

 

1.3.2 URI

 

 웹 서버 리소스는 각각 자신의 고유한 이름을 가지고 있다. 이름을 통해 클라이언트는 해당 리소스를 요청할 수 있다. URI는 ‘uniform resource identifier’의 약자로, 통합 자원 식별자를 의미한다. 말 그대로 각 리소스를 구분하고 위치를 지정할 수 있게 한다.URI는 큰 범주로서, URL과 URN으로 나뉜다.

 

1.3.3 URL

 

 URL은 uniform resource locator의 약자로, 통합 자원 지시자를 의미한다. URI가 리소스의 고유한 값을 의미한다면, URL은 해당 리소스의 구체적인 위치를 의미한다. URL을 통해 리소스가 정확히 어디에 위치하는지 알 수 있다. URI의 거의 모든 것은 URL이다.

<http://www.naver.com/news/image.jpg>

URL은 세 부분으로 나눠진 표준 포멧을 따른다.

  • 스킴(Scheme) : 리소스에 접근하기 위해 사용할 프로토콜
  • 서버의 주소 : www.naver.com
  • 웹 서버의 리소스 : /news/image.jpg

 

1.3.4 URN

 

 URN은 uniform resource name의 약자로, 리소스의 위치에 영향을 받지 않는 리소스의 고유한 이름을 의미한다. 만약 리소스의 이름이 변경되지 않는다면, 리소스가 이곳 저곳을 옮겨 다니더라도, 이름을 통해 리소스에 접근할 수 있다. 다만, URN을 지원하기 위한 인프라가 받춰져야 하는데, 아직 그 인프라라 미비하여 활성화 되있지는 않다.

 

1.4 트랜잭션

 

HTTP 트랜잭션은 HTTP 요청(클라이언트 → 서버)과 HTTP 응답(서버 → 클라이언트)의 한 묶음을 지칭한다.

 

1.4.1 메서드

 

HTTP 요청 메시지는 한 개의 메서드를 갖는다. 메서드의 타입은 HTTP 서버에게 어떤 동작을 수행하면 되는지 알려준다.

  • GET : 서버에서 클라이언트로 지정한 리소스를 보내라
  • PUT : 클라이언트에서 서버로 보낸 데이터를 지정한 이름의 리소스로 저장하라.
  • DELETE : 지정한 리소스를 서버에서 삭제하라.
  • POST : 클라이언트 데이터를 서버 게이트웨어 애플리케이션으로 보내라.
  • HEAD : 지정한 리소스에 대한 응답에서, HTTP 헤더 부분만 보내라.

 

1.4.2 상태 코드

 

 HTTP 응답은 반드시 한 개의 상태 코드와 함께 반환된다. 상태 코드는 클라이언트에게 요청에 대한 응답 결과가 무엇인지 알려준다. 세 자리 숫자(ex. 200, 302, 404)로 표현되며, 상태 코드에 대한 설명 부분(reason phrase)도 함께 보내진다. 설명 부분은 말 그대로 설명을 위한 목적일 뿐, 응답에 대해 어떻게 처리될 지는 상태 코드를 통해 결정된다.

 

1.4.3 웹페이지는 여러 객체로 이뤄질 수 있다

 

 웹 페이지는 여러 HTTP 트랜잭션이 합쳐져서 만들어진다. 처음에는 HTML 골격을 위한 트랜잭션이 수행되고, 이후에는 디테일한 데이터를 가져오기 위한 트랜잭션이 수행된다.(물론, 다 그런 것은 아니다.)

 

1.5 메시지

 

  HTTP는 이진 데이터가 아닌, 단순한 줄 단위의 문자열로 구성된다. 구조는 ‘시작줄’ , ‘헤더’ , ‘본문’으로 구성된다.

  • 시작줄 : 요청이라면 무엇을 해야하는지, 응답이라면 무슨 일이 일어났는지 알려준다.
  • 헤더 : 0개 이상의 헤더 필드를 갖는다. 쌍점(:)으로 헤더 필드와 내용이 구분된다. 헤더의 마지막은 빈 줄로 끝난다.
  • 본문 : 시작줄과 헤더와는 다르게 이진 데이터를 포함할 수 있다. 본문은 요청 시 제공할 데이터 or 응답 시 제공할 데이터를 나타낸다.

 

1.6 TCP 커넥션

 

 HTTP 트랜잭션이 수행되기 위해 TCP 커넥션이 활용된다. HTTP는 어플리케이션 계층 프로토콜이기 때문에, 실제 데이터가 네트워크 상에서 어떻게 통신되는지는 관여하지 않는다. 네트워크 통신은 TCP와 그 하위 계층 프로토콜들이 담당한다.

(wireshark 에서 캡처한 TCP 3-way handshake)

1.6.1 TCP/IP

 

 TCP는 아래의 특징을 갖는다.

  • 오류 없는 데이터 전송(오류 제어)
  • 순서에 맞는 전달(데이터는 언제나 보낸 순서대로 도착한다)(흐름 제어)
  • 조각나지 않는 데이터 스트림(언제든 어떤 크기로든 보낼 수 있다.)

 IP는 전체 네트워크 상에서 특정 호스트까지 도달하는데 도움을 주고, TCP는 호스트 내부에서 어떤 프로그램에게 통신이 전달되어야 하는지 도움을 준다.

 

1.6.2 접속, IP 주소 그리고 포트번호

 

 HTTP 통신이 이뤄지기 전에, 먼저 TCP 커넥션이 맺어져야 한다. 커넥션이란 서로 의미있는 데이터를 주고받기 이전에, 서로 통신하겠다는 초기 설정을 맺는 것이다. 브라우저에서 웹 서버에 요청하는 예제를 통해 과정을 설명한다. 요청 URL에 따라서 과정은 통신 과정은 달라진다.

 

1.7 프로토콜 버전

MDN : HTTP의 진화

HTTP/0.9 -> HTTP/1.0 -> HTTP/1.0+ -> HTTP/1.1 -> HTTP/2.0 -> HTTP/3.0

HTTP의 진화 - HTTP | MDN

 

1.8 웹의 구성요소

1.8.1 프락시

 클라이언트와 서버 사이에 위치하며, 웹 보안 , 애플리케이션 통합, 성능 최적화에 활용된다. 클라이언트의 모든 HTTP 요청을 받아, 서버에게 전달한다.(보통 요청을 적절히 수정한 뒤 전달). 주로 보안에서 사용되며 요청과 응답을 필터링한다.

1.8.2 캐시

 웹캐시와 캐시 프록시는 자신을 거쳐 가는 문서들 중 자주 찾는 것의 사본을 저장해 두는, 특별한 종류의 HTTP 프록시 서버이다.

 

1.8.3 게이트웨이

 게이트웨이는 다른 서버들의 중개자로 동작하는 특별한 서버이다. 주로 HTTP 트래픽을 다른 프로토콜로 변환하기 위해 사용된다. 예를 들어 HTTP/FTP 게이트웨이는 FTP URI에 대한 HTTP 요청을 받아 들인 뒤, FTP 프로토콜을 통해 문서를 가져오고, 클라이언트에게 HTTP 응답을 전송한다.

1.8.4 터널

 터널은 두 커넥션 사이의 날(raw) 데이터를 열어보지 않고 그대로 전달해주는 HTTP 애플리케이션이다. 암호화된 SSL 트래픽을 HTTP 채널을 통해 목적지 서버로 전송할 수 있게 한다.

 

'CS > 네트워크' 카테고리의 다른 글

[HTTP] 06. 프락시  (2) 2024.01.07
[HTTP] 05. 웹 서버  (2) 2024.01.05
[HTTP] 04. 커넥션 관리  (2) 2024.01.05
[HTTP] 03. HTTP 메시지  (0) 2024.01.02
[HTTP] 02. URL과 리소스  (0) 2024.01.02