Doctor Pepper

[응용 계층] HTTP 헤더와 HTTP 기반 기술 본문

네트워크/응용 계층

[응용 계층] HTTP 헤더와 HTTP 기반 기술

Doctor Pepper 2024. 11. 10. 11:57
728x90

 

 웹 애플리케이션과 서버 간의 데이터 전송에서 중요한 역할을 하는 HTTP(HyperText Transfer Protocol)는 오늘날 우리가 웹을 사용하면서 매일 접하는 프로토콜이다. HTTP는 요청(Request)응답(Response) 사이의 메시지 형식과 규칙을 정의하는데, 그 중 HTTP 헤더는 특히 중요한 역할을 한다. 

 

1. HTTP 헤더

 HTTP 헤더는 HTTP 요청 및 응답 메시지의 일부로, 메타데이터를 포함하는 키-값 쌍이다. 클라이언트와 서버는 HTTP 요청 및 응답을 통해 데이터를 주고받지만, 그 사이에 헤더를 사용하여 통신의 세부 사항을 전달한다. 이 헤더들은 콘텐츠의 타입, 길이, 요청 방식 등을 지정하고, 인증 및 캐시 제어 등의 추가 정보를 제공한다.

 

 - 주요 HTTP 요청 헤더

User-Agent 요청을 보낸 클라이언트의 정보(브라우저, 운영체제 등)를 포함함
Referer 서버가 반환할 수 있는 콘텐츠의 유형을 지정함.
ex. Referer: text/html, application/json
Authorization 클라이언트가 서버에 인증 정보를 전달할 때 사용됨
Host 요청이 전송된 서버의 도메인 이름을 지정함

 

 - 주요 HTTP 응답 헤더

Server 응답을 보낸 서버의 정보(서버 소프트웨어, 버전 등)를 포함함.
Allow 서버가 해당 리소스에 대해 지원하는 HTTP 메서드 목록을 포함함.
Retry-After 서버가 요청을 처리할 수 없을 때, 클라이언트가 재시도할 적절한 시간을 포함함.
Location 리소스의 새로운 위치(URL)를 포함함(리다이렉션 시 사용).
WWW-Authenticate 서버가 요구하는 인증 방법과 정보를 포함함(인증이 필요한 경우 사용).

 

- 요청과 응답 모두에서 활용되는 HTTP 헤더

Date 요청이나 응답이 전송된 날짜와 시간을 포함함.
Connection 연결 유지 여부를 정의하거나, 클라이언트와 서버 간의 연결에서 사용할 옵션을 지정함.
Content-Length 전송된 메시지 본문의 길이를 바이트 단위로 지정함.
Content-Type 메시지 본문의 미디어 타입을 지정함.
Content-Language 메시지 본문의 언어를 지정함.
Content-Encoding 메시지 본문이 압축된 경우, 사용된 압축 방법을 지정함.

 

 

2. 캐시(Cache)

 캐시(Cache)는 웹 리소스의 성능을 향상시키기 위해 자주 사용되는 중요한 기술이다. 캐시란 자주 요청되는 데이터나 리소스를 저장해 두어, 동일한 데이터를 다시 요청할 때 서버가 아닌 저장된 캐시에서 빠르게 응답할 수 있도록 하는 메커니즘이다. 이는 서버의 부하를 줄이고, 클라이언트 측에서 더 빠른 응답 시간을 제공할 수 있게 한다.

 

 - 캐시 저장 위치

브라우저 캐시 클라이언트의 웹 브라우저에 저장되는 캐시로, 사용자가 다시 방문할 때 이전에 다운로드한 파일(이미지, HTML, CSS 등)을 재사용할 수  있음
프록시 캐시 서버와 클라이언트 사이에 위치한 캐시로, 여러 클라이언트의 요청을 대신 처리하고 응답을 캐시함. 이는 여러 사용자가 동일한 데이터를 요청할 때 서버 부하를 줄여줌.
서버 캐시 서버 내부에 저장된 캐시로, 자주 요청되는 리소스를 서버가 빠르게 제공할 수 있음.

 

