HTTP 프로토콜이란?

  • HTTP란 HyperText Transport Protocol의 약자로 웹 서버와 클라이언트간의 문자를 교환하기 위한 통신규약

  • World Wide web (WWW)의 분산되어 있는 Server와 Client간의 Hypertext를 이용한 정보 교환이 가능하도록 하는 통신규약

  • HTTP는 웹에서만 사용하는 Protocol로 TCP/IP 기반으로 한 지점에서 다른 지점(보통 클라이언트와 서버)으로 요청과 응답을 전송



HTTP의 특징

  • HTTP 메시지는 HTTP Server와 HTTP Client에 의해서 해석

  • TCP/IP 프로토콜의 Application 계층에 위치

  • TCP 프로토콜을 이용(Default Port 80)



HTTP 요청 헤더 (from Client)

  • Accept

    • 응답에 채택될 수 있는 필수 매체 유형의 세트를 지정

    • client가 처리할 수 있는 content-type

  • Accept.Charset

  • 응답에 채택될 수 있는 문자 세트를 표시

  • 문자 format 지정 UTF-8 / Unicode / . . .

  • Accpet.Encoding

    • 응답에 채택될 수 있는 content-coding을 지정
  • Accpet.Language

    • 요청에 대한 응답으로 선호되는 자연어의 세트를 지정
  • authorization

    • 요청 중인 자원의 범위에 대한 사용자 에이전트의 인증 정보를 포함하는 신임 정보로 구성
  • Expect

    • 클라이언트에 특정 서버 동작이 필요한지 표시하는 데 사용
  • From

    • 이 필드가 주어진 경우 요청 사용자 에이전트를 제어하는 인간 사용자의 이메일 주소가 여기에 포함
  • Host

    • 참조중인 자원(일반적으로 HTTP URL) 또는 사용자가 지정한 원래 URI에서 획득한 요청중인 자원의 인터넷 호스트와 포트 번호를 지정

    • 호스트 필드값은 원래 URL에서 지정한 게이트웨이 또는 origin 서버의 이름 지정 권한을 나타내야 함

  • If.Match

    • 조건부로 만들 메소드와 함께 사용

    • 이전에 자원에서 하나 이상의 엔티티를 획득한 클라이언트는 If-Match 헤더 필드에 연관된 엔티티 태그의 목록을 포함하여 해당 엔티티 중 하나가 최신인지 확인할 수 있음

    • 이 기능의 용도는 최소한의 트랜잭션 오버헤드로 캐시된 정보를 효율적으로 업데이트 할 수 있도록 하는 것

    • 요청 업데이트 시에도 사용되어 잘못된 버전의 자원을 실수로 수정하지 않아야 함

    • 특수한 경우로 “*” 값은 자원의 모든 현재 엔티티와 일치

  • If-Modified-Since

    • 조건부로 만들 메소드와 함께 사용

    • 이 필드에 지정된 시간 이후에 요청된 변형이 수정되지 않은 경우 서버에서 엔티티가 리턴되지 않고 대신 304(수정되지 않음) 응답이 message-body 없이 리턴

    • 형식은 HTTP-date

  • If-None-Match

    • 조건부로 만들 메소드와 함께 사용

    • 이전에 자원에서 하나 이상의 엔티티를 획득한 클라이언트는 If-None-Match 헤더 필드에 연관된 엔티티 태그의 목록을 포함하여 해당 엔티티 중 최신인 엔티티가 없는지 확인할 수 있음

  • If-Range

    • 클라이언트의 캐시에 엔티티의 일부 사본이 있고 클라이언트가 캐시에 전체 엔티티의 최신 사본을 저장하려는 경우 조건부 GET을 통해 범위 request-header를 사용할 수 있음

    • 요청된 엔티티가 변경되지 않은 경우에는 클라이언트에서 누락된 파트가 전송되고 그렇지 않으면 전체 새 엔티티가 전송

    • HTTP 날짜를 포함할 수 있음

  • If-Unmodified-Since

    • 조건부로 만들 메소드와 함께 사용

    • 이 필드에 지정된 시간 이후에 요청된 자원이 수정되지 않은 경우 If-Unmodified-Since 헤더가 제공되지 않은 것처럼 서버가 요청된 조작을 수행

    • 지정된 시간 이후에 요청된 변형이 수정된 경우에는 서버가 요청된 조작을 수행하지 않고 412 코드(전제조건 실패)를 리턴

    • 형식은 HTTP-date

  • Max-Forwards

    • 다음 인바운드 서버에 요청을 전달할 수 있는 게이트웨이 또는 프록시의 수를 제한하기 위해 TRACE 메소드와 OPTIONS 메소드가 포함된 메커니즘을 제공
  • Proxy-Authorization

    • 클라이언트가 인증이 필요한 프록시에 자신(또는 클라이언트의 사용자)을 식별할 수 있게 허용

    • 요청 중인 자원의 범위 및/또는 프록시에 대한 사용자 에이전트의 인증 정보를 포함하는 신임 정보로 구성

  • Range

    • HTTP 요청(GET 메소드 사용)에서 리턴되는 결과 엔티티를 수신할 범위(바이트)를 표시
  • Referer

    • 클라이언트가 서버에 유리하도록 Request-URI를 획득한 자원의 주소(URI)를 지정할 수 있게 허용
  • TE

    • 응답에 채택할 확장 transfer-coding과 청크된 transfer-coding에서 트레일러 필드를 채택할지 여부를 표시
  • User-Agent

    • 요청을 생성하는 사용자 에이전트에 대한 정보가 들어 있음



