http 기본

Jaca·2021년 9월 28일
0

HTTP

HyperText Transfer Protocol.

지금 현재 HTML, TEXT, IMAGE, 음성, 파일, 영상, JSON, XML 모든 데이터를 http로 주고 받는다.

HTTP 특징

  • 클라이언트 서버 구조
  • 무상태 프로토콜(stateless), 비연결성
  • http 메서드
  • 단순함, 확장 가능

클라이언트 서버 구조

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

무상태 프로토콜

  • 서버가 클라이언트의 상태를 보존하지 않는다.
  • 장점 : 서버 확장성 높음
  • 단점 : 클라이언트가 추가 데이터 전송
  • stateful : 중간에 다른 서버로 바뀌면 안된다. (바뀐다면 정보를 미리 알려줘야함)
  • stateless : 중간에 다른 서버로 바뀌어도 됨, 무한한 서버 증설 가능
    • 실무 한계 : 모든 것을 무상태로 설계할 수는 없을 수도 있다. (로그인 상태) 최소한의 상태 유지 사용

비 연결성

  • http는 기본이 연결을 유지하지 않는 모델
  • 일반적으로 초 단위 이하의 빠른 속도로 응답
  • 트래픽이 수천개여도, 동시에 처리하는 실제 요청은 수십개 정도로 매우 적어짐 -> 서버 자원을 매우 효율적으로 사용

비 연결성의 한계

  • TCP/IP 연결을 새로 맺어야함, 3 way hs 시간 추가
  • 웹 브라우저로 사이트를 요청하면 html 뿐만 아니라 js, css, 이미지 등 많은 자원을 함께 다운로드
  • 지금은 http 지속 연결로 문제 해결

HTTP 메세지

HTTP 메세지 구조

시작 라인

요청 메세지

시작 라인은 request-line 과 status-line으로 구성된다.

예 : GET /search?q=hello&hl=ko HTTP/1.1 Host: www.google.com

request-line = method SP(HTTP 메서드), request-target(요청 대상), Http-version(HTTP 버전)으로 구성됨

  • HTTP 메서드 : GET
    서버가 수행해야할 동작 지정

  • 요청 대상 : search?q=hello&hl=ko
    absolute-path?query 로 구성됨.
    절대경로 = "/"로 시작하는 경로

  • HTTP 버전 : HTTP/1.1
    HTTP 버전 명시

응답 메세지

status-line 부분

status-line = HTTP-version(HTTP 버전) SP status-code(상태 코드) SP reason-phrase(이유 문구) CRLF

  • HTTP 버전

  • HTTP 상태 코드 : 요청 성공, 실패를 나타냄(200, 400, 500 등)

  • 이유 문구 : 사람이 이해할 수 있는 짧은 상태 코드 설명 글

HTTP 헤더

header-field = field-name ":" OWS field-value OWS
== > "Host" 와 ":" 사이는 띄어쓰면 안됨(표준 스펙). ":"와 "field-value"는 띄어쓰기 가능

  • HTTP 전송에 필요한 모든 부가정보를 전송함.

profile
I am me

0개의 댓글