- 캐시의 이점

성능 향상 데이터가 캐시에서 제공되면, 매번 서버에 요청을 보내는 것보다 훨씬 빠르게 데이터를 로드할 수 있음
서버 부하 감소 서버에서 처리해야 하는 요청이 줄어들어 서버 부하가 감소하고, 서버 자원을 절약할 수 있음
대역폭 절약 동일한 데이터를 여러 번 다운로드할 필요가 없기 때문에 네트워크 대역폭을 절약할 수 있음

 

- 캐시 동작 원리

캐시된 리소스의
유효성 검사
클라이언트가 서버로부터 리소스를 처음 요청하면 서버는 리소스를 제공하고, 이를 캐시에 저장함
이후 클라이언트가 같은 리소스를 요청하면, 서버에 요청을 보내는 대신 캐시된 데이터를 사용함. (그러나 이 데이터가 유효한지 확인해야 함.)
이를 위해 서버는 ETag, Last-Modified와 같은 정보를 사용하여 리소스가 변경되었는지 확인할 수 있음.
조건부 요청 클라이언트는 서버에 저장된 리소스가 최신인지 확인하기 위해 If-Modified-Since, If-None-Match와 같은 헤더를 포함하여 요청할 수 있음.
서버는 리소스가 변경되지 않았다면 304 Not Modified 상태 코드를 반환하여, 클라이언트는 캐시된 데이터를 계속 사용할 수 있음.

 

- 캐시 정책

강제 캐시 리소스가 설정된 기간 동안 캐시되며, 만료되기 전에 캐시된 리소스를 사용할 수 있음.
조건부 캐시 클라이언트는 서버에 캐시된 리소스가 최신인지 확인하고, 서버가 변경된 경우에만 새로운 데이터를 받음
공유 캐시 여러 사용자가 동일한 리소스를 공유할 수 있도록 설정된 캐시 정책임.

 

 

 HTTP 캐시는 개인 전용 캐시(Private Cache)공용 캐시(Public Cache)로 구분할 수 있습니다. 이 두 가지 캐시는 주로 Cache-Control 헤더를 통해 구분되며, 리소스를 어떻게 캐시할지에 대한 정책을 정의합니다.

특징 개인 전용 캐시 공용 캐시
저장 위치 클라이언트의 브라우저 또는 개인 장치 프록시 서버, CDN, 공유 서버
사용자 범위 특정 사용자만 사용 여러 사용자 간 공유
Cache-Control Cache-Control: private Cache-Control: public
리소스 유형 개인화된 데이터, 로그인 상태 정보 등 변경되지 않는 리소스(이미지, CSS, JS 등)
주요 예시 사용자 프로필, 로그인 세션 등 웹사이트의 공용 콘텐츠(로고, 스타일시트 등)

 

 

- 개인 전용 캐시(Private Cache) : 주로 사용자 개인의 브라우저개인적인 디바이스에 저장되는 캐시이다. 이 캐시는 특정 사용자에게만 적용되며, 다른 사용자가 동일한 캐시를 공유하지 않는다. 주로 개인화된 콘텐츠(예: 로그인된 상태, 사용자 맞춤형 데이터)를 다룰 때 사용된다.

고유성 해당 리소스는 한 사용자에게만 관련이 있기 때문에, 다른 사용자와 공유되지 않음.
주로 브라우저에 저장 브라우저가 개인적인 데이터를 캐시할 때 사용됨
사용자별 맞춤 데이터 로그인한 사용자의 개인 정보나 사용자 맞춤형 설정 같은 경우 캐시됨.

 

- 공용 캐시(Public Cache) : 여러 사용자 간에 공유 가능한 캐시로, 주로 프록시 서버CDN(Content Delivery Network), 공용 캐시 서버와 같은 시스템에 저장된다. 이 캐시는 여러 사용자가 동일한 리소스를 요청할 때, 중복되는 네트워크 트래픽을 줄이기 위해 사용된다.