HTTP 서버 응답 헤더 (from Server)

  • Accept-Ranges

    • 서버가 자원에 대한 범위 요청을 채택함을 표시하지만 누락된 경우에도 채택하지 않음을 의미하지는 않음
  • Age

    • 원본 서버에서 응답(및 해당 유효성 재검증)이 생성된 이후 경과된 송신자의 예상 시간을 전달
  • ETag

    • 요청된 변형에 대한 엔티티 태그의 현재 값을 제공

    • 엔티티 태그는 동일한 자원의 다른 엔티티와 비교하는 데 사용할 수 있음

  • Location

    • 새 자원의 식별 또는 요청의 완료를 위해 요청 URI 이외의 위치로 수신자의 경로를 재지정하는 데 사용

    • 필드 값은 하나의 절대 URI로 구성

  • Proxy-Authenticate

    • 407(프록시 인증 필요) 응답의 일부로 포함

    • 필드 값은 이 요청 URI에 대한 프록시에 적용 가능한 인증 스키마 및 매개변수를 표시하는 인증 확인으로 구성

  • Retry-After

    • 요청하는 클라이언트에 서비스를 사용할 수 없을 것으로 예상되는 기간을 표시하기 위해 503(서비스 사용 불가능) 응답과 함께 사용할 수 있음

    • 이 필드는 경로 재지정된 요청을 발행하기 전에 사용자-에이전트가 대기하도록 요청되는 최소 시간을 표시하기 위해 3xx(경로 재지정) 응답과 함께 사용할 수도 있음

    • 이 필드의 값은 응답 시간 이후 정수 기간(10진수 초) 또는 HTTP 날짜가 될 수 있음

  • Server

    • 원본 서버가 요청을 처리하기 위해 사용하는 소프트웨어에 대한 정보가 포함
  • Vary

    • 응답이 새로운 응답인 동안 캐시에서 응답을 사용하여 유효성 재검증 없이 후속 요청에 응답할 수 있는지 여부를 완전히 판별하는 요청-헤더 필드 세트를 표시

    • 캐시할 수 없거나 시간이 경과된(stale) 응답의 경우 Vary 필드 값은 사용자 에이전트에 표시를 선택하기 위해 사용된 기준에 대해 조언을 제공

  • WWW-Authenticate

    • 401(권한 없음) 응답 메시지에 포함

    • 필드 값은 요청 URI에 적용 가능한 인증 스키마 및 매개변수를 표시하는 하나 이상의 인증 확인으로 구성