HTTP 프로토콜이란?
정의
- HTTP는 "하이퍼텍스트 전송 프로토콜"(Hypertext Transfer Protocol)의 약자이다.
- 프로토콜은 통신 규약이라는 뜻으로 데이터를 주고받는 방식에 대한 규칙을 의미한다.
- 인터넷에서 데이터를 주고받기 위한 프로토콜 중 하나로, 서버-클라이언트 구조에서 사용되는 프로토콜이기 때문에 요청(Request)과 응답(Response)을 주고받는 메커니즘을 기본으로 한다.
특징
Stateless(무상태) 프로토콜
- 각 요청은 독립적으로 처리되며, 이전 요청과의 관계를 유지하지 않는다.
- HTTP는 상태 정보를 유지하지 않기 때문에 상태 정보 유지가 필요한 작업에서 쿠키(Cookie)나 세션(Session)을 이용한다.
비연결성(Connectionless)
- 브라우저가 서버에 요청하는 순간 잠깐 서버와 연결됐다가 서버로부터 응답이 전송된 후 곧바로 연결이 끊기는 것을 의미한다.
- 다수의 브라우저가 서버와 통신하기 때문에 지속적으로 연결상태를 유지한다면 다른 브라우저와 연결하는데 문제가 생길 수 있다.
평문 통신
- HTTP는 보안이 필요하지 않은 경우 기본적으로 암호화되지 않은 평문으로 통신한다.
- HTTPS를 사용하면 암호화 통신도 가능하다.
요청-응답 구조
- 클라이언트가 요청(Request)을 하면 서버가 해당 요청에 대한 응답(Response)을 반환하는 구조이다.
TCP/IP통신 위에서 동작
- TCP/IP 통신 위에서 동작하며 80번 포트를 사용한다.
HTTP Method
HTTP는 Method를 사용하여 서버에게 요청의 목적과 의도를 전달한다.
아래 정리된 표는 Method들의 역할을 정리한 것이다.
Method | 역할 |
---|
GET | 서버에게 데이터를 달라는 요청(열람)할 때 사용한다. |
HEAD | GET과 같지만 서버가 응답할 때 Body 없이 Header만 리턴한다. |
POST | 서버에게 데이터를 전송하는 요청할 때 사용한다. |
PUT | 서버에서 요청 URI의 데이터를 수정하거나 새로 추가하도록 요청할 때 사용한다. |
PATCH | 서버의 데이터를 일부 수정할 때 사용한다. |
DELETE | 서버에서 요청 URI의 데이터를 삭제하도록 요청할 때 사용한다. |
TRACE | (디버깅용) 클라이언트로부터 수신한 요청을 응답에 포함시켜서 전달한다. |
OPTIONS | 서버에서 특정 데이터가 어떤 Method를 지원하는지 알아볼 때 사용한다. |
PUT과 PATCH 둘 다 데이터를 수정할 때 사용하는 메서드이다.
PATCH는 일부 필드만 채워서 보내도 괜찮지만, PUT은 요청 시에 수정을 원하는 데이터에 대한 필드를 모두 채워서 보내야 한다.
HTTP 상태 코드
HTTP 상태 코드는 웹 서버와 클라이언트 간의 통신에서 발생하는 상황을 알려주는 코드이다.
3자리 숫자로 이루어져 있으며, 가장 일반적인 상태 코드는 다음과 같다.
1xx (정보)
- 100 (Continue): 클라이언트의 요청이 받아들여졌으며, 추가로 요청을 보내야 함을 나타낸다.
- 101 (Switching Protocols): 클라이언트의 요청에 따라 프로토콜이 변경되었음을 나타낸다.
2xx (성공) - 요청이 성공적으로 처리되었음
- 200 (OK): 요청이 성공적으로 처리되었음을 나타낸다.
- 201 (Created): 요청이 성공적으로 처리되어 새로운 리소스가 생성되었음을 나타낸다.
- 204 (No Content): 요청은 성공적으로 처리되었지만, 응답으로 내용이 없음을 나타낸다.
3xx (리다이렉션) - 요청한 리소스가 다른 위치에 있거나 재요청이 필요함
- 301 (Moved Permanently): 요청한 리소스가 새로운 URL로 영구적으로 이동되었음을 나타낸다.
- 302 (Found): 요청한 리소스가 일시적으로 다른 URL로 이동되었음을 나타낸다.
- 304 (Not Modified): 클라이언트의 캐시가 최신 상태이므로, 서버에서 리소스를 수정하지 않았음을 나타낸다.
4xx (클라이언트 오류) -클라이언트의 요청에 오류가 있음
- 400 (Bad Request): 서버가 요청을 이해할 수 없거나, 잘못된 요청을 받았음을 나타낸다.
- 403 (Forbidden): 요청한 리소스에 대한 접근이 거부되었음을 나타낸다.
- 404 (Not Found): 요청한 리소스를 찾을 수 없음을 나타낸다.
5xx (서버 오류) -서버가 요청을 처리하는 동안 오류가 발생했음
-
500 (Internal Server Error): 서버 내부에서 오류가 발생하여 요청을 처리할 수 없음을 나타낸다.
-
502 (Bad Gateway): 게이트웨이나 프록시 서버에서 잘못된 응답을 받았음을 나타낸다.
-
503 (Service Unavailable): 서버가 현재 사용 불가능한 상태임을 나타낸다.
참고 : https://tibetsandfox.tistory.com/18