HTTP 완벽가이드 1장

Tony·2021년 10월 9일
3

1. HTTP 개관

  • HTTP(Hypertext Transfer Protocol)은 WWW(Word Wide Web)에서 통신하는 데 사용하는 프로토콜 프로그램이다.
    • hypertext : 사용자에게 내용의 비순차적 검색이 가능하도록 제공되는 텍스트. 문서 내의 특정한 단어가 다른 단어나 데이터베이스와 링크되어 있어 사용자가 관련 문서를 넘나들며 원하는 정보를 얻을 수 있음. 전자 사전·멀티미디어 데이터베이스·문장 작성 시스템 등에 응용됨.
      • 링크 등이 포함되어 관련문서를 넘나들며 정보를 얻을 수 있는 글

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

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

1.2 웹 클라이언트와 서버

  • 웹 서버는 보통 HTTP 프로토콜로 의사소통한다.
  • World Wide Web의 기본 요소 : HTTP, HTML, URL
    • WWW : 인터넷을 대표하는 서비스 중 하나(구글, 네이버 등)
      • 인터넷 : TCP/IP로 이루어진 네트워크들이 전세계적으로 연결된 네트워크
  • 클라이언트 : 웹 브라우저

1.3 리소스

  • 웹 서버는 웹 리소스를 관리하고 제공
    • 웹 리소스 : 웹 콘텐츠의 원천, 웹에 콘텐츠를 제공하는 모든 것
      • 단순한 리소스(정적파일) 예 : HTML, Text파일, 이미지, 동영상 등 모든 종류의 파일
      • 동적 콘텐츠 : 요청 또는 사용자에 따라 다른 콘텐츠를 생성해서 제공

1.3.1 미디어 타입

  • HTTP는 웹에서 전송되는 객체 각각에 MIME(Multipurpose Internet Mail Extensions, 다목적 인터넷 메일 확장) 타입이라는 데이터 포맷 라벨을 붙인다.
    • Content-type : image/jpeg => MIME 타입
      • HTML로 작성된 텍스트 문서 : text/html
      • JPEG 이미지 : image/jpeg
      • json data : application/json

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

  • 웹 서버 리소스는 각자 이름을 갖고 있기 때문에, 클라이언트는 관심있는 리소스를 지목할 수 있다.
  • 우편물의 주소 같은 것
  • e.g., http://www.joes-hardware.com/specials/saw-blade.gif
    • http:// => HTTP 프로토콜을 사용
    • www.joes-hardware.com => 서버 주소
    • /specials/saw-blade.gif => 리소스를 명시

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

1.3.4 URN(Uniform resource name)

  • 콘텐츠를 이루는 한 리소스에 대해, 그 리소스의 위치에 영향 받지 않는 유일 무이한 이름 역할을 함
  • e.g.
    • urn : isbn : 1234567891234 (국제표준도서번호)
    • urn : uuid : 6e8bc430-9c3a-11d9-9669-0800200c9a66 (범용 고유 식별자)

1.4 트랜잭션(상호 작용)

  • HTTP 트랜잭션 : 요청과 응답 결과

1.4.1 메서드

  • 서버에게 어떤 동작이 취해져야 하는지 말해준다
  • HTTP 요청 메세지는 한 개의 메서드를 갖는다.
  • GET, PUT, DELETE, POST, HEAD, ...

1.4.2 상태 코드

  • 클라이언트에게 요청이 성공했는지 아니면 추가 조치가 필요한지 알려주는 세 자리 숫자
  • 모든 HTTP 응답 메세지는 상태코드와 함께 반환 됨
  • e.g.
    • 200 : 문서가 바르게 반환 됨
    • 302 : 다시 보내세요. 다른 곳에서 리소스를 가져가십시오
    • 404 : 리소스를 찾을 수 없습니다.

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

  • 한 페이지를 표현하기 위해 여러번의 요청와 응답이 있을 수 있다는 말

1.5 메세지

/* 요청 메세지 */
// 시작줄
GET /test/hi-ther.txt HTTP/1.0
// 헤더
Accept: text/*
Accept-Language: en, fr


/* 응답 메세지 */
// 시작 줄
HTTP/1.0 200 OK
// 헤더
Content-type: text/plain
Content-length: 19
// 본문
Hi! I'm a message!
  • 시작줄 : 메세지의 첫 줄

    • 요청 메세지 : 무엇을 해야하는지 나타냄
    • 응답 메세지 : 무슨 일이 일어났는지 나타냄
  • 헤더 : 콜론(:)으로 구분되어 있는 key : value 형태

  • 본문 : 문자열 구조, 텍스트 뿐만 아니라 임의의 이진 데이터를 포함할 수 있음(이미지, 오디오 등)

1.6 TCP 커넥션

  • 메세지가 TCP가 커넥션을 통해 한 곳에서 다른 곳으로 옮겨가는지 알아보자

1.6.1 TCP/IP

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

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

    • 대신 대중적이고 신뢰성 있는 인터넷 전송 프로토콜(TCP/IP)에게 맡긴다.
  • TCP는 다음을 제공한다.

    • 오류없는 데이터 전송
    • 순서에 맞는 전달(데이터는 언제나 보낸 순서대로 도착한다)
    • 조각나지 않는 데이터 스트림(언제든 어떤 크기로든 보낼 수 있다)
  • 인터넷 자체가 전 세계의 컴퓨터와 네트워크 장치들 사이에서 대중적으로 사용되는 TCP/IP에 기초하고 있다.

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

HTTP애플리케이션 계층
TCP전송 계층
IP네트워크 계층
네트워크를 위한 링크 인터페이스데이터 링크 계층
물리적인 네트워크 하드웨어물리 계층

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

http://www.netscape.com/index.html

