Header filed 작성 문법
📋 field-name(아래에서는 Host) ” : “ OWS field-value OWS (ows : 띄어쓰기 허용)
HTTP 헤더는 HTTP 전송에 필요한 모든 부가정보를 담고있습니다.
ex) 메세지 바디의 내용, 메세지 바디의 크기, 압축, 인증, 요청 클라이언트, 서버 정보, 캐시 관리 정보 등
대표적인 용도는 아래와 같습니다.
- 컨텐츠 관련 헤더: 컨텐츠 유형(Content-Type), 컨텐츠 길이(Content-Length) 등의 정보를 포함합니다.
- 캐시 관련 헤더: 캐시의 동작을 제어하는 헤더로, 캐시 지시자(Cache-Control), 만료 날짜(Expires) 등을 포함합니다.
- 인증과 보안 관련 헤더: 사용자 인증과 보안에 관련된 정보를 담고 있으며, Authorization, Set-Cookie 등이 있습니다.
- 요청과 응답 관련 헤더: 요청과 응답의 상태와 메타 정보를 포함합니다. 예를 들어, Accept-Language, User-Agent 등이 있습니다.
- 리다이렉션 관련 헤더: 리다이렉션 정보를 제공하는 헤더로, Location, Refresh 등이 있습니다.
- 요청 조건 관련 헤더: 서버에게 요청에 대한 조건을 지정하는 헤더로, If-Modified-Since, If-None-Match 등이 있습니다.
- 프록시 관련 헤더: 프록시 서버 동작을 제어하는 헤더로, Via, Proxy-Authenticate 등이 있습니다.
메세지 본문 (message Body)을 통해 표현 데이터를 전달합니다. 표현은 요청이나 응답에서 전달할 실제 데이터이며, 표현 헤더는 표현 데이터를 해석할 수 있는 정보를 제공합니다. (데이터 유형(html, json), 데이터 길이, 압축 정보 등) / 표현 헤더는 전송, 응답 둘 다에서 사용이 가능합니다.
📋 HTTP 헤더의 종류 1. 표현 헤더 & 표현 데이터
표현 헤더(Representation Header)는 HTTP 응답 메시지의 헤더 부분에 포함되는 정보로, 서버가 클라이언트에게 제공하는 리소스(Representation)의 특성을 설명합니다. 표현 헤더는 리소스 자체의 특성이나 리소스와 관련된 메타데이터 등을 포함하며, 클라이언트는 이를 통해 리소스를 적절하게 해석하고 처리할 수 있습니다.
- Content-Type : 응답 본문(페이로드)의 미디어 타입을 지정합니다. 이 헤더는 서버가 클라이언트에게 전달하는 컨텐츠의 종류를 나타냅니다. 예를 들어, "Content-Type: application/json"은 응답 본문이 JSON 형식임을 나타냅니다.
- Content-Length : 응답 본문의 길이를 바이트 단위로 지정합니다. 이 헤더는 클라이언트가 응답 본문의 크기를 미리 알 수 있도록 합니다.
- Content-Encoding : 응답 본문의 압축 방식을 지정합니다. 클라이언트는 이 헤더를 통해 응답 본문이 압축되어 있다면 이를 해제하여 사용할 수 있습니다. 데이터를 읽는 쪽에서 인코딩 헤더의 정보로 압축을 해제합니다. ex) gzip , deflate, identity
- Content-Language : 응답 본문의 언어를 지정합니다. 클라이언트는 이 헤더를 통해 응답 본문의 언어를 인식하여 적절히 표시할 수 있습니다. 표현 데이터의 자연언어를 표현합니다. ex) ko, en, en-US 국가별 공식 사이트에 접속하면 자기한테 맞는 언어로 변경 시에 확인할 수 있습니다.
표현 헤더는 클라이언트와 서버 간의 컨텐츠 교환에 중요한 역할을 수행하며, 클라이언트는 이러한 헤더를 이해하고 적절히 활용하여 리소스를 처리합니다.
📋 HTTP 헤더의 종류 2. 협상 헤더 (Content Negotitation)
협상 헤더(Content Negotiation) 는 클라이언트와 서버 간에 어떤 컨텐츠 타입(미디어 타입)을 사용할 것인지 협상하기 위해 사용되는 HTTP 헤더입니다. 클라이언트가 요청한 리소스에 대해 서버가 여러 형식의 컨텐츠를 가지고 있을 때, 클라이언트가 선호하는 컨텐츠 타입을 알려주고 서버는 해당 요청에 가장 적합한 컨텐츠 타입을 선택하여 응답합니다.
- Accept: 클라이언트가 선호하는 컨텐츠 타입을 지정합니다. 예를 들어, "Accept: application/json"은 클라이언트가 JSON 형식의 컨텐츠를 선호한다는 것을 의미합니다.
- Accept-Charset : 클라이언트가 선호하는 문자 인코딩을 지정합니다.
- Accept-Language: 클라이언트가 선호하는 언어를 지정합니다. 서버는 이를 참고하여 적절한 언어로 된 컨텐츠를 선택하여 응답합니다. Quality Values 또는 Q-values는 HTTP 요청 및 응답 헤더에서 사용되는 매개변수로, 클라이언트가 선호하는 콘텐츠 유형 또는 언어를 표현하는 데 사용됩니다.
Quality Value는 0과 1 사이의 실수 값으로 표현되며, 1에 가까울수록 클라이언트가 해당 미디어 타입을 더 선호한다는 것을 나타냅니다. 예를 들어, Accept: application/json;q=0.8, text/html;q=0.9 는 클라이언트가 JSON을 0.8의 우선 순위로, HTML을 0.9의 우선 순위(더 높은 우선순위)로 선호한다는 것을 나타냅니다. - Accept-Encoding: 클라이언트가 선호하는 컨텐츠 압축 방식을 지정합니다. 서버가 지원하는 압축 방식 중에서 클라이언트가 선호하는 방식을 선택하여 압축된 컨텐츠를 제공할 수 있습니다.
협상 헤더를 사용하면 클라이언트는 자신이 원하는 컨텐츠 타입이나 언어 등을 명시하여 서버에 전달할 수 있습니다. 서버는 클라이언트의 요청을 기반으로 적절한 형식의 컨텐츠를 선택하여 응답하므로, 클라이언트와 서버 간의 상호작용이 더 유연해집니다. 이를 통해 다국어 지원, 다양한 미디어 타입 지원 등을 할 수 있습니다.
✍️ HTTP 전송 방식
- 압축 전송(Compression Transfer) : 압축 전송은 HTTP 메시지를 클라이언트와 서버 간에 압축하여 전송하는 방식입니다. 이를 통해 데이터의 크기를 줄이고 전송 시간과 대역폭을 절약할 수 있습니다. 일반적으로 클라이언트가 요청 헤더에 “Content-Encoding"을 지정하여 어떤 압축 알고리즘을 지원하는지 서버에 알려주고, 서버는 해당 알고리즘 중에서 선택하여 압축하여 응답을 전송합니다. 대표적으로 gzip과 deflate 압축 알고리즘이 사용됩니다.
- 분할 전송(Chunked Transfer) : 분할 전송은 큰 크기의 데이터를 여러 개의 작은 조각(Chunk)으로 나누어 전송하는 방식입니다. 이를 통해 데이터가 일부분만 도착해도 빠르게 전송되어 사용자 경험을 향상시킬 수 있습니다. 일반적으로 서버가 요청 헤더에 "Transfer-Encoding: chunked"를 포함하여 응답을 분할 전송한다고 알려주며, 클라이언트는 이를 확인하고 조각별로 데이터를 수신합니다.
- 단순 전송(Simple Transfer) : 단순 전송은 HTTP 메시지를 그대로 전송하는 방식입니다. 압축이나 분할 없이 요청과 응답을 전체적으로 그대로 전송합니다. 일반적으로 압축이나 분할이 필요하지 않을 경우에 사용됩니다.
- 범위 전송(Range Request) : HTTP 요청에서 클라이언트가 서버로부터 원하는 리소스의 특정 범위만을 요청하는 기능입니다. 클라이언트가 요청 헤더에 "Range"를 지정하여 원하는 범위를 표시하고, 서버는 해당 범위만을 응답으로 보내주는 방식으로 동작합니다.
'[HTTP]' 카테고리의 다른 글
[HTTP] HTTP 헤더 2 - 캐시와 조건부 요청 (0) | 2023.08.01 |
---|---|
[HTTP] HTTP 헤더 정보 (0) | 2023.07.30 |
[HTTP] HTTP 상태 코드 (0) | 2023.07.26 |
[HTTP] HTTP 메서드의 속성 (0) | 2023.07.15 |
[HTTP] Resource & HTTP 메서드 (0) | 2023.07.07 |