기록공간

[HTTP 완벽 가이드] HTTP 개관 본문

Network/HTTP

[HTTP 완벽 가이드] HTTP 개관

입코딩 2021. 4. 29. 08:56
반응형

정리한 내용은 'HTTP 완벽 가이드' 를 참고하였습니다.

 

HTTP 완벽 가이드

웹 세상을 떠받치고 있는 HTTP에 대한 모든 것모든 성공적인 웹 트랜잭션 뒤에는, 웹 클라이언트와 서버가 문서와 정보를 교환하는 언어인 HTTP가 있다. HTTP는, 회사 인트라넷에 

m.yes24.com


1. HTTP(HyperText Transfer Protocol)

=> 현대 인터넷 공용어라고 불릴 정도로 인터넷 통신에서 빼먹을 수 없는 하이퍼텍스트 통신 프로토콜 

 

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

HTTP는 웹 서버로부터 대량의 정보를 빠르고, 간편하고, 정확하게 웹 브라우저로 옮겨줌

신뢰성 있는 데이터 전송 프로토콜로 도중에 손상될 염려가 없다. => 이를통해 개발자는 개발에 더 집중할 수 있음 

 

 

 

1.2 웹 클라이언트와 서버

웹 서버는 HTTP 서버와 같은 말

왜?  웹은 HTTP 프로토콜로 의사소통하기 때문이다.

 

 

 

1.3 리소스(Resource)

웹 리소스(Web Resource)는 웹 콘텐츠(Web Contents)의 원천이다.

웹 콘텐츠는 정적 파일(Static File)동적 파일(Dynamic File)로 나뉜다.

 

 

1.3.1 미디어 타입 

모든 HTTP 객체는 MIME을 붙은 상태로 통신한다.

MIME은 Multipurpose Internet Mail Extension(다목적 인터넷 메일 확장)의 약자이다.

MIME은 시스템 사이에 메시지가 오갈때 겪는 문제들을 해결하기 위해 설계되었다.

이메일에서 잘 동작하는 것이 확인된 후 다른 컨텐츠에도 쓰이기 시작했다.

 

 

1.3.2 URI(Uniform Resource Identifier)

URI은 통합 자원 식별자의 영어 약자이다.

웹 리소스는 우편주소처럼 각자 고유의 이름을 가지고 있다.

URI을 이용하여 클라이언트는 원하는 리소스를 해당 서버로부터 요청할 수 있다.

 

URI 구조

 

1.3.3 URL(Uniform Resource Locator)

URL은 URI와 같은 개념이라고 볼 수 있다.

특정 서버의 한 리소스에 대한 구체적인 위치를 서술한다. (어디에 있는가? 어떻게 접근 하는가?)

오늘날의 대부분 URI는 URL이라고 볼 수 있다.

 

1.3.4 URN(Uniform Resource Name)

URN은 리소스 위치에 영향을 받지 않는 유일무이한 이름이다.

즉, 리소스의 위치를 변경하더라도 문제없이 동작하는 특징을 갖고 있다.

어디 있든 상관없이 지칭하기 위해 사용한다.

 

URN 구조

URN은 아직 실험중에 있으며, 널리 채택되지는 않았다. 아직 인프라가 부족하기 때문이다.

하지만 URN의 강력한 특징 덕분에 전망은 매우 밝다.

 

 

1.4 트랜잭션

HTTP 트랜잭션은 요청 명령(클라이언트에서 서버로)응답 결과(서버에서 클라이언트로)로 구성되어 있다.

이 상호작용은 HTTP 메시지라고 불리는 정형화된 데이터 덩어리를 이용해 이루어진다.

 

 

1.4.1 메서드

HTTP 메서드는 여러 종류의 요청 명령을 지원한다.

메서드는 요청 당 한개만 가질 수 있다.

메서드는 서버에게 어떤 동작이 취해져야 하는지 말해준다. 

흔히 사용하는 HTTP 메서드의 종류는 다음과 같다.

 

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

 

1.4.2 상태코드

모든 응답 메시지는 상태코드와 함께 반환된다.

상태코드는 응답에 대해서 어떤 상태인지 표현해준다.

이를 통해 클라이언트는 요청에 대한 서버의 상태를 대략적으로 유추해볼 수 있다. 

흔히 사용하는 상태코드는 다음과 같다.

 

200 : 좋다. 문서가 올바르게 반환되었다.
302 : 다시 보내라. 다른 곳에 가서 리소스를 가져가라.
404 : 없음. 리소스를 찾을 수 없음.

 

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

사진 등의 특정 콘텐츠를 객체로 나누어, 한 페이지에서 이들을 가져오기 위해 대량의 HTTP 트랜잭션이 수행될 수 있다. 그림으로 표현하면 다음과 같다.

 

 

 

1.5 메시지

HTTP 메시지는 단순한 줄 단위 문자열이다.

일반 텍스트이기 때문에 사람이 읽고 쓰기 쉽다.

HTTP 통신을 통해 서버와 클라이언트는 요청 메시지응답 메시지를 주고 받는다. 

HTTP 메시지는 다음의 세 부분으로 이루어진다.

 

 

  • 시작줄 : 무엇을 해야하는지(요청), 무슨일이 일어났는지(응답) 나타낸다.

  • 헤더 : 하나의 이름과 하나의 값으로 구성되어 있고, 콜론(:)을 통해 구분한다.

  • 본문 : 어떤 종류의 데이터든 올 수 있다. 데이터를 실어 보내거나(요청), 데이터를 반환(응답)한다.

 

 

1.6 TCP 커넥션

