[NETWORK] HTTP 기본기 정리 (3) - HTTP 헤더 정리

한호성·2023년 10월 24일

네트워크-HTTP

목록 보기
3/4

Introduction

이전 글에 이어서, HTTP 강의를 듣고 정리해야할 부분 이어서 정리하도록 하겠습니다. 이번 글은 HTTP 헤더에 관해서 어떤 헤더가 있고 역할은 무엇인지 알아보도록 하겠습니다.

Index

  • HTTP 헤더 스팩 변화
  • HTTP 헤더 들의 종류와 예시

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 변화가 생겼습니다.

  • 엔티티가 -> 표현으로 바뀌었습니다.
    - Representation = Representation-header + Represnetation-Data

cf) 표현이라는 단어를 사용하게 된 이유에 대한 개인생각
(리소스를 전달하는 방식의 차이가 있기 때문에 표현이라는 단어를 사용했다고 생각이 들었습니다.
예를들어 설명하자면, 리소스가 html 표현으로 전달될 수도 있고, json,xml 기타 등등 다른 여러가지 표현 방식으로 전달될 수 있기 때문에 표현이라는 단어를 쓰지 않았나 생각합니다..)

HTTP 헤더 들의 종류와 예시


이제 RFC723X 스팩에 맞는 표현과 관련된 헤더들을 알아보겠습니다.

표현에 관한 헤더 입니다.

한번 정리하면서 상세하고 알아보도록 하겠습니다.

  • Content-Type: 표현 데이터의 형

    • 말 그대로 표현 데이터를 어떻게 전달할 것인가를 나타낸다.

    • 미디어 타입, 문자인코딩
      ex) text/htm; charset=utf-8
      ex) application/json
      ex) image/png

      예시를 보면 http를 사용했던 분이라면, 조금 더 빨리 이해할거 같습니다.

  • Content-Encoding: 표현 데이터의 압축 방식

    • 데이터를 전달하는 곳에서 압축 후 인코딩 헤더 추가
    • 데이터를 읽는 쪽에서 인코딩 헤더의 정보로 압축 해제
    • 표현 데이터를 압축하기 위해 사용
      ex) gzip,deflate,identity
  • Content-Language: 표현 데이터의 자연 언어

    • 표현 데이터의 자연 언어를 표현

      ex) ko,en,en-US

  • Content-Length: 표현 데이터의 길이

    • 바이트 단위로 표현 데이터의 길이를 나타냅니다.
    • Transfer-Encoding(전송 인코딩)사용하면 이 헤더는 사용하면 안된다
      고 합니다... (어떤상황이지..?)

위의 설명된 표현 헤더들은 requset,response에 둘다 사용합니다.

협상에 관한 헤더들입니다.

서버에게 데이터를 요청할 때, "이런 것들을 기반으로 내려줘!"의 의미를 갖는 헤더들입니다. 한번 알아보겠습니다.

  • Accept : 클라이언트가 선호하는 미디어 타입 전달

  • Accept-Charset: 클라이언트가 선호하는 문자 인코딩

  • Accept-Encoding: 클라이언트가 선호하는 압축 인코딩

  • Accpet-Language: 클라이언트가 선호하는 자연 언어

cf) 협상의 우선순위

협상에 관해 우선순위를 결정지을 때, 여러 규칙들이 있습니다.

첫번째로, 우선순위 값이 높은 정보를 데이터 받을 때, 우선적으로 받는다.

협상에 관한 헤더들은 헤더값을 보낼 때, 우선순위를 적어서 보낼 수 있습니다.

우선순위의 의미는, 서버가 보내줄 수 데이터들이 여러 개가 있다면, 우선순위가 가장 높은 것을 달라는 의미입니다.

우선순위는 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에만 사용합니다
(의미를 생각하면 당연하다고 느낄 것입니다.)

전송방식에 관한 헤더들입니다.

전송방식과 관련된 헤더들은 다음고 같습니다.

  • 단순전송 : Content-Length - 전달하는 content의 바이트를 값으로 갖음, 한번에 데이터를 보낸는 것을 의미
  • 압축전송 : Content-Encoding - 데이터를 압축해서 보내는데 어떤식으로 압축해서 보내는가를 나타냄
  • 분할전송 : Transfer-Encoding - 데이터를 나누어서 보내는 것을 의미함. (content-length 헤더와 같이 사용x)
    - ex) 5(crlf)hello 5byte짜리 헬로를 보낸다는 의미
  • 범위전송 : Range, Content-Range - 받고싶은 데이터의 시작과 끝을 알려줘서 그 부분만 받는 방식

기본정보에 관한 헤더들입니다.

  • 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 ...

쿠키에 관한 헤더들입니다.

  • Set-Cookie: 서버에서 클라이언트로 쿠키 전달
  • Cookie : 클라이언트가 서버에서 받은 쿠키를 저장하고, HTTP 요청시 서버로 전달

쿠키와 관련된 내용은 따로 빼서 정리해보도록 하겠습니다 :)

Reference

모든 개발자를 위한 HTTP 웹 기본지식

profile
개발자 지망생입니다.

0개의 댓글