본문 바로가기
Computer Science/Network

HyperText Transfer Protocol (HTTP)

by JuHy_ 2020. 7. 15.

HTTP란?

HTTP란 HyperText Transfer Protocol의 약자이며, 그대로 해석하면 하이퍼텍스트 전송 규칙이다.

여기서 하이퍼텍스트란 html과 같이 정보를 효과적으로 전달하기 위한 문서를 말한다.

즉, HTTP란 html과 같은 문서를 전송할 때 따라야 하는 규칙들을 정의해놓은 것이다.

 

HTTP는 TCP/IP 모델의 응용 계층(Layer 4)에 속한 프로토콜이며, 

주로 서버와 클라이언트 사이에서 html 문서를 교환할 때 사용된다.

문서를 전송할 때는 TCPUDP를 통해 전송하며, 80번 포트를 사용한다.

 

HTTP는 클라이언트에서 서버로 요청(request)을 보낼 때 따라야 할 형식,

서버에서 클라이언트로 응답(response)을 보낼 때 따라야 할 형식을 각각 정의하고 있다.

 

그렇다면 HTTP를 사용하여 응답과 요청을 보낼 때 어떤 형식을 따라야 하는지 알아보자.

 

 

Structure

HTTP 요청과 응답은 기본적으로 다음과 같은 공통적인 구조를 갖는다.

첫번째 줄에는 요청 방식(요청)과, HTTP 버전, 응답 코드(응답) 등의 기본적인 정보,

두번째 줄부터는 본문에 대한 설명을 담는 header, 그리고 1개의 empty line 뒤에 본문인 body 정보를 담는다.

 

그렇다면 이제 header와 body에는 어떤 정보들이 포함되는지 알아보자.

 

Request 

먼저 Request의 첫번째 줄에는 요청 방식인 HTTP 메소드HTTP 버전을 표기한다.

이 때, HTTP 메소드란 이 요청이 서버에 어떤 작업을 요구하는지를 나타낸다.

HTTP 메소드에는 GET, POST, PUT, DELETE, HEAD, OPTIONS 등이 있다.

대표적으로 GET은 데이터를 서버에서 가져올 때 사용하며, POST은 데이터를 넣을 때 사용한다.

 

두번째 줄부터는 본문에 대한 정보를 담은 header들이 있다.

 

Request Headers (요청과 관련된 정보)

- Host : 요청을 전송할 호스트명 및 포트 번호

- User-Agent : 클라이언트의 브라우저 정보

- Accept : 클라이언트가 원하는 데이터의 종류

- Accept-Language : 클라이언트가 원하는 데이터의 언어

- Accept-Encoding : 클라이언트가 원하는 인코딩 방식

 

General Headers (일반적인 정보)

- Connection : 클라이언트와 서버 간 연결 옵션

- Upgrade-Insecure-Requests : HTTPS 연결 여부, 즉 연결 시 보안 적용 여부

 

Entity Headers (본문 데이터 정보)

- Content-Type : 본문에 포함된 데이터의 정보

- Content-Length : 본문의 길이

 

header 뒤에는 본문이 담긴 body가 있다.

이 때 사이에 empty line을 하나 두어 이를 통해 header와 body를 구분한다.

 

request의 body 부분에는 데이터가 있을 수도, 없을 수도 있다.

서버에서 단순히 데이터를 가져올 때에는 본문이 굳이 필요하지 않으며,

서버에 데이터를 넣을 때, 넣을 데이터가 body에 포함된다.

 

Response

Response의 첫번째 줄에는 HTTP 버전Response Code가 있다.

response code는 200은 요청 성공, 404는 리소스를 찾을 수 없음 등 요청 결과를 나타낸다.

 

두번째 줄부터는 요청과 마찬가지로 header들이 있다.

 

Response Headers (응답에 관한 정보)

- Access-Control-Allow-Origin : 클라이언트가 응답을 받은 곳을 확인하기 위한 주소 정보

  (요청을 보낸 주소와 응답을 받은 주소가 다를 경우 CORS 에러 발생)

- Etag : 서버에서 캐싱을 위한 태그 (데이터가 바뀔 경우 태그 변경)

- Server : 서버 소프트웨어 정보

- Set-Cookie : 서버에서 클라이언트로 전송할 쿠키 정보

- Vary : 서버에서 캐싱 기준이 되는 request header 정보

- X-Frame-Options : 브라우저가 페이지 렌더링을 허용해야 할지 여부

 

General Headers (일반적인 정보)

- Connection : 클라이언트와 서버 간 연결 옵션

- Date : 응답을 전송한 날짜와 시간

- Keep-Alive : 연결이 유지될 기간

- Transfer-Encoding : entity 정보를 안전하게 전송하기 위해 서버에서 지정한 인코딩 방식

 

Entity Headers (본문 데이터 정보)

- Content-Encoding : 본문의 인코딩 방식

- Content-Type : 본문의 데이터 종류

- Last-Modified : 본문을 마지막으로 갱신한 날짜와 시간

 

그리고 마찬가지로 구분을 위한 empty line 뒤에 리소스가 포함된 body가 있다.

 

response body에는 요청이 성공했을 경우, 클라이언트가 요청한 리소스들이 포함되고,

요청이 실패했을 경우, body에는 아무 정보도 들어있지 않을 수 있다.

 

 

 

Reference

https://developer.mozilla.org/ko/docs/Web/HTTP

'Computer Science > Network' 카테고리의 다른 글

Electronic Mail (SMTP, POP3, IMAP / MIME)  (0) 2020.07.17
File Transfer Protocol (FTP)  (0) 2020.07.15
OSI Model & TCP/IP Model  (0) 2020.06.30