HTTP(HyperText Transfer Protocol)는 인터넷에서 데이터를 주고 받을 수 있는 프로토콜입니다.
이번 주제를 알아보기 전에, 프로토콜에 대해서 먼저 설명하도록 하겠습니다.
프로토콜
공통 데이터 교환 방법(의사소통) 및 순서에 대해 정의한 형식, 약속, 규역, 규칙 체계 혹은 프로그램을 일컫는다.
통신 프로토콜은 컴퓨터나 원거리 통신 장비 사이에서 메시지를 주고 받는 양식과규칙의 체계를 말합니다.
즉, 통신 규약 및 약속입니다.
컴퓨터 네트워크 규모가 증가되고, 네트워크를 이용한 정보 전송 수요가 다양화되면서 소프트웨어와 하드웨어 장비가 계속 증가되는 최근의 환경에서 효율적인 정보 전달을 하기 위해서 프로토콜의 기능이 분화되고, 복잡해질 수 밖에 없어졌습니다.
이러한 환경적인 요구를 만족하기 위해 프로토콜 계층화의 개념이 나타나게 되었습니다.
HTTP는 응용계층에서 속함으로, 응용계층에 대해서도 간략하게 설명을 하겠습니다.
응용계층의 역할은?
애플리케이션은 서비스를 요청하는 측(사용자) ->
사용하는 애플리케이션과 서비스를 제공하는 측의 애플리케이션으로 분류가 됩니다.
일반적으로 서비스를 요청하는 측을 클라이언트, 서비스를 제공하는 측을 서버라고 합니다.
웹 브라우저나, 메일 프로그램은 사용자 측에서 사용하는 애플리케이션이니 클라이언트에 속한다.
반면, 서비스를 제공하는 측인 서버에는 웹 서버 프로그램과 메일 서버 프로그램이 있다.
이런, 애플리케이션은 응용 계층에서 동작하게 됩니다.
응용계층 (application Layer)
OSI 모델의 최상위 계층으로,
다양하게 존재하는 응용환 경에서 공통적으로 필요한 기능을 다룬다.
시스템 간의 응용처리는 상호 간에 통신하면서 일련의 업무를 처리할 수 있도록 필요한 서비스 기능을 제공한다.
ex) 이메일, 파일전송, 웹사이트 조회 등등...
또한, 최종사용자와 직접 상호 작용하는 유일한 계층입니다.
여러 역할을 하는 응용계층에서 웹사이트를 볼 때 사용하는 건 HTTP 입니다.
HTTP는 HyperText Transfer Protocol 라는 약어로 HTML 문서와 같은 텍스트 리소스들을 가져올 수 있도록 해주는 프로토콜 입니다. 웹에서 이루어지는 모든 데이터 교환의 기초이며, 클라이언트-서버 프로토콜이기도 합니다.
하나의 완전한 문서는 텍스트, 레이아웃 설명, 이미지, 비디오, 스크립트 등 불러온 (fetched) 하위 문서들로 재구성됩니다.
1990년대 초에 설계된 HTTP는 거듭하여,
진화해 온 확장 가능한 프로토콜입니다.
HTTP는 신뢰 가능한 전송 프로토콜이라면, 이론상으로는 무엇이든 사용할 수 있으니, TCP 혹은 암호화된 TCP 연결인 TLS를 통해 전송 됩니다.
HTTP의 확장성 덕분에, 오늘 날 하이퍼텍스트 문서 뿐만 아니라, 이미지와 비디오 혹은 HTML 폼 결과와 같은 내용을 서버로 포스트(POST)하기 위해서도 사용됩니다.
HTTP는 또한 필요할 때마다, 웹 페이지를 갱신하기 위해 문서의 일부를 가져오는데 사용될 수 있습니다.
HTTP 동작
클라이언트 즉, 사용자가 브라우저를 통해서 어떠한 서비스를 url을 통하거나, 다른 것을 통해서 요청(request)을 하면, 서버에서는 해당 요청사항에 맞는 결과를 찾아서 사용자에게 응답(response)하는 형태로 동작하게 됩니다.
위에서 설명을 드렸던 HTML문서만이 HTTP 통신을 위한 유일한 정보문서는 아닙니다.
Plain Text로 부터 JSON 데이터 및 XML과 같은 평태의 정보도 주고 받을 수 있습니다.
보통은 클라이언트가 어떤 정보를 HTML 형태로 받고 싶은지, JSON 형태로 받고 싶은지 명시해주는 경우가 많습니다.
HTTP 특징
- HTTP Messages는 HTTP Sever 와 HTTP client에 의해 해석이 됩니다.
- TCP / IP 를 이용하는 응용 프로토콜 입니다.
- HTTP는 연결 상태를 유지하지 않는 비 연결성 프로토콜이다.
- HTTP는 연결을 유지하지 않는 프로토콜이기 때문에 요청(request) / 응답(response) 로 동작한다.
HTTP Message Form
클라이언트와 서버 간의 데이터가 교환되는 방식을 말합니다.
HTTP Message 는 ASCII로 인코딩된 텍스트 정보이며, 여러줄로 되어있습니다.
Request(요청)
클라이언트가 서버에게 연락하는 것을 요청이라고 하며, 요청을 보낼 때는 요청에 대한 정보를 담아 서버로 보낸다.
요청 메시지 형식 구성
- 시작 줄 (start line)
- HTTP Method (action 정의)
- request target : 요청을 전송되는 uri(end point)
- HTTP version
- 헤더 (headers)
- Host : 요청이 전송되는 target의 host url (ex. ruflu.com)
- User-Agent : 요청을 보내는 클라이언트의 대한 정보 (ex. 웹 브라우저와 버전, os 등)
- Accept : 해당 요청이 받을 수 있는 응답 타입 (ex. 조건 부 요청을 허용 : accept-, lf-, 모든 요청 허용 : / )
- Connection : 해당 요청이 끝난 후, 클라이언트와 서버가 계속해서 네트워크 커넥션을 유지할 것인지? 아니면 끊을 것인지를 지시하는 부분 (ex. Keep-alive 또는 cancel)
- Content-Type : 해당 요청이 보내는 메세지 body의 타입 (ex. JSON으로 보낸다면, application/json)
- Content-Length : 메세지 body의 길이
- 빈 줄 (empty line)
- 요청에 대한 meta 정보가 전송되었음을 알립니다.
- 본문 (body)
- 해당 request의 실제 메세지 / 내용이 들어있습니다.
- XML 이나, JSON 데이터가 들어 갈 수 있습니다.
- Get Method 는 body가 대부분 없습니다.
Method 종류 (요청 종류)
- GET : 자료 요청할 때 사용
- POST : 자료 생성을 할 때, 사용
- PUT : 자료 수정을 요청할 때 사용
- DELETE : 자료 삭제를 요청할 때 사용
Response (응답)
서버에서 클라이언트의 요청사항을 확인 한 뒤에, 요청한 정보를 전달 해줍니다.
응답 메시지 형식 구성
- 상태 줄 (status line) : response의 상태를 간략하게 나타내며, 3부분으로 구성되어 있다.
- HTTP 버젼
- status code : 응답 상태를 나타내는 코드
- status text : 응답 상태의 설명 (ex: Not Found)
- HTTP 버젼
- 헤더 (headers)
- request의 header와 동일합니다.
- response 에서만, 사용되는 header 값이 있다. (User-Agent 가 없고, Server가 있습니다)
- request의 header와 동일합니다.
- 빈 줄 (empty line)
- 본문 (body)
- 실제 응답하는 데이터를 나타낸다. status 2XX의 경우, 존재하지 않는 경우가 많다.
HTTP 상태 코드 (status code)
- 1XX : Informational : Request recieved / processing
- 2XX : Success : Successfully Recieved, understood and accepted
- 3XX : Redirect : Further action must be taken / redirect
- 4XX : Client Error : Request does not have what it needs
- 5XX : Server Error : Server failed to fulfil an apparent valid request
'CS > Network' 카테고리의 다른 글
http VS https 에 대하여 (0) | 2022.04.30 |
---|---|
HTTP1 vs HTTP2 (두 프로토콜의 차이) (0) | 2022.04.18 |