notion-012

01. HTTP란?

  • HyperText Transfer Protocol의 줄임말로, www(World Wide Web)상에서 사용하는 프로토콜
  • 응용 계층(Application Layer) 프로토콜
  • HyperText(참조 즉 하이퍼링크를 통해 한 문서에서 다른 문서로 즉시 접근할 수 있는 텍스트) 문서들을 주고받기 위한 규약
  • 서버와 클라이언트 사이에 요청과 응답을 주고 받는 프로토콜로, 흔히 웹 브라우저 주소창에 입력하는 웹 주소인 URL을 통해 요청과 응답이 이루어짐
  • 실제 전송은 TCP를 통해 이뤄진다
  • 포트는 80번

01-1. HTTP 작동 방식

  • 서버-클라이언트 모델을 따른다.
  • 클라이언트 request → 서버 response

Untitled

01-2. HTTP 특성

Connectionless

  • 서버에 연결하고, 요청해서 응답을 받으면 연결을 끊어버린다.
  • 자원 하나에 대해서 하나의 연결을 만든다.

장점

  • 불특정 다수를 대상으로 하는 서비스에 적합하다.
  • 수십만명이 웹 서비스를 사용하더라도 접속 유지는 최소한
  • 더 많은 유저의 요청을 처리할 수 있다.

단점

  • 연결을 끊어버리기 때문에 클라이언트의 이전 상태를 알 수 없다. (Stateless)
  • 클라이언트가 과거에 로그인을 성공하더라도, 로그 정보를 유지할 수 없다.
  • HTTP는 웹의 cookie를 이용해서 이 문제를 해결하고 있다.

Cookie
클라이언트와 서버의 상태 정보를 담고 있는 정보조각

예시
첫 요청 시 : 클라이언트 로그인 성공 → 서버 로그인 정보를 자신의 DB에 저장 → return 쿠키 (to 클라이언트)
두번째 요청 시 : 클라이언트 쿠키 요청 (to 서버) → 서버는 해당 쿠키로 자신의 DB 조회 → 로그인 여부 확인

01-3. URI

  • URI(Uniform Resource Identifiers)는 자원의 위치를 알려주기 위한 프로토콜
  • 클라이언트 소프트웨어(IE, Chrome, Firefox, Safari …)는 URI를 사용해서 자원(HTML 문서, 이미지, 동영상, 오디오 등)의 위치를 찾는다.
  • https://www.jiyoung.com/index.php 분석
    • https : 자원에 접근하기 위해서 https 프로토콜 사용
    • www.jiyoung.com : 자원의 인터넷 상에서의 위치 도메인은 ip 주소로 변환되므로, 변환된 ip 주소로 서버의 위치를 찾을 수 있다.
    • index.php : 요청할 자원의 이름
  • 따라서 프로토콜, 위치, 자원명으로 해당 자원에 접근할 수 있다.



02. HTTP Method

요청의 종류를 서버에게 알려주기 위해서 사용한다.

  • GET : 정보를 요청하기 위해서 사용한다. (SELECT)
  • POST : 정보를 밀어넣기 위해서 사용한다. (INSERT)
  • PUT : 정보를 업데이트하기 위해서 사용한다. (UPDATE)
  • DELETE : 정보를 삭제하기 위해서 사용한다. (DELETE)

→ 각 용도에 맞는 method가 있음에도 불구하고, 사실상 GET과 POST 만으로 모든 요청을 표현할 수 있다.

→ Restful API 서버의 경우에는 GET, POST, DELETE, PUT을 명시적으로 구분한다.

  • HEAD : (HTTP) 헤더 정보만 요청한다. 해당 자원이 존재하는지, 혹은 서버에 문제가 없는지 확인하기 위해서 사용한다.
  • OPTIONS : 웹 서버가 지원하는 메서드의 종류를 요청한다.
  • TRACE : 클라이언트의 요청을 그대로 반환한다.

02-1. 요청 데이터 포맷

요청 데이터는 Header과 body로 구성

Untitled 1

Untitled 2

→ 헤더의 일반적인 모습

  1. 요청 메서드 : GET, PUT, POST, PUSH, OPTIONS 등의 요청 방식이 온다
  2. 요청 URI : 요청하는 자원의 위치를 명시
  3. HTTP 프로토콜 버전 : 웹 브라우저가 사용하는 프로토콜 버전 (HTTP/2.0)