고유성 여러 사용자 간에 리소스를 공유할 수 있음.
즉, 하나의 리소스를 여러 클라이언트가 사용할 수 있음.
프록시 서버 또는 CDN에 저장 공용 캐시는 보통 네트워크상의 프록시 서버나 CDN에 저장되어, 동일한 콘텐츠를 여러 사용자에게 빠르게 제공할 수 있음
변경되지 않는 리소스 주로 이미지, CSS 파일, JavaScript 파일과 같이 변경되지 않는 리소스가 캐시됨.

 

 

3. 쿠키(Cookie)

 HTTP 쿠키(Cookie)는 클라이언트와 서버 간에 상태를 유지하는 데 사용되는 작은 데이터 조각이다. HTTP는 본래 무상태(stateless) 프로토콜로, 요청과 응답 간에 상태 정보를 유지하지 않지만, 쿠키를 활용하면 웹 서버가 클라이언트의 상태를 추적하고 관리할 수 있다. 쿠키는 클라이언트의 브라우저에 저장되며, 서버는 이를 사용해 사용자 정보를 저장하고 다음 요청 시 이를 참조할 수 있다.

 

 - 쿠키 동작 원리

서버에서 쿠키 설정 클라이언트가 서버에 처음 요청을 보내면, 서버는 Set-Cookie HTTP 헤더를 통해 쿠키를 설정함
서버는 쿠키에 여러 가지 속성(이름, 값, 만료인, 도메인 등)을 설정할 수 있음
클라이언트에서 쿠키 저장 클라이언트(브라우저)는 서버가 보낸 쿠키를 저장하고, 이후 동일한 도메인에 요청을 보낼 때마다 Cookie 헤더에 저장된 쿠키를 첨부하여 서버로 전송함
서버에서 쿠키 사용 서버는 클라이언트가 보낸 쿠키를 확인하고, 이를 바탕으로 상태를 관리하거나, 세션을 유지하는 등 사용자 맞춤형 서비스를 제공함

 

- 쿠키의 주요 속성

Name=Value 쿠키의 이름과 값은 이름=값 형식으로 설정됩니다.
ex. username=JohnDoe처럼 사용자 이름을 저장할 수 있음.
Expires 쿠키의 만료 시간을 지정함. 만약 Expires가 설정되지 않으면, 쿠키는 세션 쿠키(session cookie)로 취급되며, 브라우저가 닫힐 때 삭제됨.
ex. Expires=Thu, 01 Jan 2025 00:00:00 GMT
Max-Age Expires와 유사하지만, 초 단위로 만료 시간을 설정할 수 있음.
Max-Age가 설정되면 지정된 시간이 지난 후 쿠키는 자동으로 삭제됨.
ex. Max-Age=3600 (1시간 후 만료)
Domain 쿠키가 속할 도메인을 지정합니다. 기본적으로 쿠키는 설정된 도메인과 그 하위 도메인에서만 전송됨.
Domain을 명시적으로 지정하면 서브도메인에도 쿠키가 전달될 수 있음.
ex. Domain=example.com (example.com과 그 하위 도메인에서 유효)
.Path 쿠키가 적용될 경로를 지정함. 쿠키는 지정된 경로와 그 하위 경로에서만 전송됨.
ex. Path=/user (user 경로에서만 쿠키가 전송됨)
Secure Secure 속성은 쿠키가 HTTPS 연결을 통해서만 전송되도록 설정함.
이는 보안을 강화하기 위해 사용됨.
ex. Secure (HTTPS 연결에서만 쿠키 전송)
HttpOnly HttpOnly 속성은 쿠키가 JavaScript에서 접근할 수 없도록 설정함.
이는 XSS(Cross-Site Scripting) 공격을 방지하는 데 유용함.
ex. HttpOnly (JavaScript에서 쿠키 접근 불가)
SameSite SameSite 속성은 Cross-Site 요청에서 쿠키의 전송 여부를 제어함.
이 속성은 쿠키의 보안을 강화하는 데 도움이 됨.
 - Strict : 동일 출처 요철에서만 쿠키를 전송
 - Lax : 동일 출처 요청과 일부 크로스 사이트 요청에서 쿠키를 전송
 - None : 모든 요청에서 쿠기를 전송(단, Secure 속성도 함께 설정되어야 함)