TCP 커넥션은 TCP(Transmission Control Protocol, 전송 제어 프로토콜)를 이용해 한 곳에서 다른 곳으로 옮겨가는 것을 뜻한다.

 

1.6.1 TCP/IP

HTTP는 애플리케이션 계층 프로토콜이다.

애플리케이션 계층은 HTTP 프로토콜 계층 중에서도 최상단에 위치한다.

이는 곧 HTTP가 네트워크 통신의 핵심적인 세부사항에 대해 신경쓰지 않는다는 것이다.

대신 이 작업을 TCP/IP 프로토콜에게 맡긴다.

TCP/IP의 특징은 다음과 같다.

 

  • 오류 없는 전송
  • 순서에 맞게 전달 (보낸 순서대로 전달)
  • 조각나지 않는 데이터 스트림 (어떤 크기로든 보냄)

 

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

TCP/IP 통신에서 상대방 컴퓨터를 찾을 수 있게 주소 역할을 하는 것이 바로 IP(Internet Protocol)이다.

컴퓨터에서는 여러 프로세스가 동시에 인터넷 통신을 하게 되는데 이를 구분할 수 있게 해주는 것이 바로 포트(Port)번호다.

포트 번호를 사용하여 어떤 프로세스에서 그에 알맞은 네트워크 통신을 할것인지를 구분할 수 있다.

IP 주소와 포트번호를 이용해  TCP 커넥션이 이루어 지기 때문에 이 둘은 정말 중요하다고 할 수 있다.

 

만약 http://www.netscape.com:80/index.html 이라는 URL이 있다고 가정하자.

그러면 TCP 커넥션이 이루어지는 과정은 다음과 같다.

 

  1. 웹 브라우저는 서버의 URL에서 호스트명을 추출한다. (www.netscape.com)
  2. 웹 브라우저는 호스트명을 IP로 변환한다. (www.netscape.com => 207.200.83.29)
  3. 웹 브라우저는 URL에 포트번호가 있다면 추출한다. (:80)
  4. 웹 서버와 웹 브라우저가 TCP 커넥션을 맺는다.
  5. 웹 브라우저는 서버에 HTTP 요청을 보낸다.
  6. 서버는 웹 브라우저에 HTTP 응답을 돌려준다.
  7. 커넥션이 닫히면, 웹 브라우저는 문서를 보여준다.

 

 

1.7 프로토콜 버전

HTTP 프로토콜은 여러 버전을 거쳐왔다.

0.9를 시작으로 1.0을 거쳐 현재 1.1 버전이 사용되고 있다.
2.0 버전은 1.1 버전의 성능 문제를 개선하기 위한 목적으로 현재 구글 프로토콜을 기반으로 설계가 진행중이다.

 

 

1.8 웹의 구성요소

여기서는 웹 상호작용을 위한 여러 웹 애플리케이션들을 대해 간략하게 소개한다.

 

1.8.1 프락시

프락시는 클라이언트와 서버 사이에 위치한 HTTP 중재자이다. 

트래픽 처리시 신뢰할 만한 중재자 역할로 보안 목적으로 사용된다.

또한 바이러스나 성인물 차단을 위한 필터링 역할도 한다.

 

 

1.8.2 캐시

웹 캐시와 캐시 프락시는 많이 찾는 웹페이지를 클라이언트 가까이에 보관하는 특별 HTTP 프락시 서버다. 
(사본 저장소)

클라이언트는 멀리 떨어진 웹 서버보다 근처의 캐시에서 훨씬 더 빨리 문서를 다운 받을 수 있다.

HTTP는, 캐시를 효율적으로 동작하게 하고 캐시된 콘텐츠를 최신 버전으로 유지하면서 동시에 프라이버시 보호를 위한 많은 기능을 정의한다.

 

 

1.8.3 게이트웨이

게이트웨이는 다른 서버들의 중개자로 동작하는 특별한 서버다.

주로 HTTP 트래픽을 다른 프로토콜로 변환하기 위해 사용된다.

이처럼 게이트웨이는 진짜 서버인 것처럼 요청을 다루기 때문에 클라이언트는 게이트웨이랑 통신하고 있음을 알아차리기 힘들다.

 

HTTP/FTP 게이트웨이

 

1.8.4 터널

터널은 두 커넥션 사이에 raw 데이터를 열어보지 않고 그대로 전달해주는 HTTP 어플리케이션이다.

HTTP 터널은 주로 비 HTTP 데이터를 하나 이상의 HTTP 연결을 통해 그대로 전송해주기 위해 사용된다.

대표적인 예로 암호화된 SSL 트래픽을 HTTP 커넥션으로 전송함으로써 웹 트래픽만 허용하는 방화벽을 통과시키는 것이 있다.

 

 

1.8.5 에이전트

에이전트는 사용자를 위해 HTTP 요청을 만들어주는 클라이언트 프로그램이다.

웹 요청을 만드는 애플리케이션은 뭐든 HTTP 에이전트이다.

대표적으로 우리가 자주 사용하는 웹 브라우저를 예로 들 수 있다.

자동화된 에이전트도 있는데 사람의 통제 없이 스스로 웹을 돌아다니며 트랜잭션을 일으키고 콘텐츠를 받아온다.

이러한 에이전트는 보통 '스파이더'나 '웹로봇'과 같이 다채로운 이름을 가지고 있다.

반응형

'Network > HTTP' 카테고리의 다른 글

[HTTP 강의] 1. 인터넷 네트워크  (0) 2022.01.21
HTTPS란 무엇인가?  (0) 2021.09.13
HTTP는 무엇인가?  (0) 2021.02.09
Comments