1부 : 웹의 기초, HTTP 개관

지구·2022년 5월 22일
0

HTTP 완벽가이드

목록 보기
1/3
post-thumbnail

🌰 해당 글은 HTTP 완벽가이드를 정리한 내용입니다.

HTTP(Hyper Text Transfer Protocol)

현대 인터넷의 공용어라고 할 수 는, 웹 브라우저, 서버, 웹 애플리케이션이 대화하는 방식.

어떤 포맷의 파일이더라도 전 세계의 웹 서버로부터 정보를 빠르고, 간편하고, 정확하게 웹 브라우저로 옮겨준다. 신뢰성있는 데이터 전송 프로토콜을 사용하기 때문에, 지구 반대편에서 데이터가 오더라도 전송 중 손상되지 않음을 보장한다.


HTTP는 웹트래픽을 어떻게 전송할까?


1. 웹 클라이언트와 서버

웹 서버

웹 콘텐츠를 가지고 있고, 웹 클라이언트가 요청했을 때 요청한 콘텐츠를 HTTP응답으로 보내준다.
보통 HTTP프로토콜로 의사소통하기 때문에 HTTP서버라고 부른다.

웹 클라이언트

우리가 인터넷 사용 시 항상 이용하는 것.
흔히, 크롬, 사파리와 같은 웹 브라우저를 통해 클라이언트 요청을 하게 된다.
HTTP 클라이언트라고도 한다.

HTTP 클라이언트 , HTTP 서버는 WWW(월드와이드웹)의 기본 요소다.

(중요) 주소창에 url 입력 시 사용자에게 보여주기까지의 과정

  • https://www.naver.com/index.html (www.naver.com) 입력
  • 웹 브라우저는 주소창의 URL에서 IP주소와 포트번호, 경로를 뽑아서 해당 서버를 찾는다.
  • 찾아서 http get 요청을 보낸다.
  • 서버는 요청받은 객체를 찾아서 (ex . index.html) 보내고, 관련된 정보들(글자 길이가 몇 인지, 파일 타입은 무엇인지...)을 http 응답에 실어서 보낸다.
  • 브라우저는 서버로부터 받은 데이터와 html을 가지고 화면에 그린다.

더 자세하게 들어가면 브라우저에서 파싱하여 렌더링 하는 과정, 주소창에 입력된 URL에 대해서 얘기해볼 수 있다.


2. 리소스(resource)

웹 서버는 웹 리소스를 관리하고, 제공한다.

  • 정적 리소스 : 가장 단순한 웹 리소스.
    웹 서버 파일시스템에 있는 정적 파일(.txt, .html, .jpeg, .avi, .pdf 등등... 변하지 않는 파일들.)
  • 동적 리소스 : 요청에 따라 콘텐츠를 생산하는 프로그램이 될 수 있으며, 유저가 누구이며 어떤 정보를 요청했고, 몇 시냐에 따라 다른 콘텐츠를 생성한다. (주식 거래, 온라인 쇼핑몰, 부동산 데이터베이스 검색)

어떤 종류의 콘텐츠 소스도 리소스가 될 수 있다. 스프레드시트데이터도, 공공도서관 서가탐색 웹 게이트웨이도. 인터넷 검잭 엔진도.


미디어 타입을 알려주는 라벨, MIME!

인터넷은 수천 가지의 데이터 타입을 다루게 된다.
그렇게 많다면, http 요청과 응답을 주고받을 때 받게 되는 데이터의 타입이 어떤 것인지 알아야 하지 않을까?
MIME이라는 미디어 타입 라벨을 붙인다.

MIME(Multipurpose Internet Mail Extensions), 다목적 인터넷 메일 확장 : 각기 다른 이메일 시스템 사이에서 메시지가 오갈 때 생기는 문제점을 해결하기 위해 설계되었으나, 워낙 메일 시스템에서 잘 사용되어서 http에서도 멀티미디어 콘텐츠를 기술하고, 라벨을 붙이기 위해 채택되었다고 한다.

