HTTP란?

bkboy·2022년 8월 1일
0

웹 개발

목록 보기
8/26
post-thumbnail

HTTP

HTTP는 Hyper Text Transfer Protocol의 약자로 서버/클라이언트 모델을 따라 데이터를 주고 받기 위한 프로토콜(약속)이다.

TCP/IP (Transmission Control Protocol / Internet Protocol)을 이용하며 사용 포트 번호는 기본적으로 80이다. HTTP 서버가 80번 포트에서 요청을 기다리고 클라이언트는 80번 포트로 요청을 보내는 것이다.

TCP/IP

HTTP는 애플리케이션 계층 프로토콜이다. HTTP는 네트워크 통신의 핵심적인 세부 사항에 대해서 신경쓰지 않는다. 이러한 과정은 신뢰성 있고 대중적인 프로토콜인 TCP/IP 에게 맡긴다.
TCP/IP 인터넷에서 컴퓨터들이 서로 정보를 주고 받는데 쓰이는 프로토콜의 집합을 말하며 TCP부분과 IP부분으로 나뉜다. TCP는 전송 조절 프로토콜이고 IP는 인터넷 프로토콜인데 TCP/IP를 따른다는 것은 IP 주소 체계에 따르고 IP 라우팅을 이용해 목적지에 도달하면 TCP의 특성으로 송신자와 수신자를 연결한다는 것을 말한다. 깊게 들어가면 더 많은 내용이 있지만 이 글에선 HTTP를 이해하는데 도움되는 수준만 언급하겠다.

웹 개발에서 HTTP의 중요성

클라이언트와 서버 모두 HTTP를 이용해 통신 하므로 웹 개발자라면 백엔드, 프론트엔드 나뉠 것 없이 중요하다. 후에 나올 CORS, CORB와 같은 에러를 해결하는데도 HTTP 지식이 활용된다.

HTTP 메시지 구조

HTTP 메세지는 서버와 클라이언트 간에 데이터가 교환되는 방식이다. 메시지 타입은 클라이언트가 서버에 보내는 요청, 서버가 클라이언트에 보내는 응답의 두가지 형태가 있다.

HTTP 메시지 크게 세부분으로 구성된다.

  • Start line (시작줄)
  • Headers (헤더)
  • Body (본문)

1. Start line (시작줄)

모든 HTTP 메시지는 시작줄로 시작한다.

요청의 경우는 HTTP 메서드, 요청 URI, HTTP 버전
응답의 경우 HTTP 버전, 상태코드, 사유구절의 형태로 나타난다.

// 요청 예
GET /specials/saw-blade.gif HTTP/1.1 

// 응답 예
HTTP/1.0 200 OK 

HTTP 메서드 : 클라이언트가 서버에 요구하는 것으로 GET, HEAD, POST 등 한 단어로 구성된다.
요청 URI : 해당 요청이 전송되는 목표 URI를 나타낸다.
HTTP 버전 : HTTP 버전을 나타낸다. 현재는 1.1버전이고 2.0 버전을 개발중에 있다.
상태 코드 : 성공과 실패의 여부를 나태내는 코드이다.
사유 구절 : 숫자로 된 상태코드를 설명해주는 짧은 문구이다.

2. Headers

크게 공통 헤더(General Headers), 요청 헤더(Request Headers), 응답 헤더(Responce Headers), 엔티티 헤더(Entity Headers)로 나뉜다.

아래는 개발자 도구 네크워크 탭을 캡쳐한 것이다. 공통, 요청, 응답 헤더에 관한 정보를 확인할 수 있다. 엔티티 헤더는 요청, 응답 헤더 안에 속한 것으로 보인다.

  1. 공통 헤더(General Headers)

    공통 헤더는 요청과 응답에 있어 공통적인 헤더 정보를 보여준다. 바디에서 최종적으로 전송되는 데이터와는 관련이 없는 헤더이다.

