[Network] HTTP

jgoneit·2023년 3월 28일
0

Network

목록 보기
6/6
post-thumbnail

1.HTTP란

HTTP(HypterText Transfer Protocol)는 HTML 문서와 같은 리소스들을 전달하기 위해 서버와 클라이언트 사이에서 정보를 교환할 수 있도록 해주는 프로토콜입니다.

💡 프로토콜(Protocol) - 다시 한번 복습
프로토콜은 네트워킹을 함에 있어서 전세계적으로 지정한 통신 규약. 만약 지정된 규약 없이 서로 소통을하면 서로 알아들을 수 없어 소통이 불가능할 것임. 우리 사회에서 전세계적으로 통합적으로 지정한 소통을 위한 약속들이라고 생각.

2. HTTP 역사

  • HTTP/0.9(1991): GET Method만 지원, HTTP 헤더 X
  • HTTP/1.0(1996): Method, 헤더 추가
  • HTTP/1.1(1997): 현재 가장 많이 사용.
    • RFC2068(1997) -> RFC2616(1999) -> RFC7230~7235(2014)
  • HTTP/2(2015): 성능 개선
  • HTTP/3: TCP 대신에 UDP 사용, 성능 개선

3.HTTP의 특징

  • 클라이언트 서버 구조
    • HTTP 메세지는 서버와 클라이언트에 의해 해석
  • 무상태 프로토콜(stateless), 비연결성
    • HTTP는 연결상태를 유지하지 않는 비연결성 프로토콜.
      → 이는 클라이언트와 서버가 통신을 주고받는 과정에서 HTTP가 클라이언트나 서버의 상태를 확인하지 않는 것을 의미.
    • 비연결성 프로토콜이므로 요청/응답(Request/Response) 방식으로 작동한다.
    • 또한 stateless한 프로토콜이므로, 각각의 데이터 요청이 서로 독립적으로 관리가 된다. 즉, 이전 데이터 요청과 다음 데이터 요청이 서로 관련이 없다.
    • 다수의 요청 처리 및 서버의 부하를 줄일 수 있는 성능 상의 이점이 있다.
    • 그러나 비연결성이고 상태가 없기 때문에, 통신할 때마다 세로운 커넥션을 만들어야 하므로 클라이언트는 계속적인 인증이 필요하다는 단점이 있다.
      이 단점을 보완하기 위해 쿠키(Cookie)와 세션(Session)을 사용한다.
  • 단순함, 확장 용이성
    • HTTP/1.0에서 소개된 HTTP헤더 덕분에 HTTP를 확장하고 실험하기 쉬워졌다.
  • HTTP 프로토콜은 일반적으로 TCP/IP 통신을 이용하며, 기본 포트는 80이다.

💡HTTP의 기본 포트번호가 80인 이유는 HTTP가 문서화 되기 전부터 사용하지 않는 빈 포트 번호였고, 이 번호가 1991년 HTTP 0.9 버전에서 처음으로 문서화되면서 기본 포트로 지정되었기 때문이다.

4. 클라이언트 서버 구조

  • Request Response(요청 응답) 구조
  • 클라이언트는 서버에 요청을 보내고, 응답 대기
  • 서버가 요청에 대한 결과를 응답

01. 무상태 프로토콜(Stateless)

  • 서버가 클라이언트의 상태 보존 ❌
  • HTTP는 Default가 연결을 유지하지 않는 모델

장점과 단점

  • 장점:
    • 서버 확장성 높음(Scale Out)
    • 일반적으로 초 단위 이하의 빠른 속도로 응답
    • 1시간 동안 수천명이 서비스를 사용해도 실제 서버에서 동시에 처리하는 요청은 수십개 이하로 매우 적음
    • 서버 자원을 매우 효율적으로 사용 가능
  • 단점:
    • 클라이언트가 추가 데이터 전송 필요
    • 매 번 새로 연결해야함.
    • 웹 브라우저로 사이트를 요청하면 HTML에 링크된 수많은 자원이 함께 다운로드
    • 현재는 HTTP 지속 연결(Persistent Connections)로 문제 해결
    • HTTP/2, HTTP/3에서 더 많은 최적화

