Notice
Recent Posts
Recent Comments
Link
S E P H ' S
[Network] 5. HTTP 헤더 본문
HTTP 헤더
header-field = field-name":"OWS field-value OWS
- HTTP 전송에 필요한 모든 부가정보를 담는 용도로 사용된다.
- 스펙에 정의된 헤더 뿐 아니라 임의의 헤더 추가도 가능하다.
표현(Representation)
- 과거 RFC2616 스펙에서는 엔티티 헤더, 엔티티 본문 등으로 불리던 HTTP 헤더와 바디는 2014년부터 개정된 RFC2730 ~ 7235 부터는 표현(Representation) 이라는 용어로 불리게 되었다.
- HTTP 헤더는 표현 헤더, HTTP Message Body는 표현 데이터라 부른다.
표현 헤더
전송, 응답 양측에서 사용이 가능한 정보로 서버/클라이언트 간에 송/수신할 때 해당 정보로 무엇을 어떻게 표현할지에 대해 알려주고 표현한다. 이는 표현 헤더보다는 Payload 헤더라 부르는게 더 명확하지만 그냥 표현 헤더라고 해도 무방하다.
Content-Type
표현 데이터의 형식 정보를 설명한다.
- text/html;charset=utf8, aplication/json, image/png ...
- 클라이언트(웹 브라우저)는 이 Content-Type을 보고 표현 데이터를 적절히 렌더링한다.
Content-Encoding
표현데이터의 인코딩을 설명한다.
- gzip, deflate, identity
- 서버 및 클라이언트 양측에서 사용할 수 있는 정보다.
- 데이터를 받는 측에서는 해당 정보를 보고 압축을 해제하여 데이터를 읽는다.
- 데이터를 전달하는 측에서는 해당 데이터를 압축 후 압축 형식을 헤더에 추가한다.
Content-Language
표현 데이터의 자연 언어를 설명한다.
- ko, en, en-US, de, ...
- 서버측에서 지원을 한다는 가정하에 해당 언어로 응답을 받을 수 있다.
Content-Length
표현 데이터의 길이를 설명한다.
- 바이트 단위이다.
- Transfer-Encoding(전송 코딩)을 사용하면 내부에 Content-Length 정보도 포함되어 있기에 헤더 필드를 사용하면 안된다.
콘텐츠 협상
클라이언트에서 선호하는 표현에 대해 작성하여 서버에게 전달을 할 수가 있는데, 이 정보들을 토대로 서버측에서는 우선순위에 맞춰 지원이 가능한 범위까지 표현 데이터를 만들어 클라이언트에게 제공하도록 하는 정보이다.
Accept-Language
클라이언트에서 우선적으로 선호하는 자연 언어에 대한 정보를 담는다. 서버측에서는 다국어를 지원한다는 가정하에 해당 정보를 읽고 우선순위대로 지원 여부에 따라 가장 높은 우선순위의 언어로 표현데이터를 작성해 응답한다.
우선순위
콘텐츠 협상이라는 말 그대로 클라이언트는 자신이 요구하는 언어나 포맷등이 하나로 단일적이지 않고 우선순위에 따라 데이터를 요청할 수 있는데 이런 우선순위를 작성하는 방식은 어떻게 될까?
- q(quality) 필드 사용
- Accept-Language: ko-KR,ko;q=0.9, en-US;q=0.8, en;q=0,7
- 0~1 사이의 값을 q의 값으로 작성하며 1과 가까울 수록 우선순위가 높다.
- 우선 순위가 1인 경우 해당 정보는 생략 가능
- 정보의 구체화
- 정보를 구체적으로 작성할 수록 우선순위는 높아진다.
- Accept: text/*, text/plain, text/plain;format=flowed, */*
- text/plain;format=flowed
- text/plain
- text/*
- */*
일반 정보
- Referer : 이전 웹 페이지 주소로 요청에서 사용하며 유입경로 분석등에 사용한다.
- User-Agent : 클라이언트의 애플리케이션 정보로 클라이언트 장비 혹은 웹 브라우저등의 정보를 의미하며 요청에서 사용한다.
- Server : 요청을 처리하는 ORIGIN 서버의 소프트웨어 정보를 의미한다. 응답에서 사용한다.
- Date : 메세지가 발생한 날짜와 시간 정보이며 예전에는 요청과 응답 모두 사용되었지만 현재는 응답에서만 사용한다.
특별한 정보
HOST
- 요청한 호스트(도메인) 정보를 의미.
- 요청에서 사용
- 필수 헤더
- 하나의 서버에서 여러 도메인을 가상 호스팅하거나, 하나의 IP 주소에 여러 도메인이 적용되어 있을때 필수적으로 필요한 정보
Location
- 응답에서 사용.
- 페이지 리다이렉션에 사용되는 정보
- 웹 브라우저에서 3XX 응답에 해당 정보가 있을 경우 자동 리다이렉션 한다.
- 201(Created)응답에서 Location은 리소스 생성 요청에 의해 생성된 리소스 식별자 URI이다.
Allow
- 해당 경로로 허용 가능한 HTTP 메소드 정보
- /members 라는 경로가 GET, POST, DELETE만 제공한다고 할 때 PATCH로 요청을 부낼 경우 다음과 같이 응답메시지가 구성된다.
- 405(Method Not Allowed)
- Allow : GET, POST, DELETE
Retry-After
- User-Agent가 다음 요청을 하기까지 기다려야 하는 시간
- 언제 요청을 받을 수 있을지 유추하기 힘들기 때문에 사용하기가 쉽지 않다.
- 503(Service Unavailable) 서비스가 언제까지 불가능한지 알려줄 수 있다.
- Retry-After: Fri, 31 Dec 1999 23:59:59 GMT(날짜 표기)
- Retry-After: 120(초단위 표기)
인증
Authorization
- 클라이언트 인증 정보를 서버에 전달한다.
- Authorization: Bearer xxx~~~~
- 인증 방식에 따라 전달해야 하는 값이 다르다.
WWW-Authentication
- 리소스 접근시 필요한 인증방법 정보
- 401 Unauthorized 상태코드와 함께 전달됨.
WWW-Authentication: Newauth realm="apps",
type=1,
title="Login to \"apps\"",
Basic realm="simple"
'CS > Network' 카테고리의 다른 글
[Network] HTTP 1.1 & 2.0 & 3.0 (0) | 2023.12.01 |
---|---|
[Network] 브라우저에 URL을 입력했을 때 발생하는 일들 (0) | 2023.11.30 |
[Network] 4. HTTP 메소드, 상태 코드 (0) | 2023.06.05 |
[Network] 3. HTTP 기본 (0) | 2023.06.05 |
[Network] 2. URI, URL, URN (0) | 2023.06.05 |