웹 서버는 모든 HTTP 객체 데이터에 MIME타입을 붙인다. 웹 브라우저는 서버로부터 응답을 받을 때, 다룰 수 있는 객체인지 확인한다.
ex) Content-Type: image/jpeg
Content-Type: application/json charset-utf-8

URI(Uniform Resource Identifier), 통합 자원 식별자

웹 서버 리소스는 각자의 고유한 이름을 갖고 있고, 이를 통해 정보 리소스를 고유하게 식별하고 위치를 저장한다. 이 이름을 URI라고 한다.

클라이언트는 원하는 리소스를 지목하기 위해 URI를 사용한다.

URI에는 URL, URN이 있다.

URL(Uniform Resource Locator), 통합 자원 지시자

  • 오늘날 대부분의 URI는 URL이다. 가장 흔한 형태.
  • 특정 서버의 한 리소스에 대한 구체적 위치를 서술한다. 리소스가 정확히 어디에 있고, 어떻게 접근할 수 있는지 분명히 알려준다.
  • URL의 포맷 세 부분
    • 첫 부분 : 스킴(Scheme): 리소스에 접근하기 위해 사용되는 프로토콜을 서술. 보통 http프로토콜이다.
    • 두 번째 부분 : 서버의 인터넷주소: ex) www.diggging.com
    • 세 번째 부분 : 웹 서버 리소스를 가리키는 부분 ex) /logo.png

URN(Uniform Resource Name), 통합 자원 이름

  • 콘텐츠를 이루는 한 리소스에 대해 리소스 위치에 영향을 받지 않는 유일무이한 이름의 역할을 한다.
  • 리소스를 여기저기로 옮기더라도 문제없이 동작한다. 여러종류의 네트워크 접속 프로토콜로 접근해도 문제가 없다.
  • 여전히 실험중. 널리 채택되지 않음. 아직 리소스 위치 분석을 위한 인프라가 없어서 채택이 늦어지고 있음

통상적으로 URI = URL로 사용된다.



3. 트랜잭션

HTTP 트랜잭션은 요청 명령과 응답 결과로 구성된다. 이는 HTTP 메시지를 사용해서 이루어지며, HTTP메시지는 정형화된 데이터 덩어리이다.

  • HTTP 요청 메시지는 명령과 URI를 포함함
  • HTTP 응답 메시지는 트랜잭션의 결과를 포함함.

HTTP 메소드(HTTP method) - 3장에서 더 자세히

HTTP는 여러가지 종류의 요청 명령을 지원하고, 모든 HTTP 요청 메시지는 무조건 한 개의 메서드를 갖는다. 메소드는 서버에게 어떤 동작이 취해져야 하는지를 말해준다.

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

HTTP 상태 코드(HTTP status code) - 3장에서

클라이언트에게 요청이 성공했는지, 추가적 조치가 필요한지 알려주는 세 자리 숫자.

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

HTTP 상태 코드설명
200OK 좋다. 문서가 바르게 반환되었음.
201Created 서버 개체 생성요청 성공
401Unauthorized 클라이언트 인증 필요
403Forbidden 요청이 서버에 의해 거부됨.
404Page Not Found 없음. 리소스를 찾을 수 없다

http는 상태코드와 사유구절(reason phrase)도 함께 보낸다. ex) Forbidden Page Not Found 등등..

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

웹페이지는 보통 하나의 리소스가 아니라, ‘리소스의 모음’이다.
html 뼈대를 한번의 트랜잭션으로 가져오고, 그 외 이미지, 그래픽, js 등등을 추가로 가져온다.
이처럼 브라우저는 시각적으로 풍부한 웹페이지를 가져올 때 대량의 http 트랜잭션을 수행한다.


