1. HTTP 개관

Hoony·2022년 7월 18일
0

HTTP

목록 보기
1/6

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


HTTP는 신뢰성 있는 데이터 전송 프로토콜을 사용하기 때문에, 데이터가 지구 반대편에서 오더라도 전송 중 손상되지 않음을 보장한다.



1.2 웹 클라이언트와 서버


웹 콘텐츠는 웹 서버에 존재한다. 웹 서버는 HTTP 프로토콜로 의사소통이 이루어지기 때문에 HTTP 서버라고도 부른다.

웹 서버는 데이터를 저장하고 클라이언트가 요청한 데이터를 제공한다.


이미 우리는 HTTP 클라이언트를 매일 이용하고 있다.

우리가 흔히 사용하는 웹브라우저 및 여러 웹 기능들은 모두 이런 HTTP를 통해 이루어진다.




1.3 리소스


웹 리소스란 웹 서버가 관리하고 제공하는 데이터들을 의미한다.

기본적으로 HTML 파일, 워드 파일, JPEG 이미지와 같은 정적 파일부터 요청에 따라 달라지는 동적 파일까지 모두 웹 리소스라고 한다.

즉, 웹에서 제공하는 어떤 종류의 콘텐츠 소스이든 모두 웹 리소스이다.




1.3.1 미디어 타입


인터넷에선 수천 가지의 데이터 타입을 다루기 때문에 데이터의 종류를 구분하기 위해 MIME 타입이라는 데이터 포멧 라벨을 붙인다.

MIME은 본래 각기 다른 전자메일 시스템 사이에서 일어나는 문제를 해결하기 위해 설계된 방법인데 이는 HTTP와 같은 여러 데이터를 다뤄야하는 환경에서도 유용하게 사용이 된다.


웹 서버는 모든 데이터 객체에 MIME 타입을 붙인다. 그리고 웹 브라우저는 객체를 받을 때 MIME 타입을 통해 자신이 다룰 수 있는 데이터 타입인지 확인을 한다.

MIME 타입은 주 타입과 부 타입으로 이루어진 문자열 라벨이다.

  • HTML 작성된 텍스트 문서 => text/html
  • plain ASCII 텍스트 문서 => text/plain
  • JPEG 이미지 => image/jpeg



1.3.2 URI


웹 서버 리소스는 각자 이름을 갖고 있기 때문에, 클라이언트는 관심 있는 리소스를 지목할 수 있다.

URI는 통합 자원 식별자로 정보 리소스를 고유하게 식별하고 위치를 지정할 수 있다.

URI에는 두 가지 종류가 있는데 URL과 URN이다.


예를 들어 '죠의 컴퓨터 가게'의 이미지 리소스에 대한 URI라면 이런 식이다.

htttp://www.joes-hardware.com/specials/saw-blade.gif


URL


URL은 통합 자원 지시자로 리소스 식별자 중 가장 흔한 형태이다.

URL은 한 리소스의 구체적인 위치를 서술한다.

정확히 어디에 있고 어떻게 접근할 수 있는지 분명히 알려주어 접근이 가능하도록 한다.

오늘날 대부분의 URI는 URL이다.



URN


URN은 유니폼 리소스 이름이다.
URN은 콘텐츠를 이루는 한 리소스에 대해, 위치에 영향 받지 않는 유일무이한 이름 역할을 한다.
이 위치 독립적인 URN은 리소스를 어디로 옮겨도 문제없이 동작한다.
리소스의 본래 이름이 변하지 않는 한, 여러 종류의 네트워크 접속 프로토콜로 접근해도 문제없이 동작한다.

URN은 여전히 실험 중인 상태이며 아직 널리 채택되지는 않았다.




1.4 트랜잭션


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

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




1.4.1 메서드


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


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

이는 3장에서 추후에 자세히 다룰 예정이다.




1.4.2 상태 코드


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

상태 코드는 클라이언트에게 요청이 성공했는지 아니면 조치가 필요한 지 알려주는 세자리 숫자 코드이다.


HTTP 상태 코드설명
200좋다. 문서가 바르게 반환되었다.
302다시 보내라. 다른 곳에서 리소스를 가져가라.
404없음. 리소스를 찾을 수 없다.



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


웹페이지를 가져올 때 대량의 HTTP 트랜잭션이 수행된다.

