HTTP 란 무엇인가?

HTTP 란 무엇인가?

HTTP (HyperText Transfer Protocol)
서버 - 클라이언트간 데이터를 주고 받기 위해 사용되는 통신 규약 입니다.

네트워크 계층 구조상에서는 TCP 위에서 동작하는 애플리케이션 계층(Application Layer) 프로토콜로, 실제 데이터 전송과 신뢰성 보장은 TCP가 담당하고 HTTP는 데이터의 형식과 교환 규칙을 정의합니다.

본문은 일반적인 텍스트 이외에도 바이너리 데이터도 전송이 가능하여 파일 업로드, 이미지, 동영상, 압축 파일 등 다양한 형태의 데이터를 전달할 수 있습니다.

HTTP는 요청(Request)과 응답(Response) 구조로 동작하며, 클라이언트가 요청을 보내면 서버는 이에 대한 응답을 반환하는 방식입니다.

각 요청은 독립적으로 처리되며, 이전 요청의 상태를 유지하지 않는 무상태(stateless) 특성을 가지기 때문에 쿠키(세션)나 인증 헤더(토큰)를 통해 사용자 상태나 인증 정보를 전달합니다.

MDN HTTP

MDN HTTP Cookies

MDN HTTP Authentication


요청과 응답의 기본 구조

HTTP 요청은 요청 라인(Request Line)을 통해 메서드와 요청 대상을 먼저 전달한 뒤, 요청 헤더와 본문이 이어지는 구조를 가집니다.

예를 들어, 브라우저가 서버에 페이지를 요청할 때의 요청 라인은 다음과 같습니다.

GET /articles/1 HTTP/1.1

이에 대한 서버의 응답은 상태 라인(Status Line)으로 시작하며, 요청 처리 결과를 상태 코드로 먼저 전달합니다.

HTTP/1.1 200 OK

MDN HTTP Messages


브라우저 통신에서 주로 사용되는 요청 헤더

헤더 이름설명
Host요청을 보내는 대상 도메인을 나타내며, 하나의 서버에서 여러 도메인을 처리하기 위해 사용된다.
User-Agent요청을 보낸 브라우저와 운영체제, 엔진 정보를 포함하며, 서버는 이를 기반으로 브라우저별 분기 처리나 통계를 수행할 수 있다.
Accept클라이언트가 응답으로 받을 수 있는 데이터 타입을 나타내며, 서버는 이를 참고해 적절한 형식으로 응답한다.
Accept-Encoding클라이언트가 해제할 수 있는 압축 방식(gzip, br 등)을 나타내며, 응답 데이터의 압축에 사용된다.
Accept-Language클라이언트가 선호하는 언어 정보를 전달하며, 다국어 서비스에서 응답 언어를 결정하는 데 사용된다.
ConnectionTCP 연결을 유지할지 여부를 나타내며, keep-alive 설정 시 동일한 연결을 재사용한다.
Referer현재 요청이 발생한 이전 페이지의 주소를 나타내며, 유입 경로 분석이나 보안 검증에 활용된다.
Cookie브라우저에 저장된 쿠키 정보를 서버로 전달하며, 로그인 상태나 사용자 세션을 유지하는 데 사용된다.
Authorization인증 정보를 포함하며, 토큰 기반 인증(Bearer Token 등)에 주로 사용된다.
Content-Type요청 본문의 데이터 형식을 나타내며, JSON, form-data 등 서버가 본문을 해석하는 기준이 된다.
Content-Length요청 본문의 크기를 바이트 단위로 나타내며, 서버가 요청 데이터를 정확히 읽기 위해 사용된다.

브라우저 통신에서 주로 사용되는 응답 헤더

헤더 이름설명
Content-Type응답 본문의 데이터 형식을 나타내며, 브라우저가 데이터를 어떻게 해석할지 결정한다.
Content-Length응답 본문의 크기를 바이트 단위로 나타낸다.
Content-Encoding응답 데이터에 적용된 압축 방식(gzip, br 등)을 나타낸다.
Cache-Control응답의 캐시 정책을 지정하며, 브라우저와 중간 캐시 서버의 동작에 영향을 준다.
Expires응답이 만료되는 시점을 나타내며, 캐시 유효 기간 판단에 사용된다.
ETag응답 리소스의 고유 식별자로, 캐시 검증에 사용된다.
Last-Modified리소스가 마지막으로 수정된 시간을 나타내며, 캐시 검증에 활용된다.
Set-Cookie브라우저에 저장할 쿠키 정보를 전달한다.
Location리다이렉트 시 이동할 URL을 나타낸다.
Server서버 소프트웨어 정보를 나타낸다.
Date응답이 생성된 서버 시간을 나타낸다.
Access-Control-Allow-OriginCORS 설정을 통해 허용된 요청 출처를 지정한다.

자주 사용하는 HTTP 메서드

메서드주요 용도요청 본문설명
GET리소스 조회없음서버의 상태를 변경하지 않고 데이터를 조회할 때 사용된다.
POST리소스 생성 / 처리 요청있음새로운 리소스를 생성하거나 서버에서 처리를 수행하도록 요청한다.
PUT리소스 전체 수정있음기존 리소스를 전체 교체하며, 여러 번 요청해도 결과가 동일하도록 설계된다.
PATCH리소스 일부 수정있음리소스의 특정 필드만 부분적으로 수정할 때 사용된다.
DELETE리소스 삭제없음지정한 리소스를 삭제하는 데 사용된다.

멱등성

동일한 요청을 한 번 보내는 것과 여러 번 연속으로 보내는 것이 같은 효과를 지니고, 서버의 상태도 동일하게 남을 때, 해당 HTTP 메서드가 멱등성을 가졌다고 말합니다.

MDN HTTP Idempotent

자주 사용하는 HTTP 상태 코드

상태 코드분류의미설명
2002xx 성공OK요청이 정상적으로 처리되었음을 의미한다.
2012xx 성공Created요청이 성공적으로 처리되어 새로운 리소스가 생성되었음을 의미한다.
2042xx 성공No Content요청은 성공했지만 응답 본문이 없음을 의미한다.
3013xx 리다이렉션Moved Permanently요청한 리소스가 영구적으로 다른 위치로 이동했음을 의미한다.
3023xx 리다이렉션Found요청한 리소스가 일시적으로 다른 위치에 있음을 의미한다.
3043xx 리다이렉션Not Modified캐시된 리소스를 그대로 사용해도 됨을 의미한다.
4004xx 클라이언트 오류Bad Request요청 형식이 잘못되었거나 유효하지 않음을 의미한다.
4014xx 클라이언트 오류Unauthorized인증이 필요하거나 인증 정보가 유효하지 않음을 의미한다.
4034xx 클라이언트 오류Forbidden인증은 되었으나 접근 권한이 없음을 의미한다.
4044xx 클라이언트 오류Not Found요청한 리소스를 찾을 수 없음을 의미한다.
4094xx 클라이언트 오류Conflict요청이 서버의 현재 상태와 충돌함을 의미한다.
5005xx 서버 오류Internal Server Error서버 내부 오류로 요청을 처리할 수 없음을 의미한다.
5025xx 서버 오류Bad Gateway게이트웨이 또는 프록시 서버에서 잘못된 응답을 받았음을 의미한다.
5035xx 서버 오류Service Unavailable서버가 일시적으로 요청을 처리할 수 없는 상태임을 의미한다.

MDN HTTP Status

참조