HTTP란?

HTTP란 TCP/IP 네트워크 아키텍처 기준으로 보면 어플리케이션 계층에서 사용되는 프로토콜이다.

클라이언트-서버 구조에서 통신할 때 사용되며, Request와 Response가 존재한다.

HTTP 구조

HTTP의 구조는 크게 Start line + Header + Body로 구성된다.

  • Request
    • Start line
      • HTTP 메소드와, 타겟 경로, HTTP 버전이 명시된다.
    • Header
      • Host, cookie, user-agent 등의 정보가 포함된다.
    • Body
      • 서버로 보낼 정보를 담는다.
      • GET / HTTP/1.1 Host: developer.mozilla.org Accept-Language: fr
  • Response
    • Start line
      • HTTP 버전, 응답 상태 정보가 명시된다.
    • Header
      • 서버 정보, 날짜, 응답에 대한 정보 등이 들어간다.
    • Body
      • 서버가 응답한 리소스가 담겨있다.
      • HTML, JSON, TEXT등 여러 형식이 올 수 있다.
      • HTTP/1.1 200 OK Date: Sat, 09 Oct 2010 14:28:02 GMT Server: Apache Last-Modified: Tue, 01 Dec 2009 20:18:22 GMT ETag: "51142bc1-7449-479b075b2891b" Accept-Ranges: bytes Content-Length: 29769 Content-Type: text/html <!DOCTYPE html... (here comes the 29769 bytes of the requested web page)

HTTP 특징

HTTP/HTTPS 차이

  • HTTP는 암호화 되지 않은 데이터를 전송한다.
  • HTTP에 SSL, TLS을 결합 한 것이 HTTPS이다.
  • HTTPS 웹사이트는 인증된 기관에서 발급한 SSL/TLS 인증서를 획득해야한다.
    • SSL/TLS이란?
      • TLS는 SSL의 업그레이드 버전이다.
      • RSA암호화를 사용한다.

인증과정

  1. HTTPS 웹 사이트를 방문한다.
  2. 브라우저는 서버의 SSL 인증서를 요청한다.
  3. 서버는 public 키가 포함된 SSL 인증서를 보내준다.
  4. 브라우저가 CA의 인증서인지 검증하고, public 키를 이용해서 request를 암호화 한다.
  5. 서버에서 private key를 이용하여 메세지를 해독한다. 그리고 세션키를 암호화해서 브라우저에 전송한다.
  6. 브라우저에서 세션키를 사용해서 서버와 통신한다.

HTTP 버전

HTTP 1.0 / 1.1

  • HTTP의 초기버전(0.9라고 부름)은 한 줄로만 구성되어 있었다.
    • 리소스 요청에 대한 응답만 할 수 있다. (GET 메소드만 존재)
    • ```
    • Request
      GET /target.html
    • Response```
  • HTTP 1.0
    • 헤더가 추가되었다.
    • 버전정보와 메소드 정보를 전송한다.
      • GET, HEAD, POST 메소드
    • 상태 코드(200, 302, 404..)를 응답으로 보내줘 요청에 대한 성공/실패를 알 수 있다.
    • 헤더에 Content-Type을 명시해 HTML 이외에 데이터도 전송할 수 있음
    • 요청 하나당 커넥션을 생성하기 때문에 매번 3-way-handshake을 해야한다.
      • HTTP도 TCP 프로토콜 위에서 동작하므로, 통신을 하려면 3-way-handshake과정을 거쳐야함.
  • HTTP 1.1
    • Persistent connection 추가
      • 지정한 timeout동안 커넥션을 닫지 않는다.
      • HTTP 1.0 단점 개선
    • Pipelining 추가
      • 앞의 요청의 응답을 기다리지 않고 다음 요청을 보냄
      • 응답은 요청을 보낸 순서대로 온다.
    • Head Of Line Blocking (HOLB)
      • 앞의 요청이 너무 오래걸리면 뒤의 요청은 블럭킹 되는 문제가 있다.
    • 헤더 중복 문제

HTTP 2.0

  • HTTP 1.1 의 확장이며 성능개선을 한 프로토콜이다.
  1. 전송 방식 전환
    • HTTP 1.1 에서는 일반 텍스트에 개행문자로 헤더와 바디를 구분했지만 2.0에서는 바이너리 프레임으로 분할해서 전송한다.
    • 바이너리 형식이 전송속도와 파싱속도가 빠르고 오류 발생 가능성이 낮다.
  2. Multiplexed Streams
    • 요청의 프레임이 각 스트림을 통해 전달되고 응답을 받는다.
    • 한 커넥션 안에 여러 스트림이 존재하며, 이전 요청의 응답 여부와 상관없이 동시에 여러 요청을 처리할 수 있다.
  3. Server Push
    • 서버가 클라이언트가 요청하지 않은 리소스를 보내줄 수 있다.
      • *클라이언트에게 필요한
  4. Header Compression
    • 이전에 전송된 Header 를 table로 만들어 저장
    • 이전 Header에 포함된 내용을 제외한 새로운 내용을 허프만 인코딩으로 압축해서 전송
  • HTTP단의 HOLB는 없지만 TCP단의 HOLB는 존재

HTTP 3.0

  • QUIC(Quick UDP Internet Connection)를 기반으로 나온 HTTP의 새로운 버전
  • QUIC
    • UDP 기반의 전송 프로토콜
    • TCP의 단점을 극복하기위해 고안됨

RESTful API

출처

https://velog.io/@neity16/HTTP-HTTP-버전-별-특징#http-10

https://aws.amazon.com/ko/compare/the-difference-between-https-and-http/

https://developer.mozilla.org/ko/docs/Web/HTTP/Overview#http_기반_api

'CS > 네트워크' 카테고리의 다른 글

SSL/TLS란? SNI, Intermediate-Chain  (1) 2023.10.22
쿠키와 세션  (0) 2021.12.26
HTTP의 Stateless  (0) 2021.12.26
네트워크의 구성요소  (0) 2021.07.19
컴퓨터 네트워크 첫 걸음  (0) 2021.07.19

+ Recent posts