이번 글에서는 HTTP에 대해서 알아보려고 한다.
HTTP (HyperText Transfer Protocol)
HTTP는 말그대로 HyperText를 전송하기 위한 프로토콜이다.
(HyperText란 기존의 그냥 문서에 쓰이는 텍스트가 아니라 비선형적인 신개념 텍스트라는 의미에서 만들어진 용어이다.
예를 들어서 하이퍼텍스트에는 하이퍼링크를 통해 다른 문서로 이동할 수도 있는 기능들이 존재한다. )
주로 HTML 문서를 주고 받는데 쓰인다. (여기서의 HT도 하이퍼텍스트이다.)
지금은 텍스트뿐만이 아니라 이미지, 음성, 영상, 파일 등등 거의 모든 형태의 데이터를 전송이 가능하다.
바야흐로 HTTP의 시대라고 할 수 있을만큼 요즘에는 HTTP를 어디에서나 많이 사용하고 있다.
이 HTTP에도 여러가지 버전이 존재하는데,
현재로써 가장많이 사용되는 버전은 1.1 이다. (현재는 3버전을 향해 가고있다.)
기존 버전에 확장 또는 개선이 이루어진 것들이기 때문에 1.1을 가장 잘 알아두면 좋을것이다.
통신 방식으로는 전에 설명했었던 TCP를 주로 사용중이다.
(3버전에서는 UDP를 통해서 성능개선이 이루어질 전망이라고 한다.)
*** 여기서 알아두고 가면 좋을 내용
분명 HTTP와 TCP는 둘다 프로토콜일텐데, 왜 HTTP는 TCP를 사용한다고 설명을 하는 걸까?
- 그 이유는 HTTP는 TCP 보다 상위 계층에서 작동하기 때문이다.
아직 다뤄본 내용은 아니지만 컴퓨터에 대해서 공부하다 보면 OSI 7계층에 대해서는 한번 쯤 들어봤을 것이다.
이 계층에서 TCP는 4계층 HTTP는 그 위에서 작동하기 때문에 이렇게 설명할 수 있는 것이다.
이러한 HTTP의 특징으로는
1. 클라이언트 서버 구조로 동작한다.
- HTTP에서 클라이언트에서 서버에 요청을 보내고, 응답을 대기 함으로써 서버가 요청에 대한 결과를 만들어서 응답한다.
(클라이언트는 단순히 사용만 하면되고, 서버는 요청을 처리하기만 하면된다. = 독립적으로 발전가능)
2. 무상태 프로토콜(비연결성)이다.
- 먼저 연결성과 비연결성에 대해서 정리를 해보자
연결상태(stateful) - 고객이 필요한 정보만 넘겨주므로 중간에 연결이 끊기면 처음부터 다시 시작해야한다.
비연결상태(stateless) - 고객이 모든 정보를 다 넘겨주므로 중간에 연결이 끊겨도 괜찮다.
비연결성이라면 필요한 정보만 주고받고 연결을 끊는 것이 가능하기 때문에 자원을 매우 효율적으로 사용할 수 있다.
계속 연결 끊고 연결하고 하는걸 반복하면 매우 비효율적이기 때문에 지금은 HTTP 지속연결을 사용하고 있다.
*** 서버 개발자는 스테이스리스한 방식으로 설계할 수 있게 잘 개발해야만 한다.
3. HTTP 메시지로만 통신을 한다.
- HTTP 메시지의 구조
[start-line 시작 라인] (HTTP 버전, HTTP 상태 코드[200, 400, 500등 ex_404오류]와 이유 문구
[header 헤더] (Http 전송에 필요한 모든 부가정보 ex_메시지 바디의 정보, 크기, 압축, 인증, 요청 클라이언트 정보, 서버 정보, 캐시 정보 등)
[empty line 공백 라인(CRLF)]
[message body] (전송할 내용)
HTTP/1.1 200 OK - (시작 라인)
Content-Type:text/html;charset=UTF-8
Content-Length: 3423 - (헤더 부분)
- (공백 라인)
<html>
<body></body> - (메시지 내용)
</html>
4. 단순하며 확장이 가능하다.
라는 특징이 있다.
이렇게 HTTP에 대해서 간단하면서도 자세히 알아보았다.
나는 그냥 URL에 들어가는 내용으로만 알고 있었기에 이렇게 정리해보면서 재밌었던 것 같다.
참고 -
'오늘의 공부 > WEB' 카테고리의 다른 글
HTTP 메서드의 활용 (0) | 2022.03.20 |
---|---|
HTTP 메서드 (0) | 2022.03.20 |
URI(URL, URN) (0) | 2022.03.20 |
DNS에 대해서 (0) | 2022.03.20 |
CDN에 대해서 (0) | 2022.03.20 |