HTTP 헤더

바그다드·2023년 3월 11일
0

헤더

header-field = field-name ":" OWS field-value OWS (OWS:띄어쓰기 허용)

  • Host: www.google.com
  • field-name : Host
  • field-value : www.google.com
    - field-name과 ":" 사이에는 공백이 들어가면 안됨

용도

  • HTTP 전송에 필요한 모든 부가정보
    • Content-Type: text/html;charset=UTF-8
    • Content-Length: 3423
  • 표준 헤더는 엄청 많음
  • 헤더를 임의로 생성할 수 있으나, 클라이언트와 서버간에 약속이 필요함

참고. HTTP 헤더 - RFC2616(과거)

  • 현재는 폐기됨(참고만 하자)
  • General 헤더: 메시지 전체에 적용되는 정보
  • Request 헤더: 요청 관련 정보(브라우저 정보 등)
  • Response 헤더 : 응답 관련 정보(서버 종류 등)
  • Entity 헤더 : 엔티티 바디 정보(메세지 바디에 담긴 엔티티 관련 정보)
  • 메세지 본문에는 실제 엔티티 본문이 담김
  • 엔티티 본문은 요청이나 응답 시에 전달할 실제 데이터
  • 엔티티 헤더는 엔티티 본문을 해석할 수 있는 정보 제공
    • 데이터 유형, 길이, 압축 정보 등

HTTP 헤더 - RFC723x

엔티티라는 단어 대신 표현을 사용
표현(Representation) = 표현 메타데이터(Metadata) + 표현 데이터(Data)

  • 메세지 본문을 통해 표현 데이터 전달
  • 페이로드 = 메세지 본문
  • 표현 = 요청이나 응답에서 전달할 실제 데이터
  • 표현 헤더 = 표현 데이터를 해석할 수 있는 정보 제공
    • 데이터 유형, 길이, 압충 정보 등

표현

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

  • text/html;charsert=UTF-8
  • application/json 등 데이터의 종류

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

  • 데이터 전송측에서 압축 후 인코딩 헤더 추가
  • 받는 쪽에서 인코딩 헤더를 확인 후 압축 해제

Content-Language : 표현 데이터 언어

  • 표현 데이터의 자연 언어

Content-Length : 표현 데이터 길이

  • 바이트단위의 길이

협상(Content Negotiation)

클라이언트가 선호하는 표현을 서버에 요청

  1. Accept : 클라이언트가 선호하는 미디어(콘텐츠) 타입 전달
  2. Accept-Charset : 클라이언트가 선호하는 문자 인코딩
  3. Accept-Encoding : 클라이언트가 선호하는 압축 방식
  4. Accept-Language : 클라이언트가 선호하는 언어
  • 협상 헤더는 요청에서만 사용

협상의 우선순위

  • q(Quelity Value)를 사용
  • 0~1 사이의 값으로 1에 가까울 수록 우선순위가 높음
  • 생략하면 1
  • ex) 선호 언어로 한국어(1순위)와 영어(2순위)를 요청했는데
    서버의 기본 언어가 독일어(1순위)고 2순위가 영어라면?
    Accept-Language: ko-KR,ko;q=0.9,en-US;q=0.8,en;q=0.7
    - Accept-Language = 헤더의 필드 네임
    - ko-KR = 생략 했으니 1
    우선순위에 따라 영어 선택
  • 구체적인 조건이 우선순위가 높음
  • ex) Accept: text/,text/plain;format=flowed
    1 순위 : text/

    2 순위 : text/plain;format=flowed
  • 구체적인 것을 기준으로 미디어 타입을 맞춘다.

전송 방식

1. 단순 전송

  • 콘텐츠의 길이를 알고 있을 때 사용

2. 압축 전송

  • 페이로드 메세지를 압축해서 전송

3. 분할 전송

  • 페이로드를 쪼개서 하나씩 전송

4. 범위 전송

  • 특정 범위만 전송

일반 정보

1. From

유저 에이전트의 이메일 정보

  • 요청에서 사용
  • 잘 사용하지 않음

2. Referer

이전 웹 페이지 주소

  • 유입 경로를 분석할 때 사용
  • 요청에서 사용
  • 예를 들어 www.google.com에서 www.naver.com으로 이동을 했다면
    Referer = www.google.com

3. User-Agent

유저 에이전트 어플리케이션 정보

  • 웹 브라우저 정보 등등
  • 요청에서 사용
  • 어떤 종류의 브라우저에서 에러가 발생하는지 파악 가능

4. Server

요청을 처리하는 서버의 소프트웨어 정보

  • 응답에서 사용
  • ex) Server: Apache/2.2.22 (Debian)

5. Date

메세지 발생 날짜와 시간

  • 응답에서 사용

특별한 정보

1. HOST

요청에서 어떤 호스트(도메인)을 요청했는지에 대한 정보

  • 하나의 서버에 여러 개의 도메인이 있을 때

2. Location

페이지 리디렉션

  • 201 created에서는 생성된 리소스의 uri
  • 3xx 에서는 리디렉션할 위치

3. Allow

허용 가능한 HTTP 메서드

  • 405 (Method Not Allowed) 응답에 포함
  • ex) Allow: GET

4. Retry-After

503 메세지에서 서비스가 언제까지 불능인지 알려줌

  • Retry-After: Fri, 31 Dec 1999 23:59:59 GMT (날짜 표기)
  • Retry-After: 120 (초단위 표기)

5. Authorization

클라이언트의 인증 정보를 서버에 전달

  • ex) Authorization: Basic xxxxxxxxxxxxxxxx

6. WWW-Authenticate

인증 방법에 대한 설명

  • 401 nauthorized에서 사용(응답)
  • ex) WWW-Authenticate: Newauth realm="apps", type=1,
    title="Login to \"apps\"", Basic realm="simple"

출처 : 링크텍스트

profile
꾸준히 하자!

0개의 댓글