HTTP란?
HTTP(HyperText Transfer Protocol)는 인터넷에서 클라이언트와 서버 간에 데이터를 주고 받기 위해 사용하는 프로토콜 입니다.
HTTP는 요청-응답 프로토콜
이라고도 합니다.
예를 들자면 구글 웹 사이트에 접속하는 경우를 생각해봅시다.
사용자가 웹 브라우저의 주소 표시줄에 'www.google.com'을 입력하면 웹 브라우저(클라이언트)는 구글 서버에 '구글 웹사이트를 사용자에게 보여주기 위한 데이터를 전송해줘' 라는 HTTP 요청을 합니다.
요청을 받은 구글 서버는 웹 사이트를 띄우는데 필요한 데이터, 즉 HTML, CSS, 이미지 파일 등을 HTTP 응답으로 보냅니다.
데이터를 전달받은 웹 브라우저는 각 요소를 적절히 조합해 구글 웹사이트를 사용자의 화면에 출력합니다.
HTTP 요청(Request) 과 HTTP 응답(Response)은 메시지 형태로 주고 받는데, 이를 HTTP 메시지(HTTP message)라고 합니다.
HTTP 메시지는
클라이언트 → 서버로 요청을 보낼 때는 요청 메시지(request message)
서버 → 클라이언트로 요청을 보낼 때는 응답 메시지(response message)로 나뉩니다.
두 메시지 모두 시작행(start line)
, 헤더(header)
, 빈 행(empty line)
, 본문(body)
로 구성됩니다.
- 시작 행 : 요청 혹은 응답과 관련된 정보
- 헤더 : 요청 혹은 응답과 관련된 부가 정보
- 빈 행 : 헤더의 끝을 표시하기 위해 빈 행을 넣어 구분
- 본문 : 통신을 통해 실제로 주고 받는 데이터. 요청 메시지의 본문에는 요청 시 전달할 데이터가, 응답 메시지의 본문에는 응답으로 보내는 데이터가 담김. 전달할 데이터나 응답할 데이터가 없으면 생략 가능
HTTP 메시지의 구성 요소 중에서 특히 시작 행이 매우 중요합니다.
무엇을 요청했고, 요청에 대한 응답이 성공적으로 이뤄졌는지 여부 등의 정보가 들어있기 때문입니다.
요청 메시지의 시작행
요청 메시지의 시작행은 Request Line이라고 하며, 다음 세가지 요소로 구성됩니다.
- HTTP 메서드 : 클라이언트가 서버로 보내는 요청의 종류를 나타냅니다.
- 요청 URL : 클라이언트가 액세스하려는 리소스의 경로를 나타냅니다.
- HTTP 버전 : 요청에서 사용되는 HTTP 프로토콜의 버전을 나타냅니다.
형식
<HTTP Method> <Request-URI> <HTTP Version>
예시
GET /index.html HTTP/1.1
→ 클라이언트는 HTTP/1.1
버전을 사용하여 서버에 /index.html
리소스를 GET
메서드로 요청하고 있습니다.
아래는 주요 HTTP 메서드를 표로 정리한 것입니다!
HTTP 메서드 | 설명 |
---|---|
GET | 서버에서 지정된 리소스를 요청합니다. 데이터를 가져올 때 사용합니다. |
POST | 서버로 데이터를 전송하여 리소스를 생성하거나 업데이트합니다. 일반적으로 폼 데이터를 제출할 때 사용됩니다. |
PUT | 서버에 지정된 리소스를 생성하거나, 리소스가 이미 존재할 경우 해당 리소스를 업데이트합니다. |
DELETE | 서버에서 지정된 리소스를 삭제합니다. |
HEAD | GET 요청과 동일하지만, 응답 본문(body)을 반환하지 않습니다. 주로 리소스의 메타데이터를 확인할 때 사용됩니다. |
OPTIONS | 서버에서 지원하는 HTTP 메서드 옵션을 반환합니다. 특정 리소스에 대해 어떤 메서드가 허용되는지 확인할 때 사용됩니다. |
PATCH | 리소스의 일부를 업데이트할 때 사용됩니다. PUT 과 달리 전체 리소스를 업데이트하지 않고 일부만 변경합니다. |
CONNECT | 서버와 클라이언트 간의 TCP 터널을 설정하여 양방향 통신을 수행합니다. 주로 프록시 서버와의 SSL 연결에 사용됩니다. |
TRACE | 클라이언트가 서버로 보낸 요청을 그대로 반환합니다. 디버깅 목적에서 요청이 서버에 도달했는지 확인할 때 사용됩니다. |
응답 메시지의 시작행
응답 메시지의 시작행은 "Status Line"이라고 하며, 다음 세 가지 요소로 구성됩니다
- HTTP 버전 (HTTP Version): 응답에서 사용되는 HTTP 프로토콜의 버전을 나타냅니다.
- 상태 코드 (Status Code): 요청의 결과를 나타내는 3자리 숫자 코드입니다.
- 상태 텍스트 (Reason Phrase): 상태 코드에 대한 짧은 설명입니다.
형식
<HTTP Version> <Status Code> <Reason Phrase>
예시
HTTP/1.1 200 OK
→ 이 예시에서 서버는 HTTP/1.1 버전을 사용하여 클라이언트에게 200 OK 상태 코드를 반환합니다. 이는 요청이 성공적으로 처리되었음을 나타냅니다.
아래는 주요 HTTP 상태 코드와 상태 메시지를 표로 정리한 것입니다!
상태 코드 | 상태 메시지 | 설명 |
---|---|---|
1xx | 정보(Informational) | 요청을 처리 중이며 추가 작업이 필요함을 나타냅니다. |
100 | Continue | 요청의 일부를 수신했고 클라이언트가 계속 요청을 전송해야 함. |
101 | Switching Protocols | 서버가 클라이언트의 프로토콜 전환 요청을 수락함. |
2xx | 성공(Successful) | 요청이 성공적으로 수신, 이해, 처리되었음을 나타냅니다. |
200 | OK | 요청이 성공적으로 처리되었음. |
201 | Created | 요청이 성공적으로 처리되었고 새로운 리소스가 생성되었음. |
204 | No Content | 요청이 성공적으로 처리되었으나 반환할 콘텐츠가 없음. |
3xx | 리다이렉션(Redirection) | 클라이언트가 요청을 완료하기 위해 추가 작업을 수행해야 함. |
301 | Moved Permanently | 요청한 리소스가 영구적으로 새로운 위치로 이동되었음. |
302 | Found | 요청한 리소스가 임시로 다른 위치에 있음 (일시적 리다이렉트). |
304 | Not Modified | 클라이언트의 캐시된 리소스가 최신 상태임 (콘텐츠가 변경되지 않음). |
4xx | 클라이언트 오류(Client Error) | 클라이언트 측에서 잘못된 요청을 보냈음을 나타냅니다. |
400 | Bad Request | 잘못된 문법으로 인해 서버가 요청을 이해할 수 없음. |
401 | Unauthorized | 인증이 필요하며, 클라이언트가 인증되지 않았음. |
403 | Forbidden | 클라이언트가 요청한 리소스에 접근할 권한이 없음. |
404 | Not Found | 요청한 리소스를 찾을 수 없음. |
5xx | 서버 오류(Server Error) | 서버가 요청을 처리하지 못했음을 나타냅니다. |
500 | Internal Server Error | 서버에서 예상치 못한 오류가 발생하여 요청을 처리할 수 없음. |
502 | Bad Gateway | 서버가 게이트웨이 또는 프록시로부터 잘못된 응답을 받음. |
503 | Service Unavailable | 서버가 일시적으로 요청을 처리할 수 없음 (과부하 또는 유지보수 중). |
504 | Gateway Timeout | 게이트웨이 또는 프록시 서버가 지정된 시간 내에 응답을 받지 못함. |
HTTPS란?
HTTPS는 보안요소가 강화된 HTTP 프로토콜입니다. HTTP는 데이터를 암화하 하지 않고 전송하기 때무에 중간에서 데이터를 발취당할 위험이 큽니다. 반면에 HTTPS는 SSL 또는 TLS 암호화 프로토콜을 사용해 데이터를 암호화하기 때문에 HTTP보다 데이터를 안전하게 전송할 수 있습니다.
'CS & Network' 카테고리의 다른 글
RESTful API란 (0) | 2024.03.19 |
---|---|
CI/CD란? (0) | 2024.03.17 |
JWT와 OAuth의 개념과 차이점에 대해서 (2) | 2024.03.15 |