02. Stateful과 Stateless

  • Stateful
    • 항상 같은 서버 유지
  • Stateless
    • 아무 서버나 호출 가능
    • 수평 확장 유리
      • 정말 같은 시간에 딱 맞춰 발생하는 대용량 트래픽에 사용
        • Ex) 선착순 이벤트, 명절 기차 예매, 수강신청 등
    • 실무적 한계 존재
      • 모든 것을 무상태로 설계 할 수 있는 경우도 있고 없는 경우도 있다.
        • Ex) 로그인
    • 일반적으로 브라우저 쿠키와 서버 세션등을 사용해서 상태 유지
    • 상태 유지는 최소한만 사용
    • 전송해야할 데이터가 비교적 많음

3.요청과 응답(Request & Response)

HTTP 프로토콜로 데이터를 주고받기 위해서는 아래와 같이 요청(Request)을 보내고 응답(Response) 을 받아야한다.

💡요청과 응답은 클라이언트(Client)와 서버(Server)사이에서 이루어 진다.
클라이언트는 요청을 보내는 쪽이며, 웹에서는 브라우저가 이에 해당되고, 서버는 요청을 받고 응답하는 쪽이며 일반적으로 데이터를 보내주는 원격지의 컴퓨터를 의미한다.

01.요청(Request)

요청을 할 때는 URL을 이용하면 서버에 특정 데이터를 요청할 수 있다.
요청을 수행할 때는 HTTP 요청 메서드를(HTTP Request Methods)를 사용한다.
HTTP 요청 메서드는 HTTP Verbs라고도 불리며, 아래와 같은 주요 메서드를 가지고 있다.

1. 주요 메서드

  • GET: 리소스 조회, 요청
  • POST: 요청 데이터 처리, 새로운 리소스 생성, 등록
  • PUT: 리소스 전체 변경/수정/대체, 해당 리소스가 없으면 생성
  • PATCH: 리소스 일부 변경/수정(Update와 비슷하게 쓰인다.)
  • DELETE: 리소스 삭제

2. 기타 메서드

  • HEAD: GET과 동일하지만 메시지 부분을 제외하고, 상태 줄과 헤더만 반환
  • OPTIONS: 대상 리소스에 대한 서버에서 지원하는 메소드 확인. CORS에서 사용된다.
  • CONNECT: 대상 자원으로 식별되는 서버에 대한 터널 설정
  • TRACE: 대상 리소스에 대한 경로를 따라 메시지 루프백 테스트 수행

HTTP 요청 메서드에서도 영역을 나눌 수 있다.

01. Request Line

먼저 위에서 언급된 URL과, 요청 메서드, 그리고 HTTP 버전정보가 포함되어있으며, 요청 메시지의 첫째 줄에 표기.

02. Request Header

두 번째 줄은 헤더 영역. 헤더에는 클라이언트 PC와 브라우저 정보, 쿠키 등 다양한 클라이언트 환경에 대한 정보.
User-Agent, Upgrade-Insecure-Requests, Accept-Language등 여러가지 종류가 해당.

03. CRLF

줄바꿈 명령으로 한 줄을 띄움.

04. 본문[ message-body ]

클라이언트가 입력한 데이터를 저장하는 영역.

GET https://velog.io/@jgone2 HTTP/1.1		          // 시작줄
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) ... // 헤더
Upgrade-Insecure-Requests: 1

02.응답(Response)

응답은 HTTP 프로토콜의 버전, 상태코드, 상태 메시지, Response Header, 본문으로 구성되어 있다.

1. Status line

상태 코드는 서버가 클라이언트에게 응답의 상태를 알리는 수단이며, 크게 다섯가지 클래스로 분류된다.

  • 1xx: 요청 정보 처리중(Informational)
  • 2xx: 요청을 정상적으로 처리(Success)
  • 3xx: 요청을 완료하기 위해 추가 수행 필요(Redirection)
  • 4xx: 요청한 자원이 서버에 존재하지 않음(Client Error)
  • 5xx: 서버가 요청 처리 실패(Server Error)

2. Headers

위치, 서버 이름, 버전, 쿠키 등의 정보를 포함.

3. Body

payload에 해당하는 것들이 body에 해당

📚Reference

profile
BE to spring Developer

0개의 댓글