HTTP (HyperText Transfer Protocol) 란?
HTTP는 클라이언트와 서버 사이에 이루어지는 요청/응답(request/response) 프로토콜이다.
W3 상에서 정보를 주고받을 수 있는 프로토콜이다. 주로 HTML 문서를 주고받는 데에 쓰인다. 주로 TCP를 사용하고 HTTP/3 부터는 UDP를 사용하며, 80번 포트를 사용한다
예를 들면, 클라이언트인 웹 브라우저가 HTTP를 통하여 서버로부터 웹페이지(HTML)나 그림 정보를 요청하면, 서버는 이 요청에 응답하여 필요한 정보를 해당 사용자에게 전달하게 된다. 이 정보가 모니터와 같은 출력 장치를 통해 사용자에게 나타나는 것이다.
추가로, HTTP는 여러가지 버전이 있다. HTTP의 버전은 이후 알아보기로 한다.
클라이언트 요청 (Request)
클라이언트와 서버 사이의 소통은 평문(ASCII) 메시지로 이루어진다. 클라이언트는 서버로 요청메시지를 전달하며 서버는 응답메시지를 보낸다.
요청의 구조는 세가지로 구분 된다.
요청 주소 (Request line)
GET /images/logo.png HTTP/1.1
서버로부터 /images/logo.png 자료를 요청.
요청 헤더 (Request header fields)
Accept: application/json
Authorization: Bearer UExBMDFUMDRQV1MwMnzpdvtYYNWMSJ7CL8h0zM6q6a9ntw
클라이언트가 서버에게 헤더 정보를 전달.
메시지 바디(선택적) (Mesaage body(optional))
{ "content" : "request content" }
요청의 내용을 담음.
요청 메소드 (Request method)
GET, HEAD, POST, PUT, DELETE, CONNECT, OPTIONS, TRACE, PATCH 가 있다.
요청 메소드별 역할 : https://sanggi-jayg.tistory.com/66
서버 응답 (Response)
응답메시지는 다음으로 3가지로 구성된다.
상태표시 행 (Status line)
HTTP/1.1 200 OK
Status code 와 Reson message 를 포함. 요청의 처리 상태를 말한다.
헤더 (Headers)
Date: Mon, 23 May 2005 22:38:34 GMT
Content-Type: text/html; charset=UTF-8
Content-Length: 155
Last-Modified: Wed, 08 Jan 2003 23:11:55 GMT
Server: Apache/1.3.3.7 (Unix) (Red-Hat/Linux)
ETag: "3f80f-1b6-3e1cb03b"
Accept-Ranges: bytes
Connection: close
응답의 메타 데이터를 담고 있으며, 응답에서만 사용하는 헤더도 있다.
내용 (Body)
<html>
<head>
<title>An Example Page</title>
</head>
<body>
<p>Hello World, this is a very simple HTML document.</p>
</body>
</html>
응답에 대한 메시지로 경우에 따라 없을 수도 있다.
HTTP/1.1 200 OK
Date: Mon, 23 May 2005 22:38:34 GMT
Content-Type: text/html; charset=UTF-8
Content-Length: 155
Last-Modified: Wed, 08 Jan 2003 23:11:55 GMT
Server: Apache/1.3.3.7 (Unix) (Red-Hat/Linux)
ETag: "3f80f-1b6-3e1cb03b"
Accept-Ranges: bytes
Connection: close
<html>
<head>
<title>An Example Page</title>
</head>
<body>
<p>Hello World, this is a very simple HTML document.</p>
</body>
</html>
응답 코드 (Status code)
200, 201, 400, ... 등 상황에 맞는 응답 코드를 서버에서 클라이언트로 보내준다.
'IT > Web' 카테고리의 다른 글
DNS(Domain Name System) 작동원리 (0) | 2021.01.15 |
---|---|
브라우저 동작 원리 (0) | 2021.01.15 |
HTTP Response Status Code (HTTP 응답 상태 코드) (0) | 2021.01.14 |
HTTP Request Method (HTTP 요청 방법) (0) | 2021.01.13 |
2020년 백엔드(Back-end) 개발자 로드맵 (0) | 2021.01.13 |