ex. SameSite=Strict (동일 출처 요청에서만 쿠키 전송)

 

- 쿠키의 용도

세션 관리
(Session Management)
가장 일반적인 사용 사례는 세션 관리임.
쿠키는 로그인 상태를 유지하거나 사용자 세션을 추적하는 데 사용됨.
예를 들어, 사용자가 로그인하면 서버는 쿠키를 설정하여, 이후 요청 시 자동으로 인증된 사용자로 인식함.
사용자 맞춤형 설정
(Personalization)
사용자의 설정이나 선호도를 저장하는 데 사용될 수 있음.
예를 들어, 언어 설정, 테마, 사이트 설정 등이 쿠키를 통해 저장될 수 있음.
트래킹 및 분석
(Tracking and Analytics)
사용자의 웹사이트 방문 기록을 추적하고 분석하는 데 사용됨.
이를 통해 웹사이트는 사용자의 행동 패턴을 분석하고, 맞춤형 광고나 콘텐츠를 제공할 수 있음.
쇼핑 카트 유지
(Cart Persistence)
전자상거래 사이트에서는 사용자가 쇼핑 카트에 추가한 상품을 쿠키에 저장하여, 웹사이트를 떠난 후에도 사용자가 돌아왔을 때 쇼핑 카트 내용이 유지되도록 할 수 있음.

 

4. 콘텐츠 협상(Content Negotiation)과 표현(Representation)

 콘텐츠 협상(Content Negotiation)표현(Representation)은 HTTP 프로토콜에서 클라이언트와 서버 간에 데이터를 주고받을 때, 다양한 콘텐츠 형식에 대한 협상과 표현 방식을 다루는 중요한 개념이다. 이들은 클라이언트와 서버 간의 상호 작용에서 가장 적합한 콘텐츠 형식을 선택하는 데 도움을 주며, 사용자에게 최적화된 경험을 제공한다.

 

 - 콘텐츠 협상(Content Negotiation)

 콘텐츠 협상은 클라이언트와 서버 간에 적절한 콘텐츠 형식을 선택하기 위한 과정이다. 클라이언트가 요청을 보낼 때, 서버는 요청에 맞는 콘텐츠 형식을 협상하고, 가장 적합한 형식을 선택하여 응답한다. 이를 통해, 서버는 여러 가지 콘텐츠 형식 중에서 클라이언트가 수용할 수 있는 형식을 선택할 수 있다.

 

 - 콘텐츠 협상의 유형

언어 협상
(Language Negotiation)
클라이언트는 Accept-Language 헤더를 통해 선호하는 언어를 서버에 전달함.
서버는 이 정보를 바탕으로 적절한 언어로 된 콘텐츠를 반환함.
미디어 유형 협상
(Media Type Negotiation)
클라이언트는 Accept 헤더를 사용하여 지원 가능한 미디어 타입을 지정함.
서버는 이 정보를 바탕으로 적합한 콘텐츠 타입을 반환함.
인코딩 협상
(Encoding Negotiation)
클라이언트는 Accept-Encoding 헤더를 통해 지원 가능한 콘텐츠 인코딩 방법을 서버에 전달함.
서버는 해당 인코딩 방법으로 콘텐츠를 압축하거나 변환하여 응답함.
캐릭터셋 협상
(Charset Negotiation)
클라이언트는 Accept-Charset 헤더를 사용하여 수용 가능한 문자 집합을 지정함.
서버는 이 정보를 바탕으로 적합한 문자 인코딩을 선택하여 응답함.

 

