network

[network] 혼자 공부하는 네트워크 05-2 HTTP

hail2y 2025. 1. 13. 18:33
  • HTTP의 네 가지 중요한 특성
  • HTTP 기반 기술 

※ 위 내용은 모두 빠짐없이 잘 알아야 한다. 


HTTP의 네 가지 특성

  1. 요청-응답 기반 프로토콜
  2. 미디어 독립적 프로토콜
  3. 상태를 유지하지 않는 프로토콜
  4. 지속 연결을 지원하는 프로토콜

1. 요청-응답 기반 프로토콜

- 클라이언트-서버 구조 기반의 요청-응답 프로토콜

- HTTP 요청 메시지와 HTTP 응답 메시지는 메시지 형태가 다름

 

2. 미디어 독립적 프로토콜

https://www.rfc-editor.org/rfc/rfc9110.html

 

HTTP 요청 대상은 자원이라고 부른다. HTTP는 자원의 속성을 제한하지 않고 단지 자원과 상호작용하는 데 사용되는 인터페이스를 정의한다. 대부분의 자원은 URI로 식별한다.

 

즉, HTTP는 자원의 특성과 무관하게 그저 자원을 주고받을 수단(인터페이스, 통로) 역할만 한다. HTTP를 기반으로 주고받을 수 있는 자원의 종류는 다양하다. 

 

  • 미디어 타입(Media Type): HTTP에서 메시지로 주고받는 자원의 종류, 웹 세상의 확장자
    ㄴ MIME 타입(Multipurpose Internet Mail Extension Type)이라고도 함

 

3. 상태를 유지하지 않는 프로토콜

 

- 서버가 HTTP 요청을 보낸 클라이언트와 관련된 상태를 유지하고 있지 않음

- 클라이언트와 관련한 정보를 프로토콜 단에서 저장하고 있지 않음

 

즉, 서버로 요청을 보내는 클라이언트의 모든 HTTP 요청을 독립적인 요청으로 간주한다. 이렇게 하는 이유는 HTTP의 확장성과 견고성 때문이다. 높은 가용성을 위해 서버는 여러 대로 다중화로 구성되어 있는 경우가 많다. 만약 상태를 유지한다면 서버들끼리 클라이언트의 상태 정보를 공유해야 하는데, 이는 서버에 큰 부담이 될 수밖에 없다. 

  • 클라이언트의 요청 정보를 빨리 보내줘야 하기 때문
  • 특정 서버하고만 통신할 시 그 서버가 다운될 때 상태 정보 다 날아갈 수 있기 때문

그렇기 때문에 특정 클라이언트가 보내는 모든 HTTP 요청은 기본적으로 독립적인 요청으로 간주한다. 

 

4. 지속 연결을 지원하는 프로토콜

- 지속 연결 keep-alive, persistent connection

- 오늘날 대중적으로 사용되는 http 버전은 1.1, 2.0, 3.0

- 불필요한 연결 수립과 종료에 드는 시간을 줄일 수 있다

https://www.youtube.com/watch?v=N_qURj2Wtn8&list=PLVsNizTWUw7HfOCgvlfHIDPPo3TE-2iQM&index=39&t=836s

HTTP 메시지 구조 

- HTTP는 미디어 독립적인 프로토콜

- 메시지 본문에는 뭐가 명시되어도 된다

- 시작라인, 필드라인 위주로 학습해야 한다.

 

- 시작 라인, 필드 라인, 메시지 본문으로 구성

  • 필드 라인은 0개 이상
  • 본문은 없을 수 있음
  • 필드 라인과 메시지 본문 사이에는 빈 줄바꿈이 있음

 

요청 라인

  • 메서드는 클라이언트가 서버의 자원(요청 대상)에 대해 수행할 작업의 종류
  • ex. GET, POST, PUT, DELETE 등

 

상태 라인

  • 상태 코드는 요청에 대한 결과를 나타내는 세 자리 정수 
  • 이유 구문은 상태 코드에 대한 문자열 형태의 설명

 

필드 라인, 헤더 라인

  • 어떤 호스트가 보냈는지, 어떤 플랫폼에서 요청을 보냈는지 등 부가 정보 포함
  • 콜론을 기준으로 헤더 이름과 하나 이상의 헤더 값으로 구성

필드라인을 기반으로 이루어지는 기반기술이 쿠키와 캐시다.

 

메시지 본문

  • HTTP 요청 혹은 응답 메시지에서 본문이 필요할 경우 선택적으로 메시지 본문에 명시
  • 다양한 콘텐츠 타입이 사용 가능

postman에서 요청 헤더 확인하기
응답 메시지 형식

HTTP 메서드

HTTP 메서드  설명
GET 자원을 습득하기 위한 메서드
HEAD GET과 동일하나, 헤더만을 응답받는 메서드
POST 서버로 하여금 특정 작업을 처리하게끔 하는 메서드
PUT 자원을 완전히 대체하기 위한 메서드
PATCH 자원에 대한 부분적 수정을 위한 메서드
DELETE 자원을 삭제하기 위한 메서드
CONNECT 자원에 대한 양방향 연결을 시작하는 메서드
OPTIONS 사용 가능한 메서드 등 통신 옵션을 확인하는 메서드
TRACE 자원에 대한 루프백 테스트를 수행하는 메서드

 