페이지 레이아웃 뼈대를 이루는 HTML, 첨부된 이미지, 그래픽 조각, 자바 애플릿 등 여러 리소스를 가져오기 위해 HTTP 트랜잭션이 수행된다.

즉, 하나의 웹페이지는 보통 여러 리소스의 모음으로 이루어져있다.




1.5 메세지


웹 클라이언트에서 서버로 보낸 HTTP 메세지를 요청 메세지라고 한다.

서버에서 클라이언트 보낸 TTP 메세지를 응답 메세지라고 한다.


HTTP는 시작줄 / 헤더 / 본문으로 세 가지로 이루어진다.


시작줄

메세지의 첫 줄은 시작줄로, 무엇을 해야하는지 or 무슨 일이 일어났는지 나타낸다.


헤더

시작줄 다음에 0개 이상의 헤더 필드가 이어진다.

하나의 이름과 값으로 구성된다.

헤더는 빈줄로 끝난다.


본문

빈 줄 다음에 본문이 이어진다.

데이터를 실어 보내며, 응답의 본문은 클라이언트로 데이터를 반환한다.

본문은 시작줄이나 헤더와 달리, 여러 데이터 형태를 실어 보낼 수 있다.




1.6.1 TCP/IP


TCP는 대중적이고 신뢰성 있는 인터넷 전송 프로토콜이다.

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

인터넷은 네트워크 장치들 사이에서 TCP/IP를 기초로 통신을 한다.

TCP/IP는 TCP와 IP가 층을 이루는, 패킷 교환 네트워크 프로토콜의 집합이다.




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


HTTP를 통해 클라이언트와 서버가 통신을 하기 전에, 인터넷 프로토콜 주소와 포트번호를 통해 TCP/IP 커넥션을 맺어야 한다.

TCP 커넥션을 맺는다는 것은 다른 회사 사무실에 있는 누군가에게 전화를 거는 것과 다소 비슷하다.


TCP는 서버 컴퓨터에 대한 IP 주소와 접근할 프로그램이 사용하고 있는 포트번호가 필요하다.

이런 IP주소와 포트번호는 어떻게 알아낼 수 있을까?

이때 URL이 사용된다. URL이란 리소스에 대한 주소이므로 당연히 네트워크 장비에 대한 IP 주소도 알려준다.



1. http://207.200.83.29:80/index.html
2. http://www.netscape.com:80/index.html
3. http://www.netscape.com/index.html
  • 첫 번째 URL은 IP 주소 '207.200.83.29'와 포트 번호 80임을 알려준다.
  • 두 번째 URL은 숫자로 이루어진 IP주소가 없다. 해당 경우는 DNS라고 불리는 장치를 통해 IP 주소로 변환이 된다.
  • 세 번째는 포트번호가 없다. 포트번호가 빠진 경우에는 기본값 80이다.

웹브라우저 HTTP 통신 과정

  1. 서버의 URL에서 호스트 명을 추출한다.
  2. DNS를 통해 호스트 명을 IP 주소로 변환한다.
  3. 포트번호가 있다면 추출한다.
  4. 웹브라우저와 웹서버가 추출한 IP주소 포트번호를 통해 TCP 커넥션을 맺는다.



1.8 웹의 구성요소


프락시

프락시는 클라이언트와 서버 사이에 위치하여, 클라이언트의 모든 HTTP 요청을 받아 서버에 전달한다.

프락시는 주로 보안을 위해 사용된다. 중간 위치에서 요청과 응답을 필터링하여 믿음직한 중개자 역할을 한다.


캐시

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

클라이언트는 해당 프락시 서버를 통해 훨씬 빨리 문서를 받을 수 있다.
이 외에도 프라이버시를 보호하기 위한 많은 기능을 제공한다.


게이트웨이

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

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


터널

단순히 HTTP 통신을 전달하기만 하는 특별한 프락시

터널은 데이터를 열어보지 않고 그대로 전달해준다.


에이전트

자동화된 HTTP 요청을 만드는 준지능적 웹클라이언트

이 외에도 에이전트는 여러 종류가 있다.

사람의 통제 없이 스스로 웹을 돌아다니며 HTTP 트랜잭션을 일으키는 '스파이더'나 '웹로봇'과 같은 에이전트도 있다.

profile
Just Do it!

0개의 댓글