- 콘텐츠 협상 과정

  1. 클라이언트는 요청 시 Accept와 관련된 헤더를 서버로 전송하여 원하는 콘텐츠 형식에 대한 정보를 제공한다.
  2. 서버는 클라이언트의 요청을 분석하고, 클라이언트가 수용할 수 있는 형식 중에서 가장 적합한 콘텐츠를 선택하여 응답한다.
  3. 서버는 Content-Type 헤더를 통해 반환할 콘텐츠의 형식을 명시한다.

 

- 콘텐츠 표현(Representation)

 콘텐츠 표현은 서버에서 클라이언트로 전송되는 데이터의 형태나 형식을 말한다. 클라이언트는 서버로부터 다양한 형식의 데이터를 받을 수 있으며, 각 형식은 특정 목적에 맞게 표현된다.

 

 - 콘텐츠 표현의 주요 요소

미디어 타입(Media Type) 클라이언트가 받아들일 수 있는 콘텐츠의 형식을 정의하는 중요한 요소임.
ex. 텍스트 파일, 이미지, 비디오 등 다양한 미디어 타입이 존재함.
문서 형식(Document Format) HTML, XML, JSON, CSV 등 다양한 문서 형식은 콘텐츠 표현의 하나로, 서버는 클라이언트의 요청에 맞는 문서 형식으로 콘텐츠를 변환하여 응답함.
인코딩(Encoding) 데이터를 전송할 때의 압축 또는 변환 방식임.
클라이언트는 Accept-Encoding 헤더를 통해 자신이 수용할 수 있는 인코딩 방법을 서버에 전달하고, 서버는 이를 바탕으로 데이터를 압축하거나 변환하여 응답함.

 

 

- 콘텐츠 표현 예시

  • HTML 페이지 : Content-Type: text/html로 반환되며, 웹 브라우저에서 사람이 읽을 수 있는 형태로 표현된다.
  • JSON 데이터 : Content-Type: application/json으로 반환되며, 주로 API 응답에 사용됩니다. 데이터를 프로그램적으로 처리하는 데 유용한 형식이다.
  • 이미지 : Content-Type: image/png 또는 Content-Type: image/jpeg로 반환되며, 이미지를 웹 브라우저나 다른 이미지 뷰어에서 표현할 수 있다.

- 콘텐츠 협상과 표현의 중요성

 

  • 사용자 경험 향상: 클라이언트가 선호하는 형식과 언어로 콘텐츠를 제공함으로써, 더 나은 사용자 경험을 제공한다.
  • 성능 최적화: 클라이언트의 요청에 맞춰 압축된 콘텐츠를 제공하면, 네트워크 트래픽을 줄이고 성능을 향상시킬 수 있다.
  • 유연한 서비스 제공: 서버는 다양한 형식의 데이터를 지원할 수 있으며, 클라이언트의 요청에 맞춰 적절한 콘텐츠를 동적으로 선택하고 제공할 수 있다.

 

 

 웹 애플리케이션에서 HTTP 헤더, 캐시, 그리고 쿠키는 중요한 역할을 하며, 각각은 웹 상에서의 효율적인 데이터 처리와 사용자 경험 향상을 위한 핵심 기술이다. HTTP 헤더는 클라이언트와 서버 간의 통신에서 필요한 메타데이터를 전달하고, 캐시는 자주 요청되는 리소스를 효율적으로 저장하여 성능을 향상시킨다. 또한, 쿠키는 웹 애플리케이션에서 사용자 상태를 유지하고 맞춤형 서비스를 제공하는 데 필수적인 도구로 활용된다. 이러한 기술들이 적절히 적용되면 웹 애플리케이션의 속도와 안정성을 높일 수 있으며, 사용자에게 더욱 쾌적한 환경을 제공할 수 있다. 이와 같은 기술들이 상호작용하며, 오늘날의 복잡한 웹 환경에서 중요한 역할을 하는 요소들임을 이해하는 것은 웹 개발 및 최적화에 큰 도움이 된다.

 

 

728x90