02-2. 응답 헤더 포맷

Untitled 3

  1. 프로토콜과 응답 코드 : (HTTP/2.0 200 OK)
    1. 응답 프로토콜과 버전
    2. 응답 코드
    3. 응답 메세지
  2. 날짜 : (Date:Sun,12 Jan 2022 10:30:00 GMT)
  3. 서버 프로그램 및 스크립트 정보 : (Apache/2.2.4 (Unix) PHP/5.2.0)

이 외에도 여러 다양한 정보를 추가할 수 있다.

→ 컨텐츠의 마지막 수정일, 캐쉬 제어 방식, 컨텐츠 길이 등

02-3. 응답 코드

  • 2XX 성공 : 서버가 요청을 성공적으로 처리했음
    • 200 : 서버가 요청을 제대로 처리했다.
  • 3XX 리다이렉션 : 요청을 완료하기 위해 다른 페이지로 보내야 할 때
  • 4XX 요청 오류 : 클라이언트 요청에 오류가 있음을 의미한다.
    • 400 : 헤더 포맷이 HTTP 규약에 맞지 않을 경우
    • 401 : 인증을 필요로 하는 요청인 경우
    • 403 : 서버가 요청 거부
    • 404 : 요청한 자원이 서버에 존재하지 않음
    • 405 : 요청에 지정한 방법을 찾을 수 없다.
    • 406 : 요청한 페이지를 콘텐츠 특성 때문에 응답할 수 없다.
    • 408 : 서버의 요청 대기가 시간 초과
    • 410 : 요청한 자원이 삭제되었음 404와 비슷하지만, 410은 과거에는 있었으나 지금 없는 자원 (ex) 삭제한 포스트
    • 411 : 유효한 콘텐츠 길이를 명시해줘야 함
  • 5XX 서버 오류 : 서버에 문제가 있음을 나타낸다.

02-4. Keep Alive

  • 지정된 시간동안 연결을 끊지 않고 요청을 계속해서 보낼 수 있는 특징
  • 원래 HTTP는 하나의 연결에 하나의 요청을 하는 것을 기준으로 설계
    → 수십, 수백개의 데이터를 교환할 때 굉장히 비효율적
    → 연결을 맺고 끊는 것은 TCP 통신 과정에서 가장 많은 비용이 소비되는 작업
  • Keep-alive 설정
    • Connection: Keep-Alive
    • Keep-Alive:timeout=5, max=200
    • → 연결을 keep-alive 상태로 유지하며, 하나의 연결당 5초 동안 유지한다.
    • → 최대 200개의 연결까지 허용한다.

장점

  • 하나의 연결로 여러 요청을 처리하기 때문에 효율적

단점

  • 연결이 그만큼 길어지기 때문에 동시간대 연결이 늘어남.
    → 연결을 다 써버리면 서버는 더 이상 연결을 받을 수 없다.
    → 따라서 keep-alive 설정의 max값으로 연결을 제한한다.

02-5. HTTP 인증 방법

  • Basic Access Authentication
    • HTTP 영역에서 이루어지는 인증 (웹 서버 차원)
    • 매 요청마다 HTTP 헤더에 아이디와 패스워드를 실어 보내면 서버에서 확인하고 인증하게 된다. Untitled 4
      1. HTTP 요청
      2. 웹 서버는 401 Authorization Required(인증을 필요로 하는 요청)을 응답한다.
      3. 브라우저는 ID, PW를 입력할 수 있는 인증 창을 띄운다.
      4. 입력한 ID. PW를 HTTP 헤더에 담아 웹 서버로 보낸다.
      5. 웹 서버가 ID, PW를 확인하고, 일치한다면 요청을 처리한다.

→ 이는 웹 자원의 접근을 통제하기 위한 최소한의 수단만을 제공
(cookie, session identifier 이나 로그인 페이지 등의 준비 없이 순수하게 HTTP만을 사용해서 인증 가능)

→ 암호화, 해쉬 등의 기술을 사용하지 않으므로 보안성이 낮다.

→ 매 요청마다 ID, PW를 보내는 방식이기 때문에 캐쉬가 필요하다.


참고

https://www.joinc.co.kr/w/Site/Network_Programing/AdvancedComm/HTTP

카테고리: ,

업데이트:

댓글남기기