HTTP 정리 - HTTP 기본

JoongHyeok.Velog·2022년 4월 14일
0

HTTP

목록 보기
3/3
post-thumbnail

인프런 - 모든 개발자를 위한 HTTP 웹 기본지식 강의를 수강하며 수강섹션에 따라 총 8개의 파트로 분리하여 정리해 보려 합니다.

  • 인터넷 네트워크
  • URI와 웹 브라우저 요청흐름
  • HTTP 기본
  • HTTP 메서드
  • HTTP 메서드 활용
  • HTTP 상태코드
  • HTTP헤더1 - 일반 헤더
  • HTTP헤더2 - 캐시와 조건부 요청
    이번에는 그 세번째 섹션인 HTTP 기본 에 대해 정리하겠습니다.

HTTP 기본

모든것이 HTTP

HTTP 역사

• HTTP/0.9 1991년: GET 메서드만 지원, HTTP 헤더X
• HTTP/1.0 1996년: 메서드, 헤더 추가
• HTTP/1.1 1997년: 가장 많이 사용, 우리에게 가장 중요한 버전
• RFC2068 (1997) -> RFC2616 (1999) -> RFC7230~7235 (2014)
• HTTP/2 2015년: 성능 개선
• HTTP/3 진행중: TCP 대신에 UDP 사용, 성능 개선

기반 프로토콜

• TCP: HTTP/1.1, HTTP/2
• UDP: HTTP/3
• 현재 HTTP/1.1 주로 사용
• HTTP/2, HTTP/3 도 점점 증가

HTTP 특징

• 클라이언트 서버 구조
• 무상태 프로토콜(스테이스리스), 비연결성
• HTTP 메시지
• 단순함, 확장 가능

무상태 프로토콜

  • 서버는 클라이언트의 상태를 보존하지 않습니다.
  • 무상태 프로토콜의 장점은 서버 확장성이 높습니다.
  • 무상태 프로토콜의 단점은 추가 데이터를 전송해야하는 점입니다.

상태유지(Stateful) vs 무상태(Stateless) 차이

  • 상태유지는 요청과 응답중간에 다른 서버로 변경이 되면 안됩니다. 중간에 다른 서버로 바뀔때 상태 정보를 다른 서버에게 미리 알려줘야합니다.

  • 무상태는 중간에 다른 서버로 바뀌어도 됩니다. 그래서 응답 서버를 쉽게 바꿀수 있습니다.이는 무한한 서버 증설이 가능하다는 것을 의미합니다.


상태유지 프로토콜은 요청과 응답과정중 서버에 장애가 발생한다면 응답을 받지 못하게 됩니다.


하지만 무상태 프로토콜을 클라이언트의 상태를 보관하고 있지 않기 때문에 어떤 서버로도 응답이 가능하게 됩니다.이러한 특성덕분에 무상태는 수평적인 확장에 유리합니다. 하지만 단점도 물론 존재합니다.무상태 프로토콜의 한계는 다음과 같습니다.

  • 모든 것을 무상태로 설계 할 수 있는 경우도 있고 없는 경우도 있습니다.
  • 무상태
    - ex) 로그인이 필요 없는 단순한 서비스 소개 화면
  • 상태 유지
    - ex) 로그인
  • 로그인한 사용자의 경우 로그인 했다는 상태를 서버에 유지
  • 일반적으로 브라우저 쿠키와 서버 세션등을 사용해서 상태 유지
  • 상태 유지는 최소한만 사용

비연결성

비연결성의 특징은 다음과 같습니다.

  • HTTP 는 기본이 연결을 유지하지 않는 모델입니다.
  • 일반적으로 초 단위의 이하의 빠른 속도로 응답합니다.
  • 1시간 동안 수천명이 서비스를 사용해도 실제 서버에서 동시에 처리하는 요청은 수십개 이하로 매우 작습니다.
  • 서버의 자원을 매우 효율적으로 사용할 수 있습니다.

비연결성의 한계 극복

  • TCP/IP 연결을 새로 맺어야 합니다. - 3 way handshake 시간이 추가됩니다.
  • 웹 브라우저로 사이트를 요청하면 HTML뿐만 아니라 자바스크립트,CSS, 추가 이미지 등 수 많은 자원이 함께 다운로드 됩니다.
  • 지금은 HTTP 지속연결로 문제를 해결합니다.
  • HTTP/2,HTTP/3 에서 더 많은 최적화 작업을 진행했습니다.

HTTP 메시지 구조


시작 라인

GET /search?q=hello&hl=ko HTTP/1.1

요청 메시지 - HTTP 메서드
GET /search?q=hello&hl=ko HTTP/1.1

  • 종류 : GET,POST,PUT,DELETE...
  • 서버가 수행해야할 동작을 지정합니다.

요청 메시지 - 요청 대상
GET /search?q=hello&hl=ko HTTP/1.1

  • absolute-path(?query)(절대경로(?쿼리))
  • 절대경로는 "/" 로 시작하는 경로입니다.

요청 메시지 - HTTP 버전
GET /search?q=hello&hl=ko HTTP/1.1

응답 메시지
• start-line = request-line / status-line
• status-line = HTTP-version SP status-code SP reason-phrase CRLF
• HTTP 버전
• HTTP 상태 코드: 요청 성공, 실패를 나타냄
• 200: 성공
• 400: 클라이언트 요청 오류
• 500: 서버 내부 오류
• 이유 문구: 사람이 이해할 수 있는 짧은 상태 코드 설명 글

HTTP 헤더

• header-field = field-name ":" OWS field-value OWS (OWS:띄어쓰기 허용)
• field-name은 대소문자 구문 없음

용도

• HTTP 전송에 필요한 모든 부가정보
• 예) 메시지 바디의 내용, 메시지 바디의 크기, 압축, 인증, 요청 클라이언트(브라우저) 정보,
서버 애플리케이션 정보, 캐시 관리 정보...
• 표준 헤더가 너무 많음
https://en.wikipedia.org/wiki/List_of_HTTP_header_fields
• 필요시 임의의 헤더 추가 가능
• helloworld: hihi

HTTP 메시지 바디

용도

• 실제 전송할 데이터
• HTML 문서, 이미지, 영상, JSON 등등 byte로 표현할 수 있는 모든 데이터 전송 가능

profile
영차영차

0개의 댓글