1-1. 주요 항목

  • Date : 현재시간
  • Connection : keep-alive로 설정 (큰 의미는 없는듯 하다.)
  • Cache-Control : Cache 속성을 설정한다.
    no-store : 캐시를 저장하지 않음
    no-cache : 서버에 확인 후 캐시 사용
    must-revalidate : 만료된 캐시를 서버에 확인
    public : 공유 캐시에 저장
    private : 특정 사용자 환경에서만 저장
    max-age : 캐시 유효 기간 명시
  • Content-Type : 본문의 미디어 타입(MIME), 문자열 인코딩들을 명시한다.
  • Content-Encoding : 데이터의 압축 방식을 지정한다.
  • Content-Length : 전송할 데이터(body)의 크기를 저장한다.
  1. 요청 헤더(Request Headers)
    요청에 대한 부가 정보를 나타낸다.

2-1. 주요 항목

  • Host : 서버의 도메인 네임이 나타난다.
  • User-Agent : 현재 사용자가 어떤 클라이언트(운영체제, 브라우저 등)를 이용해 요청을 보냈는지 나타낸다.
  • Accept : 서버로부터 전송 받고자하는 콘텐츠의 미디어 타입을 지정한다. 이를 통해 웹 브라우저에 최적화된 타입의 데이터를 사용할 수 있다.
    Accept-Charset : 문자 인코딩 타입
    Accept-Language : 지원 언어
    Accept-Encoding : gzip 등 압축 형식
  • Authorization : 인증 토큰을 서버에 보낼 때 사용된다.
  • Origin : 요청이 어느 주소에서 시작되었는지를 나타낸다. 보낸 주소와 받는 주소가 다를 경우 CORS문제가 발생한다.
  • Cookie : 웹 서버의 요청에 의해 클라이언트에 저장해 놓은 쿠키의 키와 값을 쌍으로 전송한다.
  • Referer : 현재 페이지 이전의 페이지 주소가 담겨있다.
  1. 응답 헤더(Responce Headers)
    응답에 대한 부가 정보를 나타낸다.

3-1. 상태 코드 (Status Code)
상태코드는 많은 종류가 있으며, 세 자리 숫자이고 크게 다섯 부류로 나눌 수 있다.

  • 1xx (조건부 응답) : 요청을 받았으며 작업을 계속한다.
  • 2xx (성공) : 클라이언트가 요청한 동작을 수신하여 이해했고 승낙했으며 성공적으로 처리했음을 가리킨다.
  • 3xx (리다이렉션 완료) : 클라이언트는 요청을 마치기 위해 추가 동작을 취해야 한다.
  • 4xx (요청 오류) : 클라이언트에 오류가 있음을 나타낸다.
  • 5xx (서버 오류) : 서버에 오류가 있음을 나타낸다.

3-2. 주요 항목

  • Access-Control-Allow-Origin : CORS 문제를 관리할 수 있다. 해당 항목에 요청의 Origin의 주소가 들어가야 문제가 발생하지 않는다.
  • Allow : 응답 코드 405(Method Not Allowed) 상태에서 서버가 제공할 수 있는 HTTP 메서드를 지정한다.
  • Location : 응답 코드가 300번대거나 201 Created 일 때 어느 페이지로 이동할지를 나타낸다.
  • Set-Cookie : 클라이언트에 저장할 쿠기 정보를 지정한다.
  • Content-Security-Policy : 외부 파일을 불러오는 경우, 차단할 소스와 불러올 소스를 명시할 수 있다.
  1. 엔티티 헤더
    엔티티 헤더는 메시지 바디의 컨텐츠를 나타낸다. 요청과 응답에 모두 사용된다. 항목 앞에 'Contnet-' 가 붙는다.

3. Body (본문)

Headers에서 한칸 띄고 명시되며 주로 응답 메시지에 있다.
응답 메시지에 담긴 내용이 브라우저 화면에 띄워진다.

참고

profile
음악하는 개발자

0개의 댓글