이전 글에 이어서, HTTP 강의를 듣고 정리해야할 부분 이어서 정리하도록 하겠습니다. 이번 글은 HTTP 헤더에 관해서 어떤 헤더가 있고 역할은 무엇인지 알아보도록 하겠습니다.
Index
- HTTP 헤더 스팩 변화
- HTTP 헤더 들의 종류와 예시
이전 글에서 봤던 HTTP 메시지 스팩을 다시 보고 가겠습니다.
header-field = filed-name":"OWS filed-value OWS 입니다.
(OWS 는 띄어쓰기 허용의 의미를 갖고, ":"은 filed-name과 붙어 있어야합니다.)
RFC2616 기준으로한 헤더의 분류는 다음과 같습니다.(폐기됨..)
General 헤더 : 메시지 전채에 적용되는 정보 ex) Connection: close
Requst 헤더 : 요청 정보 ex) User-Agent:Mozilla/5.0
Response 헤더: 응답정보 ex) Server: Apache
Entity 헤더: 엔티티 바디 정보 ex) Contet-Type:text/ html
현재 RFC 스펙이 변경되어서 RFC723X 변화가 생겼습니다.
cf) 표현이라는 단어를 사용하게 된 이유에 대한 개인생각
(리소스를 전달하는 방식의 차이가 있기 때문에 표현이라는 단어를 사용했다고 생각이 들었습니다.
예를들어 설명하자면, 리소스가 html 표현으로 전달될 수도 있고, json,xml 기타 등등 다른 여러가지 표현 방식으로 전달될 수 있기 때문에 표현이라는 단어를 쓰지 않았나 생각합니다..)
이제 RFC723X 스팩에 맞는 표현과 관련된 헤더들을 알아보겠습니다.
한번 정리하면서 상세하고 알아보도록 하겠습니다.
Content-Type: 표현 데이터의 형
말 그대로 표현 데이터를 어떻게 전달할 것인가를 나타낸다.
미디어 타입, 문자인코딩
ex) text/htm; charset=utf-8
ex) application/json
ex) image/png
예시를 보면 http를 사용했던 분이라면, 조금 더 빨리 이해할거 같습니다.
Content-Encoding: 표현 데이터의 압축 방식
Content-Language: 표현 데이터의 자연 언어
표현 데이터의 자연 언어를 표현
ex) ko,en,en-US
Content-Length: 표현 데이터의 길이
위의 설명된 표현 헤더들은 requset,response에 둘다 사용합니다.
서버에게 데이터를 요청할 때, "이런 것들을 기반으로 내려줘!"의 의미를 갖는 헤더들입니다. 한번 알아보겠습니다.
Accept : 클라이언트가 선호하는 미디어 타입 전달
Accept-Charset: 클라이언트가 선호하는 문자 인코딩
Accept-Encoding: 클라이언트가 선호하는 압축 인코딩
Accpet-Language: 클라이언트가 선호하는 자연 언어
협상에 관해 우선순위를 결정지을 때, 여러 규칙들이 있습니다.
첫번째로, 우선순위 값이 높은 정보를 데이터 받을 때, 우선적으로 받는다.
협상에 관한 헤더들은 헤더값을 보낼 때, 우선순위를 적어서 보낼 수 있습니다.
우선순위의 의미는, 서버가 보내줄 수 데이터들이 여러 개가 있다면, 우선순위가 가장 높은 것을 달라는 의미입니다.
우선순위는 q라는 기호를 사용하고 0~1사이의 값을 두고, 생략하면 1의 값을 갖게됩니다. 높을수록 우선순위가 큰 것입니다.
예시를 통해 알아봅시다.
다음과 같은 헤더가 있습니다.
Accept-Language를: ko;q=0.9,en-Us;q=0.8;en;q=0.7
이 Accept-Language 헤더는 ko를 1순위 en-US 2순위 en 3순위로 데이터를 받겠다는 의미입니다.
만약 서버가 en-US,en만 보낼 수 있다고 하면, en-US에 해당하는 데이터를 내려줄 것입니다.
두번째로, 구체적인 Header의 내용들이 우선순위가 높습니다.
예를들어 보겠습니다.
다음과 같은 헤더들이 있습니다.
Accept: text/*, text/plain, text/palin;format=flowed, */*
이럴 경우 구체적으로 작성한 순서로 나열해보겠습니다.
1 text/palin;format=flowed
2 text.plain
3 text/*
4 /
위의 순서로 데이터를 받는것을 우선한다고 Server에 알려주는 것 입니다.
협상 헤더는 request에만 사용합니다
(의미를 생각하면 당연하다고 느낄 것입니다.)
전송방식과 관련된 헤더들은 다음고 같습니다.
Referer: 이전 웹페이지 주소를 나타냄, 새로운 페이지를 요청했을 때, 이전 페이지의 정보를 나타냄
User-Agent: 유저 에이전트 어플리케이션 정보 (웹브라우저 정보, 기타 등등), 통계정보에 유의미한 헤더
Server : 요청을 처리하는 Origin 서버의 소프트웨어 정보(거쳐가는 서버가 아니라 실제 데이터를 내려주는 서버의 정보를 나타냄) , Response에서만 사용
Date : 메시지가 발생한 날짜와 시간 , Response 에서만 사용
Host : 필수 값이며, Requst 시 사용,
#cf) Host란 컴퓨터에 네트워크가 연결되어 있는 모든것들을 Host라고 나타냅니다.
Location : 페이지 리다이렉션, 웹브라우저는 3xx응답의 결과에 Location 헤더가 있을시, Location 위치로 자동 redirection 한다.
#cf) 201응답일 경우 생성된 Resource의 주소입니다.
Allow: 허용 가능한 HTTP 메소드를 나타냄 , 405(Method Not Allowed) 에서 응답에 포함
Retry-After: 유저 에이전트(클라이언트)가 언제까지 불능인지 알려줄 수 있음
Authorization: 클라이언트 인증 정보를 서버에 전달
ex) Authorization: Bearer {jwt토큰}
WWW-Authenticate: 리소스 접근시 필요한 인증방법 정의, 401응답과 함께 사용
ex) WWW-Authenticate: Newauth realm="apps", type1 ...
쿠키와 관련된 내용은 따로 빼서 정리해보도록 하겠습니다 :)