HTTP

정의

  • HTTP(Hyper Text Transfer Protocol)는 웹 서버(Apache, Nginx 등)와 클라이언트(브라우저)가 인터넷 상에서 HTML문서와 같은 리소스들을 주고받을 수 있도록 하기 위해 만든 프로토콜(통신 규약)

    스크린샷 2020-11-10 오후 4 51 43

  • HTTP통신은 클라이언트가 데이터를 요청(request)하면 그 요청을 처리하여 서버가 다시 클라이언트에게 응답(response)하는 큰 흐름을 따른다

  • 어떠한 데이터의 형태도 주고 받을 수 있다

특징

  • 무상태(stateless) & 비연결성(Connectionless)
    • 한 번의 요청에 대해 TCP통신을 설정한 후 한 번의 요청에 대한 응답이 처리되면 TCP연결을 끊어 버리는 형태의 통신
    • TCP연결을 끊어 버리는 형태의 통신으로 연속적인 통신에 부적합
    • 하지만, 인터넷과 같이 다수의 사용자를 대상으로 한 Pull방식의 사용자가 필요한 문서 서비스를 전달 받는 구조에는 적합한 통신 구조
    • 한 번의 요청에 대해 한 번의 응답으로 트랜잭션이 종료되므로 연속적인 작업 처리에 필요한 트랜잭션 상태 정보를 관리하기 위한 Overhead가 없다
    • HTTP를 상업적으로 이용하면서 이러한 구조는 큰 단점이 되었다
      • 대안 기술: Cookies & Session Tracking

HTTP Request Message의 구조

3가지 부분으로 구성

스크린샷 2020-11-10 오후 5 17 15

  • start line(request line)

    • HTTP Method: GET, POST 등 action을 정의
    • Request target: request가 전송되는 uri(end point)
    • HTTP Version
  • headers

    • 클라이언트와 서버가 요청 또는 응답으로 부가적인 정보를 전송할 수 있도록 해주며, key:value 값으로 되어있다
    • Host: (가상 호스팅을 위해) 서버의 도메인명과 서버가 리스닝하는 (부가적인) TCP 포트를 특정한다
    • User-Agent: 요청을 보내는 클라이언트에 대한 정보
    • Accept
      • MIME 타입으로 표현
      • 클라이언트가 이해 가능한 컨텐츠 타입이 무엇인지 알려준다
      • 서버는 제안 중 하나를 선택하고 사용하며 Content-Type 응답 헤더로 클라이언트에게 선택된 타입을 알려준다
    • Cache-Control(HTTP/1.1)
      • Cache를 이용하여 웹 서버와 클라이언트간의 요청과 응답 횟수를 줄여 대역폭을 향상하기 위해 사용된다
      • 만기일(expiration)과 유효일(validation)을 지정
    • Connection
      • 트랜젝션 종료후에 네트워크 연결을 유지할지 말지를 결정한다
      • HTTP/1.0은 트랜젝션 이후의 커넥션을 종료한다
      • colse : 연결을 끊음
      • keep alive : 연결을 지속
    • Content-Type
      • 해당 요청이 보내는 메세지 body의 타입
      • 예를 들어 JSON을 보내면 application/json
    • Content-Length: 메세지 body의 길이
  • blank line: 요청에 대한 meta 정보가 전송되었음을 알린다

  • body:

    • 해당 request의 실제 메세지/내용이 들어있다
    • XML, HTML, JSON 데이터가 들어갈 수 있다

HTTP Response 구조

스크린샷 2020-11-10 오후 6 56 58

  • status line

    • response의 상태를 간략하게 나타내며, 3부분으로 구성되어 있다

      • HTTP Version
      • status code: 응답 상태를 나타내는 코드
      • status text: 으답 상태를 설명(ex: Not Found)
    • headers

      • request의 header와 동일하다
      • response에서만 사용되는 header값이 있다. (예: User-Agent가 없고, Server가 있음)
    • blank line

    • body: 실제 응답하는 데이터를 나타낸다