1.6.3 텔넷(Telent)을 이용한 실제 예제

  • 텔넷
    • 23번 포트 사용
    • 원격 터미널 세션을 위해 사용되지만 HTTP 서버를 포함한 일반적인 TCP 서버에 연결하기 위해 사용될 수도 있다.
    • HTTP와 같은 어플리케이션 계층의 프로토콜 종류 중 하나
    • 보안 이슈
      • 서버와 클라이언트 사이에 오가는 자료가 암호화 되지 않은 텍스트 형태로 전송 됨
        • 스니핑(sniffing)에 취약함
          • 패킷을 중간에 가로채는 악의적인 기술
  • 텔넷을 이용하면 CLI(Command Line Interface)로 웹 서버에 쉽게 접근할 수 있는 것 같다.

1.7 프로토콜 버전

  • HTTP/0.9
    • 디자인 결함 많음
    • 구식 클라이언트하고만 같이 사용 가능
    • GET 메서드만 지원
    • MIME 타입, HTTP 헤더, 버전 번호는 지원하지 않음
    • 간단한 HTML객체를 받아오기 위해 만들어 짐
  • HTTP/1.0
    • 처음으로 널리 쓰이기 시작한 HTTP 버전
    • HTTP 헤더, 추가 메서드, 멀티미디어 객체 처리를 추가
    • 매ㅣ력적인 웹페이지와 상호작용하는 폼을 실현 함
      • 월드 와이드 웹(WWW)을 대세로 만들음
  • HTTP/1.0+
    • 오래 지속되는 "keep-alive" 커넥션, 가상 호스팅 지원, 프락시 연결 지원을 포함해 많은 기능이 공식적이진 않지만 사실상 표준으로 HTTP에 추가 됨
      • keep-alive 커넥션
        • 비표준: 이 기능은 비표준이며 표준 트랙에 없습니다. 웹을 접하는 프로덕션 사이트에서는 사용하지 마십시오. 모든 사용자에게 작동하는 것은 아닙니다. 또한 구현 간에 큰 비호환성이 있을 수 있으며 향후 동작이 변경될 수 있습니다.
        • 트랜잭션이 한번 일어나면 HTTP Connection이 끊기고 TCP 커넥션을 맺는데 발생하는 지연과 느린 시작 지연이 트랜잭션마다 발생해서 성능이 매우 안 좋았던 부분을 개선하기 위해 등장
          • HTTP/1.1에서 Persistent connection이 디폴트로 지원되면서 사용할 필요가 없어짐
        • 참고
        • 더 알아보기 : https://goodgid.github.io/HTTP-Keep-Alive/
// Keep-Alive 헤더를 포함하는 응답
HTTP/1.1 200 OK
Connection: Keep-Alive
Content-Encoding: gzip
Content-Type: text/html; charset=utf-8
Date: Thu, 11 Aug 2016 15:23:13 GMT
Keep-Alive: timeout=5, max=1000
Last-Modified: Mon, 25 Jul 2016 04:32:39 GMT
Server: Apache
  • HTTP/1.1
    • HTTP 설계의 구조적 결함 교정, 두드러진 성능 최적화, 잘못된 기능 제거에 집중
  • HTTP/2.0
    • 10장 참고

1.8 웹의 구성요소

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

1.8.1 프락시

  • 클라이언트와 서버 사이에 위치
  • 주로 보안을 위해 사용
    • 모든 웹 트래픽 흐름 속에서 신뢰할 만한 중개자 역할을 함
    • 요청과 응답을 필터링 함
      • e.g., 회사에서 무언가 다운 받을 때 바이러스를 검출하거나 학생들에게서 성인 콘텐츠를 차단
  • 6장에서 자세히 이야기 함

1.8.2 캐시

  • 자주 찾는 것의 사본을 저장해 두는 특별한 종류의 HTTP 프락시 서버
  • 7장에서 캐싱 기술에 대해 다룸

1.8.3 게이트 웨이

  • 다른 서버들의 중개자로 동작하는 특별한 서버
  • 주로 HTTP 트래픽을 다른 프로토콜로 변환하기 위해 사용
  • 클라이언트는 자신이 게이트웨이와 통신하고 있음을 알아채지 못 함
  • 8장에서 다룸

1.8.4 터널

  • 두 커넥션 사이에서 raw 데이터를 열어보지 않고 그대로 전달해주는 HTTP 애플리케이션
  • HTTP 데이터를 하나 이상의 HTTP 연결을 통해 그대로 전송해주기 위해 사용
  • HTTP터널을 활용하는 대표적인 예
    • 암호화된 SSL(Secure Socket Layer) 트래픽을 HTTP 커넥션으로 전송함으로써 웹 트래픽만 허용하는 사내 방화벽을 통과시키는 것
  • 8장

HTTPS 에 대해 알아보기

1.8.5 에이전트

  • 웹브라우저 뿐만 아니라 자동화된 에이전트도 있음(스파이더, 웹 로봇 등)
  • 9장

1.9 시작의 끝

  • 1장에선 HTTP의 멀티미디어 전송 프로토콜로서의 역할에 주목 했다.
  • 남은 장들에서는 HTTP 프로토콜, 애플리케이션, 리소스의 구조에 대해 훨씬 더 자세히 설명

1.10 추가 정보

  • https://www.w3.org/Protocols/
    • HTTP 프로토콜에 대한 여러 훌륭한 링크를 포함
  • RFC(Request For Comments)
    • 미국의 국제 인터넷 표준화기구(IETF, Internet Engineering Task Force)에서 제공, 관리하는 문서
    • 인터넷 개발에 있어서 필요한 기술, 연구결과, 절차 등을 기술해 놓은 메모
    • 출처 : RFC란?
profile
움직이는 만큼 행복해진다

0개의 댓글