4. HTTP 메시지

  • 요청 메시지(HTTP Request Message) : 웹 클라이언트 → 웹 서버로 보낸 HTTP 메시지
  • 응답 메시지(HTTP Response Message) : 웹 서버 → 웹 클라이언트로 보낸 HTTP 메시지

http 요청, 응답 메시지의 형식은 굉장히 비슷하며, 단순한 줄 단위의 일반 텍스트이기 때문에 사람이 읽고 쓰기 쉽다.

  • 메시지 구조 : 각 요소들은 줄바꿈으로 구분된다.
    • 시작줄 : 요청의 경우 무엇을 해야하는지, 응답의 경우 결과가 어떤지 나타냄.
    • 헤더(header) : 시작줄 다음에 이어짐. : 로 구분되어 이름과 값의 쌍으로 구성된다. 헤더는 빈 줄로 끝난다.(\n\n)
      ex) Accept: application/json Content-type: text/plain ...
    • 본문: 데이터를 실어 나르는 곳. 어떤 종류의 데이터든 들어갈 수 있다. 필요에 따라 들어가며, 시작줄이나 헤더와 달리, 임의의 이진 데이터를 포함할 수 있다.(텍스트, 이미지, 비디오, 오디오, 응용 소프트웨어 등.)

간단한 메시지의 예

http request message

GET index.html HTTP/1.0
User-agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.57 Whale/3.14.133.23 Safari/537.36
Host : www.diggging.com
Accept: text/html, image/gif, image/jpegAccept-language: ko

시작줄에 GET메소드, 로컬 리소스, HTTP프로토콜 1.0버전으로 요청을 보내고 있음.

본문은 없음 - 간단한 문서를 가져올 땐 요청 데이터가 필요 없음 (GET메소드)

http response message

HTTP/1.0 200 OK
Date: Fri, 15 Apr 2022 15:08:47 GMT
server: Vercel
Content-length: 403
Content-Type: text/html

<HTML>
<HEAD><TITLE>Diggging</TITLE></HEAD>
<BODY>
....
</BODY>

버전번호, 성공 상태코드(200), 사유 구절(OK)

응답 헤더 필드 영역

요청한 문서에 대한 응답 본문.(HTML)

응답 본문의 길이는 Content-legnth 헤더에, 문서의 MIME 타입은 Content-Type에 있다.


5. TCP 커넥션

어떻게 메시지가 TCP(Transmission Control Protocol, 전송제어 프로토콜) 커넥션을 통해 한 곳에서 다른 곳으로 옮겨갈까?

TCP/IP

TCP와 IP가 층을 이루는, 패킷 교환 네트워크 프로토콜의 집합. 네트워크와 하드웨어의 특성을 숨기고, 어떤 종류의 컴퓨터나 네트워크든 서로 신뢰성 있는 의사소통을 하게 히준다.

HTTP는 애플리케이션 계층 프로토콜이다. 네트워크 통신의 세부사항에 대해 신경쓰지 않고, 대신 대중적, 신뢰성있는 인터넷 전송 프로토콜인 TCP/IP에게 맡긴다. 일단 TCP커넥션이 맺어지면, 클↔서버 간 교환되는 메시지가 손상되거나 순서가 바뀌는 일은 결코 없다.

TCP가 제공하는 것

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

사실, 인터넷 자체가 TCP/IP에 기초하고 있다.

HTTP 프로토콜은 TCP위의 계층.(메시지를 전송하기위해 TCP사용)
TCP는 IP위의 계층

HTTP
TCP
IP
네트워크를 위한 링크 인터페이스
물리적인 네트워크 하드웨어

HTTP 커넥션을 위한, IP주소, 포트 번호

HTTP클라이언트가 서버에 메시지 전송 전, 인터넷 프로토콜(Internet Protocol, IP)주소와 포트번호를 사용해서 클↔서버간에 TCP/IP 커넥션을 맺어야 한다. → 서로 연결된 상태에서 이후 원하는 요청과 응답을 주고받는다.

