HTTP(Hyper Text Transfer Protocol)

✒️ 2025-06-02 09:06 내용 수정


참고 자료 : CloudFare HTTP란 무엇입니까, mdn web docs HTTP, 위키백과 HTTP, wikipedia HTTP

HTTP(Hyper Text Transfer Protocol)

네트워크 장치 간에 정보를 전송하도록 설계된 응용 계층 프로토콜

무상태 프로토콜(Stateless Protocol)

HTTP의 자원


HTTP 기반 시스템 구성 요소

http_system.png

클라이언트 - 서버 구조

프록시(Proxy)


HTTP를 통한 데이터 교환 과정

  1. HTTP 클라이언트가 서버에 연결을 시도한다.
  2. HTTP/HTTPS 서버는 연결을 받아들이는 포트를 통해 클라이언트의 요청 메시지를 기다린다.
  3. 클라이언트가 HTTP 요청 메시지를 서버로 전송한다.
  4. 서버는 메시지를 받은 후 응답 header와 (필요 시)body를 포함한 HTTP 응답 메시지를 클라이언트에 전송한다.
  5. 클라이언트가 메시지를 받은 후 클라이언트와 서버의 연결이 종료된다.

HTTP 메시지 구조

1. Request Message

http_request_message.png

2. Response Message

http_response_message.png


HTTP Header와 HTTP Body

1. HTTP Header

헤더 종류 설명
일반 헤더(General Header) request, response에 모두 적용
body에서 최종적으로 전송되는 데이터와는 관련 없음
요청 헤더(Request Header) 패치될 resource나 클라이언트 자체에 대한 자세한 정보를 포함
응답 헤더(Response Header) 서버 자체에 대한 정보 등과 같은 응답에 대한 부가적인 정보를 포함
엔티티 헤더(Entity Header) 컨텐츠 길이, MIME 타입과 같은 엔티티 바디에 대한 정보 포함

1) 요청 헤더

카테고리 헤더 이름 설명
요청 컨텍스트 Host 요청 대상 서버의 도메인 이름과 포트 번호를 지정
User-Agent 클라이언트의 소프트웨어 정보를 서버에 전달
Referer 현재 요청된 페이지의 이전 페이지 URL을 서버에 전달
컨텐츠 협상 Accept 클라이언트가 처리 가능한 MIME 타입을 서버에 알림
Accept-Language 클라이언트가 선호하는 언어를 서버에 알림
Accept-Encoding 클라이언트가 지원하는 콘텐츠 인코딩 방식을 서버에 알림
인증 Authorization 인증 정보를 서버에 전달하여 접근을 요청
메시지 Body 정보 Content-Type 요청 본문의 MIME 타입을 지정
Content-Length 요청 본문의 길이를 바이트 단위로 지정
Content-Language 사용자의 선호 언어 지정
쿠키 Cookie 클라이언트가 저장한 쿠키를 서버에 전달

2) 응답 헤더

카테고리 헤더 이름 설명
응답 컨텍스트 Allow 리소스에 의해 지원되는 HTTP 요청 메서드 나열
Server 응답을 생성한 서버의 소프트웨어 정보를 클라이언트에 전달
쿠키 Set-Cookie 클라이언트에 쿠키를 설정하도록 지시
리다이렉트 Location 리디렉션 대상 URL을 클라이언트에 알림
인증 WWW-Authenticate 클라이언트에 인증을 요청
보안 Strict-Transport-Security HTTPS 연결을 강제하도록 클라이언트에 지시
CORS Access-Control-Allow-Origin CORS 정책에 따라 접근을 허용할 출처를 지정
Access-control-Allow-Credentials Credentials 플래그가 true일 때 요청에 대한 응답 노출 지정
기타 Retry-After 클라이언트가 다시 요청을 시도해야 하는 시간을 지정

3) 표현 헤더

카테고리 헤더 이름 설명
메시지 바디 정보 Content-Type 응답 본문의 MIME 타입을 지정
Content-Encoding 응답 본문의 인코딩 방식을 지정
Content-Language 응답 본문의 언어를 지정
Content-Length 응답 본문의 길이를 바이트 단위로 지정
조건부 ETag 리소스의 고유 식별자를 제공하여 캐싱을 지원
Last-Modified 리소스가 마지막으로 수정된 날짜와 시간을 지정

