HTTP

Jelkov Ahn·2021년 10월 18일
0

HTTP / 네트워크

목록 보기
2/11
post-thumbnail

HTTP(HyperText Transfer Protocol) : 문서를 정송하기위 한 Application Layer 프로토콜.

HTTP Messages

정의: 클라이언트와 서버 사이에서 데이터가 교환되는 방식.

유형 2가지 : 요청(requests) / 응답(responses)

1. start line

  • 요청/응답의 상태를 나타냄.
  • 항상 첫번째 줄에 위치.
  • 응답에서는 status line 이라고 부름
  1. HTTP headers
  • 요청을 지정
  • 메세지에 포함된 본문을 설명하는 헤더의 집합
  1. empty line
  • 헤더와 본문을 구분하는 빈줄
  1. body
  • 요청과 관련된 데이터나, 응답과 관련된 데이터 또는 문서를 포함.

-> start line & HTTP headers : head라고 부름 / payload는 body라고 함.

요청(Requests)

Start line

1. 수행할 작업(GET, PUT, POST 등)이나 방식(HEAD or OPTIONS)을 설명하는 HTTP method를 나타냅니다.
ex)
GET method는 리소스를 받음.
POST method는 데이터를 서버로 전송.

  1. 요청 대상(일반적으로 URL이나 URI) 또는 프로토콜, 포트, 도메인의 절대 경로는 요청 컨텍스트에 작성됩니다. 이 요청 형식은 HTTP method 마다 다릅니다.
  • origin 형식 : ?와 쿼리 문자열이 붙는 절대 경로입니다. POST, GET, HEAD, OPTIONS 등의 method와 함께 사용합니다.
    POST / HTTP 1.1
    GET /background.png HTTP/1.0
    HEAD /test.html?query=alibaba HTTP/1.1
    OPTIONS /anypage.html HTTP/1.0

  • absolute 형식 : 완전한 URL 형식으로, 프록시에 연결하는 경우 대부분 GET method와 함께 사용합니다.
    GET http://developer.mozilla.org/en-US/docs/Web/HTTP/Messages HTTP/1.1

  • authority 형식 : 도메인 이름과 포트 번호로 이루어진 URL의 authority component 입니다. HTTP 터널을 구축하는 경우, CONNECT와 함께 사용할 수 있습니다.
    CONNECT developer.mozilla.org:80 HTTP/1.1

  • asterisk 형식 : OPTIONS 와 함께 별표(*) 하나로 서버 전체를 표현합니다.
    OPTIONS * HTTP/1.1

  1. HTTP 버전에 따라 HTTP message의 구조가 달라지기 때문에, start line에 HTTP 버전을 함께 입력합니다.

Headers

형태:
헤더이름(대 소문자 구분이 없는 문자열) , 콜론(:)

헤더의 종류

  • Genenral headers: 메세지 전체에 적용이 되는 헤더이다. (body와 관련이 없다.)

  • Request headers: fetch를 통해 가져올 리소스나 클라이언트의 자세한 정보를 담고 있는 헤더이다.
    ex) User-Agent, Accept-Type, Accept-Language과 같은 헤더는 요청을 보다 구체화 합니다.
    조건에 따라 제약을 추가 할수 있다.

  • Representation headers : 이전에는 Entity headers로 불렀으며, body에 담긴 리소스의 정보(컨텐츠 길이, MIME 타입 등)를 포함하는 헤더입니다.

Body

위치: HTTP messages 구조의 마지막에 위치합니다.

특징:

  • 모든 요청에 body가 필요하지는 않습니다.
  • GET, HEAD, DELETE, OPTIONS처럼 서버에 리소스를 요청하는 경우에는 본문이 필요하지 않습니다.
  • POST나 PUT과 같은 일부 요청은 데이터를 업데이트하기 위해 사용합니다.

body의 종류:

  • Single-resource bodies(단일-리소스 본문) : 헤더 두 개(Content-Type과 Content-Length)로 정의된 단일 파일로 구성됩니다.
  • Multiple-resource bodies(다중-리소스 본문) : 여러 파트로 구성된 본문에서는 각 파트마다 다른 정보를 지닙니다. 보통 HTML form과 관련이 있습니다.

응답(Responses)

Status line

내용:

  • 현재 프로토콜의 버전(HTTP/1.1)
  • 상태 코드 - 요청의 결과를 나타냅니다. (200, 302, 404 등)
  • 상태 텍스트 - 상태 코드에 대한 설명

Status line은 HTTP/1.1 404 Not Found. 처럼 생겼습니다.

Headers

요청 헤더와 동일한 구조를 가지고 있습니다.

형태:
헤더이름(대 소문자 구분이 없는 문자열) , 콜론(:)

값은 헤더에 따라 다릅니다. 요청의 헤더와 마찬가지로 몇 그룹으로 나눌 수 있습니다.

  • General headers : 메시지 전체에 적용되는 헤더로, body를 통해 전송되는 데이터와는 관련이 없는 헤더입니다.

  • Response headers : 위치 또는 서버 자체에 대한 정보(이름, 버전 등)와 같이 응답에 대한 부가적인 정보를 갖는 헤더로, Vary, Accept-Ranges와 같이 상태 줄에 넣기에는 공간이 부족했던 추가 정보를 제공합니다.

  • Representation headers : 이전에는 Entity headers로 불렀으며, body에 담긴 리소스의 정보(컨텐츠 길이, MIME 타입 등)를 포함하는 헤더입니다.

Body

위치:
HTTP messages 구조의 마지막에 위치합니다.

특징:

  • 모든 요청에 body가 필요하지는 않습니다.
  • 201, 204와 같은 상태 코드를 가지는 응답에는 본문이 필요하지 않습니다.

body의 종류:

  • Single-resource bodies(단일-리소스 본문) :

    • 길이가 알려진 단일-리소스 본문은 두 개의 헤더(Content-Type, Content-Length)로 정의합니다.
    • 길이를 모르는 단일 파일로 구성된 단일-리소스 본문은 Transfer-Encoding이 chunked 로 설정되어 있으며, 파일은 chunk로 나뉘어 인코딩되어 있습니다.
  • Multiple-resource bodies(다중-리소스 본문) :

    • 서로 다른 정보를 담고 있는 body입니다.

Stateless (상태를 가지지 않는 것)

  • 클라이언트와 서버가 통신을 주고 받는중에, HTTP가 클라이언트나 서버의 상태를 확인 하지 않습니다.

    HTTP는 통신 규약일 뿐이므로, 상태를 저장하지 않습니다.
    지금은 Stateless(무상태성)이 HTTP의 큰 특징이라고 기억하는 것으로 충분합니다.

참고할 사이트

MDN: HTTP 요청 메서드

MDN: HTTP 메시지

MDN: HTTP 상태 코드

참고: 코드스테이츠

profile
끝까지 ... 가면 된다.

0개의 댓글