📌 이 포스팅에서는 HTTP의 Header의 field 속성에 대해 정리하였습니다.
🔥 Header 란?
🔥 표현(representation)과 관련된 Header
🔥 콘텐츠 협상과 관련된 Header
🔥 특별한 정보와 관련된 Header
✔️ HTTP 메시지 구조에는 start-line, header, empty-line, message body로 나뉘어져있다.
✔️ 이 중 header에는 HTTP 메시지와 관련한 모든 부가 정보(인증, 브라우저 정보, 압축, 캐기 관리 정보, 메시지 크기 등...)를 담는 공간이다.
✔️ header의 구조는 field-name: field-value
의 쌍으로 이뤄져 있다. 예를들어, Content-Type: text/html;charset=UTF-8, Content-Length: 3434 이 부분들이 header의 필드이름과 필드값의 쌍 구조이다.
✔️ 참고로 field-name은 대소문자를 구분하지 않지만, field-value는 대소문자를 구분한다.
✔️ 과거 RFC2616 스펙에서는 header의 종류 중 entity header라하여 message body 중 entity body의 데이터를 해석할 수 있는 정보(데이터 유형, 데이터 길이, 압축 정보 등)가 담겨있었으나, 2014년 개선된 RFC7320~7235 스펙이 등장하면서 entity 개념은 폐기되고, 표현(representation)이라는 개념으로 대체되었다.
✔️ 표현(representation)은 표현 데이터를 해석할 수 있는 정보인 "표현 메타정보(representation metadata)"와 요청이나 응답에서 실제 body를 통해 전달할 데이터인 "표현 정보(representation data)"를 합친 개념을 의미한다.
✔️ 이에 현재 스펙에서는 표현 헤더에서 표현 메타정보(데이터 유형, 데이터 길이, 압축 정보 등) 전달하게 되었다.
✔️ Content-Type은 표현 데이터의 형식을 지정하는 field-name으로 message body의 표현 정보가 어떤 유형인지 설명한다.
✔️ field-value로는 "text-html; charset=urf-8", "application/json", "image/png" 등이 사용된다.
✔️ Content-Encoding는 표현 데이터의 압축 방식을 지정하는 field로 표현 데이터를 압축하기 위해 사용된 인코딩 정보를 나타낸다.
✔️ 즉, 서버에서 클라이언트로 body에 데이터를 담아 응답할 때, 데이터를 압축하였다면 이 정보를 통해 클라이언트에서 서버가 어떤 방식으로 압축을 했는지 인지하고 압축을 해제하여 데이터를 사용할 수 있게된다.
✔️ field-value로 "gzip", "deflate", "indetity" 등이 있고, "indetity"는 압축을 안한 순수한 상태를 의미한다.
✔️ Content-Language는 표현 데이터의 자연 언어에 대한 정보를 기입하는 field-name이다. field-value로 'ko', 'en', 'en-US' 등이 사용된다.
✔️ Conent negotiation은 협상과 관련된 Header로 클라이언트가 서버에게 원하는 표현 정보의 우선 순위를 명시하는 header이다. 이에 Conent negotiation는 request message에서만 사용한다.
✔️ Conent negotiation은 Accept, Accept-Charset, Accept-Encoding, Accept-Language 등이 있다. 서버는 이 heade 정보를 받아 최대한 요청에 따른 표현을 응답할 수 있도록 노력은하지만, 보장하진 않는다.
✔️ Accept : 클라이언트가 선호하는 미디어 타입을 전달
✔️ Accept-Charset : 클라이언트가 선호하는 문자 인코딩을 정보를 전달
✔️ Accept-Encoding : 클라이언트가 선호하는 압축 인코딩 정보를 전달
✔️ Accept-Language : 클라이언트가 선호하는 언어 정보를 전달
✔️ 협상을 위해 우선순위를 명시해 보낼 수 있다. Quality Values이라는 q값을 사용하여 우선 순위의 기준을 명시할 수 있다.
✔️ 우선 순위는 0~1까지 범위를 가지고, 숫자가 클수록 높은 우선순위를 가지며, q값이 생략되어 있으면 가장 높은 우선 순위이다.
✔️ 구체적으로 명시된 것을 우선으로 순위를 명시할 수도 있다.
✔️ Host : 클라이언트에서 요청한 호스트 정보(도메인)로 필수값이다.
✔️ Location : 3xx 응답 결과에 Location header가 존재하면 웹브라우저가 자동으로 Location 위치로 리다리렉트한다.
✔️ Allow : 허용 가능한 HTTP 메서드를 안내해주는 header로 "404 Method Not Alloed"의 응답에 포함된다.
✔️ Retry-After : "503 Service Unavailable"가 발생했을 때 서비스가 언제까지 불능인지 알려줄 때 사용하는 header 정보이다.