창고/기초지식

HTTP란 무엇인가?

1. 정리이유

HTTP는 웹 브라우저를 사용할때, 개발할때 클라이언트쪽과 서버가 정보를 교환하는 기본적인 프로토콜이라는 정도로 두루뭉실하게 알고있어서 좀 정리할 필요가 있다고 생각이 들어서 정리한다.

 

2. HTTP(HyperText Transfer Protocol)란?

텍스트 기반의 통신 규약으로 인터넷에서 데이터를 주고 받을 수 있는 프로토콜이다. 정해진 규약이기 때문에 모든 프로그램이 이 규약에 맞춰 개발해서 서로 정보를 교환할 수 있게 되었다.

 

HTTP는 클라이언트가 요청을 생성하기 위한 연결을 연 다음 응답을 받을 때까지 대기하는 전통적인 클라이언트-서버 모델을 따른다.

 

HTTP는 무상태 프로토콜이며, 이는 서버가 두 요청 간에 어떠한 상태나 데이터를 유지하지 않음을 의미한다. (상태를 유지하기 위한 노력으로 Cookie와 Session을 사용한다.)

 

일반적으로 안정적인 TCP/IP 레이어를 기반으로 사용하는 프로토콜이다.

 

3. HTTP의 동작 방식 

클라이언트 : 서버에게 요청을 보내는 리소스 사용자 ex) 웹 브라우저, 모바일 애플리케이션, IoT등

서버 : 클라이언트에게 요청에 대한 응답을 제공하는 리소스 관리자

정리 : 클라이언트(웹 브라우저, 모바일 등)가 브라우저를 통해서 어떠한 서비스를 URI를 통해 서버에 요청(Request)하면 서버에서는 해당 요청에 대한 결과를 응답(Response)하는 형태로 동작한다.

 

4. HTTP 요청 메서드

GET : 특정 리소스를 받기 위한 요청이다. 따라서, 리소스의 생성, 수정 및 삭제 등에 사용해서는 안된다.

POST : 리소스를 생성하거나 컨트롤러를 실행하는 데 사용한다.

PUT : 변경 가능한 리소스를 업데이트하는데 사용되며 항상 리소스 식별 정보를 포함해야한다.

DELETE : 특정 리소스를 제거하는 데 사용한다. (일반적으로 Request body가 아닌 URI 경로에 제거하려는 리소스의 ID를 전달한다.)

PATCH : 변경 가능한 리소스의 부분 업데이트에 사용되며 항상 리소스 식별 정보를 포함해야한다.(전체 객체를 업데이트하는 것이 관례여서 거의 사용되지 않음)

HEAD : 클라이언트가 본문 없이 리소스에 대한 헤더만 검색하는 경우 사용한다. (일반적으로 클라이언트가 서버에 리소스가 있는 지 확인하거나 메타 데이터를 읽으려는 때만 GET 대신 사용한다.)

OPTIONS : 클라이언트가 서버의 리소스에 대해 수행 가능한 동작을 알아보기 위해 사용한다. (일반적으로 서버는 이 리소스에 대해 사용할 수 있는 HTTP 요청 메소드를 포함하는 Allow 헤더를 반환한다. (CORS에 사용)

 

5. HTTP 메시지

GET https://velog.io/@surim014 HTTP/1.1								// 시작줄
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) ...			  // 헤더
Upgrade-Insecure-Requests: 1

5-1 시작줄(첫 줄)

첫 줄은 시작줄로 메서드 구조 버전으로 구성된다.

5-2 헤더 (두 번째 줄부터)

두번째 줄부터는 헤더이며 요청에 대한 정보를 담고 있다. User-Agent, Upgrade-Insecure-Requests 등등

 

5-3 본문 (헤더에서 한 줄 띄고)

본문은 요청을 할 때 함께 보낼 데이터를 담는 부분이다. 현재 예시에는 단순히 주소로만 요청을 보내고 있어서 따로 데이터를 담아 보내지 않기 때문에 본문이 비어있다.

 

6. Response (응답)

서버가 요청에 대한 답변을 클라이언트에게 보내는 것을 응답이라고 한다.

 

Status Code(상태 코드)

요청에 대한 응답의 결과 상태에 대해 표시해주는 상태코드이다.

  • 1XX (조건부 응답) : 요청을 받았으며 작업을 계속한다.
  • 2XX (성공) : 클라이언트가 요청한 동작을 수신하여 이해했고 승낙했으며 성공적으로 처리했음을 가리킨다.
  • 3XX (리다이렉션 완료) : 클라이언트는 요청을 마치기 위해 추가 동작을 취해야 한다.
  • 4XX (요청 오류) : 클라이언트에 오류가 있음을 나타낸다.
  • 5XX (서버 오류) : 서버가 유효한 요청을 명백하게 수행하지 못했음을 나타낸다.

Resonse HTTP 메시지 예시

1. 시작줄 (첫 줄)

첫 줄은 버전 상태코드 상태메시지로 구성되어 있다. 200은 성공적인 요청이었다는 뜻이다.

 

2. 헤더 (두 번째 줄부터)

두 번째 줄부터는 헤더로 응답에 대한 정보를 담고 있다.

 

3. 본문 (헤더 뒤부터)

응답에는 대부분의 경우 본문이 있다. 보통 데이터를 요청하고 응답 메시지에는 요청한 데이터를 담아서 보내주기 때문이다. 응답 메시지에 HTML이 담겨 있는데 이 HTML을 받아 브라우저가 화면에 렌더링한다.

 

 

 

 

 

 

 

[참고]

https://surprisecomputer.tistory.com/54

 

[Network] HTTP란 무엇인가?

1. 서론  최근 백엔드 개발을 진행하다 보니 데이터 송수신 방식(RPC, gRPC 등)에 대해 공부할 기회가 생겼는 데, 그중 제일 기본적인 방식이 HTTP에 대해 생각보다 자세히 모르고 있다는 생각이 들

surprisecomputer.tistory.com

https://velog.io/@surim014/HTTP%EB%9E%80-%EB%AC%B4%EC%97%87%EC%9D%B8%EA%B0%80