목차
- HTTP 통신이란?
- HTTP 특징
- 요청과 응답
- HTTP 메서드
- HTTP 상태코드
1. HTTP 통신이란?
Hyper Text Transfer Protocol의 약자로 HTML파일을 전송하는 프로토콜
웹브라우저에서 통신이 일어나며, 초기에는 HTML파일을 전송하려는 목적으로 만들어졌으나 현재는 JSON, Image파일 등 또한 전송한다.
일반적으로 전송 계층 프로토콜로 TCP를 사용하고, 네트워크 계층 프로토콜로 IP를 사용한다. 이 두계층을 합쳐서 TCP/IP 라는 이름으로 부른다. TCP/IP에서는 IP 주소를 사용해서 통신할 컴퓨터를 결정하고, 포트 번호를 사용해서 해당 컴퓨터의 어떤 프로그램과 통신할 것인지 결정한다.
(HTTP에서는 기본적으로 80 포트를 사용한다.)
프로토콜이란?
통신 프로토콜 또는 통신 규약은 컴퓨터나 원거리 통신 장비 사이에서 메시지를 주고 받는 양식과 규칙의 체계
이다. 즉 통신 규약 및 약속을 말한다.
프로토콜의 종류에는 HTTP/HTTPS, FTP, TCP/IP, UDP, SMTP, DNS, SSH 등이 있다.
(프로토콜에 관해서는 따로 정리를 해서 포스팅해볼 예정)
2. HTTP 특징
HTTP에서는 클라이언트가 서버에 요청 메세지를 보내고 서버는 클라이언트의 요청에 대한 응답을 반환합니다. 연결 상태를 유지하지 않는 비연결성 프로토콜이며, 요청과 응답(request, response) 방식으로 동작합니다.
비연결성 프로토콜의 단점을 해결하기 위해 Cookie와 Session이 등장하였습니다.
연결 상태를 유지하지 않는다는 말은 서버는 응답 메시지를 반환한 후에 클라이언트의 상태를 저장하지 않는다는 것입니다. 때문에 HTTP 프로토콜은 상태가 없는 프로토콜, 무상태성(stateless)라고도 불립니다.
여기서 상태가 없다라는 말은 데이터를 주고받기 위한 각각의 데이터 요청이 서로 독립적으로 관리가 된다는 말이고, 이전 데이터 요청과 다음 데이터 요청이 서로 관련이 없다는 뜻입니다.
3. 요청과 응답 ( Request, Response)
1. 클라이언트와 서버
클라이언트 : 요청을 보내는 쪽을 의미하며 일반적으로 웹관점에서 브라우저를 의미
서버 : 요청을 받는 쪽을 의미하며 일반적으로 데이터를 보내주는 원격지의 컴퓨터를 의미
2. HTTP 메세지
HTTP에서는 핵심적인 역할을 한다. 구조는 단순하며 확장성도 좋다.
Http Request의 구조는 Request Line, Header Lines, Body로 이루어져 있습니다.
- Request Line
request가 시작되는 줄 (request line)에는 다음과 같은 정보를 담습니다.
1. HTTP 메서드 (GET, POST 등)를 사용해 서버가 수행해야 할 동작을 나타냅니다.
2. 요청 타겟 (URL, 또는 포르토콜, 포트, 도메인)을 나타내며, 이들은 요청 컨텍스트에 의해 특정 지어집니다.
3. HTTP 버전이 들어갑니다. 응답 메시지에 사용할 HTTP 버전을 알려주는 역할을 합니다. - Header
- 요청에 들어가는 HTTP 헤더는 HTTP 헤더 기본 구조를 따릅니다.
- 대소문자 구분 없는 문자열 다음 콜론 (' : ')이 붙으며, 그 뒤에 오는 값은 헤더에 따라 달라집니다.
- 헤더를 세분화하면 General Header, Request Header, Entity Header으로 나눌 수 있습니다.
(해당 부분은 아래에서 다시 설명하겠습니다.) - Body
- request의 마지막 부분에 들어갑니다. 모든 요청에 들어가지는 않고 Get, HEAD, DELETE, OPTIONS처럼 리소스를 가지고 오는 요청은 대부분 본문을 필요로 하지 않습니다.
- 바디는 단일-리소스 본문(single-resource bodies), 다중-리소스 본문(multiple-resource bodies)으로 나눠집니다.
Http Response의 구조는 Status Line, Header Lines, Body로 이루어져 있습니다.
- Status Line
response가 시작되는 줄 (status line)은 다음과 같은 정보를 가지고 있습니다.
1. 프로토콜 버전, 보통 HTTP/1.1 입니다.
2. 상태 코드, 요청의 성공 여부를 나타냅니다. (200, 404, 302 등의 코드)
3. 상태 텍스트, 짧고 간결하게 상태 코드에 대한 설명을 글로 나타냅니다. (Not Found) - Header
- 응답에 들어가는 HTTP 헤더는 요청과 마찬가지로 HTTP 헤더의 기본 구조를 따릅니다.
- 대소문자 구분 없는 문자열 다음 콜론 (' : ')이 붙으며, 그 뒤에 오는 값은 헤더에 따라 달라집니다.
- 헤더를 세분화하면 General Header, Request Header, Entity Header으로 나눌 수 있습니다. - Body
- response의 마지막 부분에 들어갑니다. 모든 응답에 들어가지는 않고 201, 204 같은 상태 코드를 가진 응답에는 보통 본문이 없습니다.
- response body는 이미 길이가 알려진 단일 파일로 구성된 헤더 두 개(Content-Type, Content-Length)를 가진 단일-리소스 본문, 길이를 모르는 단일 파일로 구성된 단일-리소스 본문, 서로 다른 정보를 담고 있는 멀티파트로 이루어진 다중-리소스 본문 이렇게 크게 3가지로 나눌 수 있습니다.
통신방식은 다음과 같다
1. 클라이언트가 서버에 요청을 보내는 경우에만 연결
2. 요청메세지를 통해 서버에 응답을 요청
3. 서버가 클라이언트로 응답메세지를 응답
4. 실시간 연결이 아니므로 연결직후 서버와 클라이언트의 연결 종료
통신에 결과에 따라 다음과 같은 상태코드를 반환한다.
- 1xx (정보) : 요청을 받았으며 프로세스를 계속 진행합니다.
- 2xx (성공) : 요청을 성공적으로 받았으며 인식했고 수용하였습니다.
- 3xx (리다이렉션) : 요청 완료를 위해 추가 작업 조치가 필요합니다.
- 4xx (클라이언트 오류) : 요청의 문법이 잘못되었거나 요청을 처리할 수 없습니다.
- 5xx (서버 오류) : 서버가 명백히 유효한 요청에 대해 충족을 실패했습니다.
4. HTTP 메서드
- GET : 존재하는 자원에 대한 요청
- POST : 새로운 자원을 생성
- PUT : 존재하는 자원에 대한 변경 (자원 전체를 갱신)
- PATCH : 존재하는 자원에 대한 변경 (자원 일부를 교체)
- DELETE : 존재하는 자원에 대한 삭제
- OPTIONS : 웹 서버에 지원되는 메서드의 종류를 확인할 경우 사용
다음엔 소켓통신과 HTTP 통신의 비교에 대해서 포스팅 해볼예정이다.
'개발지식' 카테고리의 다른 글
[개발지식] 스레드(Thread), 싱글 스레드(Single Thread), 멀티 스레드(Multi Thread) (0) | 2024.05.08 |
---|---|
[JSON] JSON은 도대체 뭐지? (0) | 2024.01.17 |
[Gradle] Gradle이란? (0) | 2024.01.12 |
[API] REST, REST API, RESTful 정리 (1) | 2024.01.11 |
[API] API ( Application Programming Interface ) 란? (1) | 2024.01.10 |