[HTTP 완벽 가이드] 1. HTTP 개관

Jinyongmin·2024년 7월 18일

HTTP 완벽 가이드

목록 보기
1/5
post-thumbnail

이 글은 'HTTP 완벽 가이드' 책을 읽고 정리한 내용입니다.

HTTP란?

HTTP(Hypertext Transfer Protocol)로 현대 인터넷의 공용어이다.

  • protocol이란 원활한 통신을 위한 약속을 의미
  • HTTP가 현대 인터넷의 공용어라고 불리는 이유는 전 세계의 웹 브라우저, 서버, 웹 애플리케이션 모두 HTTP를 통해 서로 대화하기 때문이다.
  • 인터넷의 멀티미디어 배달부
    • JPEG 이미지, HTML 페이지, 텍스트 파일, MPEG 동영상, WAV 음성 파일 등을 HTTP가 웹 서버로부터 빠르고, 간편하고 정확하게 사람들에게 전달한다.

웹 클라이언트와 서버

HTTP가 어떻게 웹 트래픽을 전송하는가?

  1. 클라이언트가 HTTP 요청을 보낸다.
    • 요청 메서드에 따라 다양한 요청이 가능하다.(GET, POST,,, 이후 등장)
  2. 웹 서버(보통 HTTP 서버라고 불린다.)는 클라이언트 요청한 데이터를 HTTP 응답으로 돌려준다.
  • 구글 크롬 등 웹 브라우저는 서버에게 HTTP 객체를 요청하고 사용자의 화면을 보여준다.

리소스

웹 리소스는 웹 서버(HTTP 서버)가 관리, 제공하는 웹 콘텐츠의 원천이다.

정적 파일

  • 웹 서버 파일 시스템의 정적 파일
  • 텍스트, JPEG, HTML 등

동적 파일

  • 요청에 따라 콘텐츠를 생상한느 프로그램
  • 요청한 사용자, 몇 시인지 등에 따라 다른 콘텐츠를 생성한다.
  • 부동산 DB 검색, 주식 거래 등

미디어 타입

웹 서버의 모든 HTTP 객체 데이터는 MIME 타입을 붙인다.

MIME(Multipurpose Internet Mail Extensions)

위에서 설명했듯이 HTTP는 다양한 형식의 파일 등을 인터넷 상에서 운반한다. MIME 타입이란 이런 다양한 형식의 파일의 형태를 명시해주기 위한 하나의 인터페이스이다.

형태

(주 타입)/(부 타입)

  • HTML : text/html
  • plain ASCII : text/plain
  • JPEG : image/jepg

URI(uniform resource indentidier)

정보 리소스를 고유하게 식별하기 위한 식별자,주소

URI는 크게 두가지로 나뉘게 된다.

1. URL(unicorm resource locator)

  • 가장 흔한 형태로 특정 웹 서버에 리소스에 대한 구체적인 위치를 서술한다.

ex) http://www.codejuggler.com/index.html

1. 스킴(scheme) : "http://"
2. 웹 서버 주소 : "www.mywebpage.com"
3. 리소스의 위치 : "/index.html"

2. URN(uniform resource name)

URN은 콘텐츠를 이루는 한 리소스에 대해, 그 리소스의 위치에 영향 받지 않는 유일무이한 이름 역할을 한다.

ex) urn:ietf:rfc:2141

트랜잭션

HTTP 트랜잭션은 두가지로 구성되어 있다.

  • 요청 명령 : 클라이언트에서 서버로 보내는
  • 응답 명령 : 서버가 클라이언트에게 돌려주는

요청 명령 메서드

클라이언트가 서버에게 요청 명령을 보낼 때 사용하는 HTTP 메서드로 역할에 따라 구분된다.

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

응답 상태 코드

서버가 클라이언트에게 응답을 보낼 때 요청에 대한 성공/실패 여부 및 추가 조치에 대해서 명시해주는 코드

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

(HTTP 메서드 및 응답 상태 코드에 대한 자세한 내용은 3장에서 다룸)

애플리케이션은 보통 하나의 작업을 수행하기 위해 여러 HTTP 트랜잭션을 수행한다.

웹브라우저는 시각적으로 풍부한 웹페이지를 가져올 때 대량의 HTTP 트랜잭션을 수행하는데 다음과 같다.

  • 페이지 레이아웃을 서술하는 HTML (웹브라우저의 뼈대)
  • 첨부된 이미지, 그래픽 조각, 자바 애플릿 등

웹페이지는 보통 여러 리소스의 모음으로 각 리소스는 다른 서버에 위치할 수도 있다.

메세지

HTTP 트랜잭션에서 클라이언트와 서버가 주고 받는 메시지의 간단한 예시로 크게 세 부분으로 이루어져 있다.

1. 시작줄 :

  • 요청 : 사용한 HTTP 메서드, 웹 서버의 어떤 리소스를 요청하는지에 대한 정보
  • 응답 : 클라이언트가 요청한 메시지에 대한 응답 상태 코드 및 HTTP 프로토콜 버전에 관한 정보

2. 헤더 :

  • 0개 이상의 헤더 필드
  • "(이름) : (값)" 형태로 구성
  • 응답에서는 반환시 본문에 실은 데이터의 타입 및 길이에 대한 정보를 포함

3.본문 :

  • 요청 : 웹 서버로 데이터를 실어보낸다. ( POST 요청 시 데이터를 실어서 웹서버로 요청을 보낸다. )
  • 응답 : 클라이언트에게 반환시 데이터를 실어 보낸다.
    + 문자열이나 이진 데이터(이미지, 비디오 등)의 형태로 되어있다.

TCP(Transmission Control Protocol)

전송 계층에서 사용하는 프로토콜로 다음과 같은 성능을 보장한다.

  • 신뢰성 있는 데이터 전송 보장
    • 오류 및 미응답으로 발생 시, 재전송을 통해 보장한다.
  • 데이터의 순서를 보장
  • 조각나지 않는 데이터 스트림

전송 계층보다 상위 계층인 애플리케이션 계층의 HTTP 프로토콜이 TCP 프로토콜을 사용해서 데이터를 전송하고 이 과정은 TCP 커넥션을 맺고 이루어진다.
(TCP에 대한 자세한 내용은 4장에서 다룬다.)

웹의 구성요소

인터넷과 상호작용할 수 있는 다양한 웹 애플리케이션이 있다.

1. 프락시 : 주로 보안을 위해 사용되는 서버로, 모든 웹 트래픽 흐름 속에서 신뢰할만한 중개자 역할을 한다.
2. 캐시 : 자신을 거쳐가는 문서들 중 자주 찾는 것의 사본을 저장해 두는 역할을 한다.
3. 게이트웨이 : 다른 서버들의 중개자로 동작하는 서버로, 주로 HTTP 트래픽을 다른 프로토콜로 변환하기 위해 사용한다.
4. 터널 : 두 커넥션 사이에 raw 데이터를 열어보지 않고 그대로 전달해주는 HTTP 애플리케이션이다.
5. 에이전트 : 사용자 에이전트는 사용자를 위해 HTTP 요청을 만들어주는 클라이언트 프로그램이다.
(각 애플리케이션에 대한 자세한 내용은 뒤에서 다룬다.)

0개의 댓글