POST - 클라이언트가 서버에 새로운 자원을 생성하고자 할 때 사용

성공적으로 수행되었을 때 서버는 응답 메시지의 Location 헤더를 통해 새로 생성된 자원의 위치를 알려 줌

 

HTTP 상태 코드

- 100번대: 정보성 상태 코드

- 200번대: 성공 상태 코드

- 300번대: 리다이렉션 상태 코드

- 400번대: 클라이언트 에러 상태 코드

- 500번대: 서버 에러 상태 코드

200번대: 성공 상태 코드 - 201(CREATED)

상태 코드 이유 구문 설명
200 OK 요청이 성공했음
201 Created 요청이 성공했으며, 새로운 자원이 생성되었음
202 Accepted 요청을 잘 받았으나, 아직 요청한 작업을 끝내지 않았음
204 No Content 요청이 성공했지만, 메시지 본문으로 표시할 데이터가 없음

 

201 (Created)

POST 요청으로 서버에 새로운 자원을 생성한 경우 상태 코드 201(Created) 응답

- Location 헤더를 통해 생성된 자원의 위치를 명시

 

200(Accepted)

- 요청을 잘 받았으나, 아직 요청한 작업을 끝내지 않았음

- 요청 결과를 곧바로 응답하기 어려운 경우

- 작업 시간이 긴 대용량 파일 업로드 작업, 배치 작업과 같이

 

204(No Content)

- 요청을 잘 받았고, 마땅히 본문으로 표현할 것이 없음

 

300번대: 리다이렉션 상태 코드

  • 요청을 완수하기 위해 추가적인 조치가 필요한 상태
  • 클라이언트가 요청한 자원이 다른 곳에 있을 때, 클라이언트의 요청을 다른 곳으로 이동시키는 것
  • 리다이렉션(redirection) 종류
    • 영구적인 리다이렉션: 자원이 완전히 새로운 곳으로 이동하여 경로가 영구적으로 재지정
    • 301(Moved Permanently), 308(Permanent Redirect)

  • 일시적인 리다이렉션: 자원의 위치가 임시로 변경되었거나 임시로 사용할 URL이 필요한 경우에 주로 사용
  • 302(Found), 303(See Other), 307(Temporary Redirect) + 304(Not Modified)

400번대: 클라이언트 에러 상태 코드

상태 코드 이유 구문 설명
400 Bad Request 클라이언트의 요청이 잘못되었음
401 Unauthorized 요청한 자원에 대한 유효한 인증이 없음
403 Forbidden 요청이 서버에 의해 거부됨
(ex. 접근 권한이 없을 경우)
404 Not Found 요청받은 자원을 찾을 수 없음
405 Method Not Allowed 요청한 메서드를 지원하지 않음

 

400 (Bad Request)

- 서버가 처리할 수 없는 형태로 요청을 보냈을 때

- 클라이언트의 요청 메시지 내용이나 형식 자체에 문제가 있어 무슨 내용인지 서버가 알아들을 수 없을 때

 

401 (Unauthorized)

- 특정 자원에 접근하기 위해 인증이 필요

- 인증되지 않은 사용자가 자원에 접근하고자 할 때

- 서버는 인증(로그인)을 요구, 반드시 클라이언트가 어떤 방법으로 인증하기를 원하는지 인증 방법을 알려 주어야 함

 

403 (Forbidden)

- 관리자 페이지

- 인증된 사용자라도 권한이 충분하지 않을 때

 

404 (Not Found)

- 접근하고자 하는 자원이 존재하지 않을 때

- 클라이언트가 원하는 자원을 찾지 못 할 때

 

405 (Method Not Allowed)

- 구현되지 않은 메서드로 요청을 보낼 경우

 

인증(Authentication),  권한 부여(Authorization)

  • 인증: 자신이 누구인지 증명하는 것, "누구야"
  • 권한 부여/인가: 인증된 주체에게 작업을 허용하는 것, 권한, "너 뭐 돼?"

500번대: 서버 에러 상태 코드

상태 코드 이유 구문 설명
500 Internal Server Error 요청을 처리할 수 없음
502 Bad Gateway 중간 서버의 통신 오류
503 Service Unavailable 현재는 요청을 처리할 수 없으나 추후 가능할 수도 있음

 

500 (Internal Server Error)

- 서버의 예기치 못한 상황으로 인해 요청을 처리할 수 없음

- 서버 내 에러를 통칭

- 오히려 대략적인 에러가 더 안전

 

502 (Bad Gateway)

- 클라이언트와 서버 사이에 위치한 중간 서버의 통신 오류를 나타내는 상태 코드

- 중간 서버가 유효하지 않거나 잘못된 응답을 받을 때

 

503 (Service Unavailable)

- 현재 서비스를 일시적으로 이용할 수 없음

- 서버가 과부하 상태에 있거나 일시적인 점검 상태일 때 볼 수 있는 상태

- 그래서 언제 다시 서비스를 재개할 수 있는지 헤더 등을 통해 알려줄 수 있음