HTTP : Hypertext Protocol


HTTP란 서버와 클라이언트 간의 TCP/IP 통신 위에서 메시지 교환하기 위해 사용되는 프로토콜이다.

프로토콜 : 서로다른 하드웨어 기기끼리 원활하게 통신하기 위해 필요한 규칙

HTTP 프로토콜 : 웹 브라우저와 웹 서버 간의 데이터를 주고받는 규칙



1-1. HTTP의 특징


Stateless

  • 과거 정보를 남기지 않고 새로운 리퀘스트를 보낼때마다 새로운 리스폰스를 보낸다.

  • 상태를 유지하고 싶을때는 세션과 쿠키가 쓰인다.


리퀘스트에서 URI로 리소스를 식별

  • 요청 라인

    • GET www.example.com/products/item123.html HTTP/1.1
  • 헤더에 호스트 지정

    • GET /products/item123.html HTTP/1.1 Host: http://www.example.com
  • 자신에게 송신하는 경우 와일드카드 지정

    • OPTIONS * HTTP/1.1


지속연결

  • 기존에는 비지속연결

    • 요청을 주고 받을 때 마다 새로운 TCP커넥션을 연결하고 종료해서 주고받을 데이터가 많아질수록 부하가 커진다.
    • 지속연결을 통해서 서버의 부하를 줄이고 통신을 빠르게 하였다.


  • 파이프라이닝 가능

    • 기존 응답을 기다리지 않고, 다음 리퀘스트를 보낸다.
    • 하지만 성능 향상이 미비하고 프록시 버그가 많아 모든 브라우저에서는 기본적으로 활성화 안되어있다.



1-2. HTTP 요청/응답 메시지 구성 요소


리퀘스트 메시지 (Request Message)

GET /index.html HTTP/1.1
Host: http://www.example.com
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36
Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,/;q=0.8
  • Request Line (요청 라인)

    • 요청 방식(Method): GET, POST, PUT, DELETE 등

    • 요청 대상(URI): 요청하려는 자원의 경로

    • HTTP 버전: 예를 들어, HTTP/1.1

  • Headers (헤더)

    • 요청의 메타데이터를 포함

    • Host, User-Agent, Accept, Content-Type 등

  • Body (본문)

    • POST나 PUT 요청에서 전송할 데이터 포함한다. (필요시)


리스폰스 메시지 (Response Message)

HTTP/1.1 200 OK
Date: Sun, 25 Aug 2024 12:28:53 GMT
Server: Apache/2.4.1 (Unix) Last-Modified: Wed, 22 Jul 2024 19:15:56 GMT Content-Length: 88 Content-Type: text/html
<html> <body> <h1>Hello, World!</h1> </body> </html>
  • Status Line (상태 라인)

    • HTTP 버전: 예를 들어, HTTP/1.1

    • 상태 코드(Status Code): 요청의 처리 결과를 나타낸다.

    • 예를 들어, 200, 404

    • 상태 메시지: 상태 코드의 설명 메시지 OK, Not Found

  • Headers (헤더)

    • 응답의 메타데이터를 포함한다. 예를 들어, Content-Type, Content-Length, Set-Cookie 등이 있다.



  • Body (본문)

    • 요청한 자원이나 데이터를 포함



1-3. HTTP 메서드


* 멱등성 : 연산을 여러번 적용하더라고 결과가 달라지지 않는 성질

GET : 데이터를 가져옴, 멱등성 보장

POST : 새로운 리소스 등록, 멱등성 미보장

PUT : 대상 리소스가 없다면 생성하고, 리소스가 존재하면 교체, 멱등성 보장

PATCH : 리소스의 일부를 교체, 멱등성 보장 or 미보장

DELETE : 리소스 삭제



1-4. HTTP 상태 코드


  • 100 번대 : 코드를 요청받았고, 해당 요청에 대한 프로세스를 진행 중

  • 200 번대 : 성공 상태

  • 300 번대 : 요청에 대한 추가적인 처리, 동작이 필요

  • 400번대 : 클라이언트의 요청이 잘못되었을때의 오류

  • 500번대 : 서버가 잘못되었을때의 오류



TCP/IP 프로토콜


2-1. TCP : Transmission Control Protocol


  • 역할

    • 전송 제어 프로토콜

    • 서버와 클라이언트 사이 통신 연결 제어

  • 특징

    • Byte Stream 서비스 제공

      - <u>큰 데이터를 잘게 쪼갠 뒤 전송 (패킷)</u>
      


    • 3way handshaking

      • 1.요청 : 내목소리 들리니~? 🗣️

      • 2.상대 응답 : 응 들려~ 👂🏻

      • 3.내 응답 : 나도 들려~ 👂🏻👂🏻

    • 신뢰성 담당 : 응답을 확인해야 데이터를 보냄



2-2. IP : Internet Protocol


  • 역할

    • TCP에서 분할된 데이터 패킷을 목적지로 전달.


  • 특징

    • IP 주소 : 네트워크에 연결된 장치에 할당된 논리 주소

    • MAC 주소 : 기기에 하나씩 할당되어있는 물리적 고유 식별주소

    • IP 주소는 언제든 변경될 수 있기 때문에 믿기 힘들기 때문에 변하지 않는 MAC 주소를 쓴다. 패킷을 전송하려면 IP 주소를 MAC 주소로 변환하는 작업이 필요하고 이 작업은 ARP를 통해 이루어진다.

    • ARP : Address Resolution Protocol

      • 주소를 찾아가는 프로토콜

      • 수신자의 IP 주소를 통해 MAC주소를 조사하여 루트를 찾아낸다.

      • 이때 중간에 경유하는 네트워크 기기들이 있는데, 중간기기들을 전체 루트를 알 필요 없이 자기가 넘겨야하는 다음 주소만 알면 된다. 마치 택배의 중간 경유지인 Hub와 같은 개념

    • DNS : Domain Name System

      • 도메인 이름 및 IP 주소를 확인

      • http://www.juju.com 도메인 이름을 127.000.000 IP 주소로 변환하고 도메인 이르을 웹 브라우저에 입력할 때, 최종 사용자를 어떤 서버에 연결할 것인지 제어

    • URL :

      • 웹 페이지상의 주소

      • 리소스의 위치

      • http://www.juju.com/category : categoty는 리소스의 실제 위치

    • URN :

      • 리소스의 위치와 상관없이 식별가능한 고유한 이름

      • URL을 변경하면 기존 URL을 사용할 수 없는 URL의 한계 때문에 생김

    • URI :

      • URL과 URN을 포괄하는 개념으로 리소스에 대한 고유 식별자

      • www.juju.com/category/1 : /1은 카테고리를 식별하는 식별자이므로 URI 개념

      • http://www.juju.com/category?page=1 : 쿼리 또한 식별자로 URI 개념



2-3. TCP/IP 4계층

  • 응용 계층: 데이터 생성 및 사용.

  • 전송 계층: 데이터 전달 보장 (TCP).

  • 인터넷 계층: 데이터 전송 경로 설정 (IP).

  • 네트워크 액세스 계층: 물리적 데이터 전송 (MAC).