TCP 커넥션을 위해 IP주소, 포트번호 필요

⇒ URL을 사용하여 알아낸다. URL은 리소스에 대한 주소이기 때문에 해당 리소스를 갖고있는 장비에 대한 IP주소를 알 수 있다.

(1) http://207.83.29:80/index.html
(2) http://www.netscape.com:80/index.html
(3) http://www.diggging.com/index.html

(1) 주소는 IP주소와 포트번호 80을 갖고있다.

(2) 주소는 IP주소가 없으나, 글자로 된 domain이름 혹은 호스트명 ‘www.netscape.com’을 갖고 있다.
호스트 명은 IP 주소에 대한 별명이라고 생각하면 된다. DNS(Domain Name Service, 도메인 이름 서비스)가 호스트 명을 쉽게 IP주소로 바꿔준다.

(3) 주소는 포트번호가 없다. HTTP URL에 포트번호가 없다면 기본값 80이라고 가정하면 된다.

웹 브라우저가 멀리 떨어진 서버의 HTML 리소스를 사용자에게 보여주는 과정

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

6. 웹의 구성 요소

  • 프락시 : 클라이언트 ↔ 서버 사이 위치한 HTTP 중개자
  • 캐시 : 많이 찾는 웹페이지를 클라이언트 가까이에 보관하는 HTTP 창고
  • 게이트웨이 : 다르 애플리케이션과 연결된 특별한 웹 서버
  • 터널 : 단순히 HTTP 신을 전달하기만 하는 특별한 프락시
  • 에이전트 : 자동화된 HTTP 요청을 만드는 준지능적 웹 클라이언트

프락시 - 6장에서 자세히

클라이언트와 서버 사이에 위치하여 클라이언트의 모든 HTTP요청을 받아 요청을 수정하여 서버에 전달한다. 사용자를 대신해서 서버에 접근하며, 주로 보안을 위해 사용된다.
즉, 신뢰할 만한 중개자 역할을 하며 요청과 응답을 필터링한다.

EX) 무언가 다운받을 때 바이러스 검출 / 초등학교 학생들로부터 성인 콘텐츠 차단 . ...

캐시 - 7장에서 캐싱 기술에 대해 자세히

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

클라이언트가 같은 문서를 요청하면, 그 캐시가 갖고 있는 사본을 받을 수 있다.
멀리 떨어진 웹서버보다 근처 캐시에서 훨씬 더 빨리 문서를 다운 받을 수 있다.

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

게이트웨이 - 8장에서 자세히

다른 서버들의중개자로 동작하는 특별한 서버.
주로 HTTP트래픽을 다른 프로토콜로 변환하기 위해 사용됨. 언제나 스스로가 리소스를 갖고 있는 진짜 서버인 것 처럼 요청을 다룬다.
클라이언트는 자신이 게이트웨이와 통신하고 있음을 알아채지 못한다.

터널

날 데이터를 열어보지 않고 그대로 전달해주는 HTTP애플리케이션.주로 비 HTTP 데이터를 하나 이상의 HTTP 연결을 통해 그대로 전송해주기 위해 사용함.
(잘 이해가 안 됨..)

에이전트 - 9장에서 자세히

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

웹 브라우저도 에이전트이다.

스스로 웹을 돌아자니며 HTTP 트랜잭션을 일으키고 콘텐츠를 받아오는 자동화된 사용자 에이전트도 있다. = ‘스파이더’, ‘웹 로봇’. → 웹을 돌아다니며 검색엔진 DB나 가격비교 로봇을 위한 유용한 웹 콘텐츠 보관소를 만든다.

🌰 이어지는 장에서 HTTP 프로토콜, 애플리케이션, 리소스의 구조에 대해 자세히 설명할 것입니다.

profile
디자인과 기획이 재미있는 프론트엔드 개발자입니다. 블로그 이사 준비중. . .

0개의 댓글