4) 페이로드 헤더

카테고리 헤더 이름 설명
전송 코딩 Transfer-Encoding 메시지 본문의 전송 인코딩 방식을 지정
Content-MD5 메시지 본문의 MD5 해시 값을 제공하여 무결성을 확인
범위 요청 Content-Range 응답 본문의 일부 범위를 지정하여 부분 전송을 지원

2. HTTP Body


HTTP 상태 코드

http_status_codes.png

분류 코드 설명
1xx 정보 응답
100 Continue
지금까지의 상태가 괜찮음
계속 요청하거나 이미 요청을 완료하면 무시해도 됨을 알려줌
102 Processing
서버가 요청을 수신했고 처리중이지만, 아직 제대로 된 응답은 불가
2xx 성공 응답
성공을 알리는 상태 코드
200 OK
요청이 성공적으로 수행됨
201 Created
요청이 성공적이며, 새로운 리소스가 생성됨
3xx 리다이렉션 메시지
리다이렉션(다른 페이지로 이동)을 알리는 상태 코드
301 Moved Permanently
요청한 리소스의 URI가 변경됨
새로운 URI가 응답에서 주어질 수도 있음
302 Found
요청한 리소스의 URI가 일시적으로 변경됨
새로운 URI는 나중에 만들어질 수 있음
304 Not Modified
캐시 목적으로 사용됨
클라이언트에게 응답이 수정되지 않았음을 알려주고,
클라이언트는 응답의 캐시된 버전을 사용할 수 있음
4xx 클라이언트 에러 응답
요청 요류를 알리는 상태 코드. 요청 자체에 오류가 있을 때 표시
400 Bad Request
잘못된 요청으로 서버가 요청을 이해할 수 없음
401 Unauthorized
권한 없음
표준에선 미승인(Unauthorized)지만 의미상 비인증(Unauthenticated)
403 Forbidden
클라이언트는 컨텐츠에 접근 불가
서버가 클라이언트를 알고 있음
404 Not Found
서버가 요청 받은 리소스를 찾을 수 없음
브라우저에선 알려지지 않은 URL을 의미
인증 받지 않은 클라이언트로부터 리소스를 숨기기 위해 403 대신에 사용할 수도 있음
408 Request Time out
요청지연으로 인한 에러
409 Conflict
요청이 현재 서버의 상태와 충돌됨
414 URI Too Long
요청 URI가 서버에서 처리하지 않기로 한 길이보다 긺
415 Unsupported Media Type
요청한 미디어 포맷은 서버에서 지원하지 않기에 서버는 요청을 거절함
418 I'm a teapot
서버는 커피를 찻 주전자에 끓이는 것을 거절함
(만우절 때 추가된 코드)
429 Too Many Request
지정된 시간에 요청을 너무 많이 전송함
5xx 서버 에러 응답
서버 오류를 나타내는 상태 코드
요청은 제대로 왔으나 서버에 오류가 생겼을 때 표시
500 Internal Server Error
서버가 처리 방법을 모르는 상황이 발생함
502 Bad Gateway
서버가 요청을 처리하는데 필요한 응답을 얻기 위해
게이트웨이로 작업하는 동안 잘못된 응답을 수신함
(서버와 클라이언트 사이에 있는 Proxy나 LoadBalancer 서버가
자원 서버로부터 잘못된 응답을 받을 때)
503 Service Unavailable
서버가 요청을 처리할 준비가 되지 않았음
서버의 작동 중단 및 과부하 시 발생
508 Loop Detected
서버가 요청을 처리하는 동안 무한 루프를 감지함

HTTP 요청 메서드

메서드 설명
GET 서버의 자원을 가져올 때 사용
HEAD GET과 동일하나 응답 본문을 포함하지 않음
POST 서버에 자원을 등록할 때 사용
PUT 서버의 자원을 요청에 들어있는 자원으로 치환할 때 사용
PATCH 서버의 자원에서 일부 내용만 요청에 있는 자원으로 치환할 때 사용
DELETE 서버의 자원을 삭제할 때 사용
OPTIONS 요청 전 통신 옵션을 설정

1) GET

2) POST

3) PUT

4) PATCH

5) DELETE