EunHee-Jeong / TIL

Today I Learned #알쓸신잡 #심야아요

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

TCP/IP 표준 프로토콜(1) HTTP

EunHee-Jeong opened this issue · comments

WWW and HTTP

World Wide Web (WWW, Web)

  • 가장 많이 사용되는 인터넷 서비스
  • 정보를 HTML 형식으로 표현해 보여줌
  • 여기에 사용되는 프로토콜 → HTTP

Hyper-Text Transfer Protocol (HTTP)

  • 웹 요청과 응답 메시지를 교환하는 프로토콜
  • 요청과 응답 → 보통 클라이언트-서버 간에서 이루어짐

WWW

  • 브라우저 (= 클라이언트 프로그램)

    image

    • 컨트롤러

      • 데이터를 받아들이고 보여줌

      • 요청이 어떤 url 이냐에 따라 필요한 프로토콜을 선택해 서버에서 꺼내와 사용함

        • 프로토콜들 ⇒ HTTP, FTP, SSH, SMTP 등

          • 각각의 프로토콜들은 OS 내의 TCP/IP 7계층과 연결되어 동작함
    • 표현 형식

      • 정적 ⇒ HTML

      • 동적 ⇒ JavaScript, Java 등

HTTP

  • HyperText Transfer Protocol (줄여서 HTTP)

    • 웹 페이지의 요청과 응답을 전달하는 프로토콜임
  • HTTP 클라이언트가 요청을 HTTP 서버에게 보내면, 서버가 응답하는 방식임

  • HTTP 서버의 default 포트 번호 ⇒ 80

    • but 잘 사용하지 않음. 요청을 보내고 응답을 받을 때까지만 쓰고 연결을 끊기 때문임
  • HTTP 클라이언트는 시스템(OS)이 주는 임시 할당 포트 번호를 사용함

    • 소켓으로 연결 시 → 포트 번호를 통해 연결됨
  • HTTP는 TCP 서비스를 이용함

    • TCP 서비스 ⇒ 연결 지향, 신뢰적 프로토콜 ⇒ 데이터의 유실 및 변경 염려가 없음
  • 예제

    1. 비지속 nonpersistene 연결의 예시

      image

    2. 지속 persistent 연결의 예시

      image

  • HTTP 요청과 응답 메시지 형식

    image

    • Request message

      1. Request line

        • Method
          • GET, PUT, DELETE 등의 서비스를 요청하는 부분
        • URL
          • 경로 (= 페이지, 그림 등의 주소)
        • Version
          • HTTP 버전
        • cr, lf
          • Header line을 구분
      2. Header lines

        • 여러 줄이 올 수 있음
        • Value
          • 헤더의 속성 값이 들어감
      3. Blanck line

        • 헤더와 바디를 구분지어주는 부분
      4. body

        • 서버측에 요청할 실질적인 정보가 들어가는 부분
        • 옵셔널임
    • Response message

      1. Status line

      2. Header line

        • 클라이언트가 요청한 문서의 옵션들이 들어감
          • ex - 상태 코드
      3. Blank line

      4. body

        • HTML 문서에 해당되는 부분
  • HTTP 메시지 method

    • 서버측에 보내는 요청에 해당함

    • GET, HEAD, PUT, POST, TRACE, DELETE, CONNECT, OPTIONS가 있음

      • 행위 예시
        • GET ⇒ 마우스 클릭, 주소 접근 등
        • PUT ⇒ 서버에 파일을 올리는 것
        • POST ⇒ 내용 수정
        • DELETE ⇒ 내용 삭제
  • HTTP 요청 메시지 헤더 필드

    image

    • User-agent

      • 크롬이나 익스플로러의 버전에 해당함
    • Accept-encoding

      • 클라이언트가 인식 및 처리할 수 있는 인코딩의 방식을 의미함
      • 서버 측에서 응답 시 변환해서 보여줘야 함
    • Cookie

      • 서버 측으로 올려 보내는 정보에 해당함
      • 처음에 서버에서 클라이언트로 내려온 것을 저장하고 있다가, 헤더에 포함 시켜 보내줌
  • HTTP 응답 메시지 헤더 필드

    image

    • 이것 보다는 상태가 더 중요함

    • 쿠키

      • 서버에서 클라이언트 쪽으로 내려 보내는 정보임
      • 클라이언트는 이를 브라우저에 저장하고 있다가, request 마다 넣어서 보내줌.
      • 서버는 쿠키를 통해 클라이언트를 구분하고 추적할 수 있음 (= 상태를 판단할 수 있음)
  • 예제

    1. 문서를 가져오는 예제

    image

    • 요청 메시지

      • GET 메서드를 이용하여 경로 usr/bin/image1 의 그림을 가져옴
      • Request 라인은 GET 메서드와 URL을 보여주고, HTTP 버전 1.1을 사용함
      • 헤더의 두 번째 라인은 클라이언트가 GIF나 JPEG 형식을 받을 수 있음을 나타냄
      • body가 없음
    • 응답 메시지

      • 상태 라인과 헤더의 4개 라인이 있음
        • 날짜, 서버, 컨텐츠 인코딩 (⇒ MIME), 문서의 길이 등임
      • 문서의 body는 헤더 다음의 빈 줄 이후에 옴
    1. 서버로 정보를 올리는 예제

      image

      • 요청 메시지

        • Request 라인에 요청 메서드 (PUT), URL, HTTP 버전 (1.1)이 있음
        • 헤더에 4개의 라인이 더 있음
        • 빈 줄 이후에 요청 메시지의 body가 옴
          • 여기에 서버로 upload 하고자 하는 정보가 들어있음
      • 응답 메시지

        • 상태 라인과 4개의 헤더 정보가 있음
        • 빈 줄 이후에 서버가 클라이언트로 보낼 정보에 해당하는 body가 있음
  • 프락시 서버 Proxy server 란?

    • local network 내에 존재

    • 서버로부터의 응답을 복사해 캐시에 저장하고, 요청을 보낸 클라이언트에게 보내줌

      → 클라이언트에게는 서버처럼 동작하고, 서버에게는 클라이언트처럼 동작함

    • 같은 정보를 캐시에 저장하고 있기 때문에, 동일한 내용 요청 시 서버로 바로 요청하는 것이 아닌 캐시 내에 저장해서 가지고 있던 정보를 클라이언트에게 돌려줌

      • 네트워크를 따로 이용하지 않고도 정보에 효율적으로 접근할 수 있으며, 속도를 향상시켜줌