본문 바로가기
Java Script

JS - HTTP

by 호지96 2021. 5. 25.

1. HTTP Message

 

HTTP Messages 는 클라이언트와 서버 사이에서 데이터가 교환되는 방식이다.

  1. HTTPHyperText Transfer Protocol 의 줄임말로, HTML 과 같은 문서를 전송하기 위한 Application Layer 프로토콜이다.
  2. HTTP 는 웹 브라우저와 웹 서버의 소통을 위해 디자인되었다.
  3. 전통적인 클라이언트-서버 모델에서 클라이언트가 HTTP Messages 양식에 맞춰 요청을 보내면, 서버도 HTTP Messages 양식에 맞춰 응답한다.
  4. HTTP 는 특정 상태를 유지하지 않는 특성이 있다.( Stateless : 무상태성 )

 

## Stateless ##

  1. Stateless 는 말 그대로 상태를 가지지 않는다는 뜻이다.
  2. HTTP 로 클라이언트와 서버가 통신을 주고 받는 과정에서, HTTP 가 클라이언트나 서버의 상태를 확인하지 않는다.

-----------------------------------------------------------------------------------

2. Request & Responses 의 구조

 

  1. Start Line( Status Line ) : start line 에는 요청( Request )이나 응답( Responses )의 상태를 나타낸다. 항상 첫 번째 줄에 위치한다. 응답에서는 Status Line 이라고 부른다.
  2. HTTP Headers : 요청을 지정하거나, 메세지에 포함된 본문을 설명하는 헤더의 집합이다.
  3. Empty Line : 헤더와 본문을 구분하는 빈 줄이 있다.
  4. Body : 요청과 관련된 데이터나 응답과 관련된 데이터 또는 문서를 포함한다. 요청과 응답의 유형에 따라 선택적으로 사용한다. ( payload 라고 부르기도 한다. )

-----------------------------------------------------------------------------------

3. Request( 요청 )

 

## Start Line ##

HTTP 요청은 클라이언트가 서버에 보내는 메세지이다. Start Line 에는 3 가지 요소가 있다.

  1. 수행할 작업( GET, PUT, POST 등 )이나 방식( HEAD or OPTIONS )를 설명하는 HTTP Method 를 나타낸다. 예를 들어 GET Method 는 리소스를 받아야하고, POST Method 는 데이터를 서버로 전송한다.
  2. 요청 대상( 일반적으로 URL 이나 URI ) 또는 프로토콜, 포트, 도메인의 절대 경로는 요청 컨텍스트에 작성된다. 이 요청 형식은 HTTP Method 마다 다르다.
  3. HTTP 버전은 메세지의 다른 구조를 결정한다. 이를 위해 HTTP 버전을 함께 입력한다.

## 요청 형식 ##

1) origin 형식 : ?쿼리 문자열이 붙는 절대 경로이다. POST, GET, HEAD, OPTIONS 등의 method 와 함께 사용한다.

2) absolute 형식 : 완전한 URL 형식으로, 프록시에 연결하는 경우 대부분 GET method 와 함께 사용된다. 

3) authority 형식 : 도메인 이름과 포트 번호로 이루어진 URLauthority component 이다. HTTP 터널을 구축하는 경우, CONNET 와 함께 사용할 수 있다.

4) asterisk 형식 : OPTIONS 와 함께 별표( * ) 하나로 서버 전체를 표현한다.

 

## Headers ##

요청의 Headers 는 기본 구조를 따른다. 대소문자 구분 없는 문자열과 콜론( : ), 값을 입력한다. 값은 헤더에 따라 다르다. 여러 종류의 헤더가 있고, 다음과 같이 그룹을 나눌 수 있다. 

  1. General Headers : 메시지 전체에 적용된다.
  2. Request Headers : User-Agent, Accept-Type, Accept-Language 와 같은 헤더는 요청을 보다 구체화한다. Referer 처럼 컨텍스트를 제공하거나 If-None 과 같이 조건에 따라 제약을 추가할 수 있다.
  3. Entity Headers : Content-Length 와 같은 헤더는 body 에 적용된다. body 가 비어있는 경우, Entity Headers 는 전송되지 않는다.

 

## Body ##

요청의 본문은 HTTP messages 구조의 마지막에 위치한다. 모든 요청에 body 가 필요하지는 않다. GET, HEAD, DELETE, OPTIONS 처럼 서버에 리소스를 요청하는 경우에는 body 가 필요하지 않다. POST 나 PUT 과 같은 일부 요청은 데이터를 업데이트하기 위해 사용된다. body 는 다음과 같이 두 종류로 나눌 수 있다.

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

-----------------------------------------------------------------------------------

4. Responses ( 응답 )

 

## Status Line ##

응답의 첫 줄은 Status Line 이라고 부르며, 다음의 정보를 포함한다.

  1. 현재 프로토콜의 버전( HTTP/1.1 )
  2. 상태 코드 : 요청의 결과를 나타낸다.
  3. 상태 텍스트 : 상태 코드에 대한 설명

 

## Headers ##

응답에 들어가는 HTTP headers 는 요청 헤더와 동일한 구조를 가지고 있다.

  1. Responses Headers : Vary, Accept-Ranges 와 같이 상태 줄에 넣기에는 공간이 부족했던 추가 정보를 제공한다.

 

## Body ##

응답의 본문은 HTTP messages 구조의 마지막에 위치한다. 모든 응답에 body 가 필요하지는 않다. 201, 204 와 같은 상태 코드를 가지는 응답에는 본문이 필요하지 않다.

  1. Single-Resource Bodies( 단일-리소스 본문 ) : 길이가 알려진 단일-리소스 본문은 두 개의 헤더( Content-Type, Content-Length )로 정의한다, 길이를 모르는 단일 파일로 구성된 단일-리소스 본문은 Transfer-Encodingchunked 로 설정되어 있으며, 파일은 chunk 로 나뉘어 인코딩되어 있다.
  2. Multiple-Resource Bodies( 다중-리소스 본문 ) : 서로 다른 정보를 담고 있는 body 이다.

'Java Script' 카테고리의 다른 글

JS - SSR & CSR  (0) 2021.05.25
JS - 클라이언트 서버  (0) 2021.05.25
JS - Tree&Graph Search  (0) 2021.05.14
JS - Graph & Tree & BST  (0) 2021.05.13
JS - Stack&Queue  (0) 2021.05.13