[http] http 헤더 - 1

bbidag ㅣ 2024. 1. 7. 16:07

반응형

http 헤더의 용도

  • http 전송에 필요한 모든 부가정보

 

헤더 분류

  • general 헤더
    • 메세지 전체 적용
    • ex) connection: close
  • request 헤더
    • 요청 정보
    • ex) User-Agent: Mozilla/5.0
  • response 헤더
    • 응답 정보
    • ex) Server: Apache
  • Entity
    • 전송할 메세지와 관련된 내용
    • 엔티티 헤더
      • 엔티티 헤더 엔티티 본문의 데이터를 해석할 수 있는 정보를 제공
      • 데이터 유형, 길이, 압축 정보
      • ex) Content-Type: text/html, Content-Length: 3423
    • 엔티티 바디
      • 메세지 전문
    • 스펙이 변경됨 : entity → representation
    • 표현 = 표현 메타데이터 + 표현 데이터
      • 엔티티 헤더 -> 표현 헤더
        엔티티 바디 -> 표현 데이터

표현

  • 표현 헤더는 요청, 응답 둘다 사용
  • content-type
    • 표현 데이터의 형식
    • 미디어 타입, 문자 인코딩
  • content-Encoding
    • 표현 데이터를 압축하기 위해 사용
    • 압축 후 인코딩 헤더 추가
  • content-language
    • 표현 데이터의 자연 언어
  • content-length
    • 바이트 단위
    • transfer-encoding을 사용하면 쓰면 안됨.

 

협상(컨텐츠 네고시에이션)

클라이언트가 선호하는 표현 요청을 의미함.

  • 우선순위에 맞춰서 만들어주게 서버가 고려할 수 있음
  • accept: 클라이언트 선호 미디어 타입
  • accept-charset: 문자 인코딩
  • accept-encoding: 압축 인코딩
  • accept-language: 자연 언어

 

적용 예시

  • 한국어 브라우저 사용
    • 서버가 en, ko를 지원하면 브라우저가 ko로 accept-language로 요청한다면
      서버가 ko 기준으로 응답을 내려주게 됨.
  • 복잡한 예시
    • 서버는 기본으로 독일어, 영어까지 지원한다.
    • 클라이언트는 한국어로 브라우저를 사용중
    • 이럴때? 우선순위를 지정하는 것이 좋다.
    • ex) 한국인이 아무래도 독일어보다는 영어가 좀 더 친숙하니 영어를 우선순위로 지정한다.

 

우선순위 1 - quality values

  • 우선순위를 값으로 지정함.
  • 클수록 높은 우선순위
  • 생략하면 1
  • ex) Accept-Language: ko-KR,ko;q=0.9,en-US;q=0.8,en;q=0.7
    1. ko-KR;q=1 (q생략)
    2. ko;q=0.9
    3. en-Us;q=0.8
    4. en;q=0.7

우선순위 2

  • 구체적인 것이 우선한다.
  • Accept: text/*, text/plain, text/plain;format=flowed, */*
    1. text/plain;format=flowed
    2. text/plain
    3. text/*
    4. */*

 

전송 방식

  • 단순 전송
    • 길이를 알고 값을 전달함.
    • ex) content-length: 3423
  • 압축 전송
    • content-encoding: gzip
    • content-length: 521
  • 분할 전송
    • Transfer-encoding: chucked
    5
    Hello
    5
    World
    0
    \\r\\n
    
    • content-length를 보내면 안됨.
  • 범위 전송
    • range, content-range
    • 요청에 대한 응답을 어디까지 받았는지 표시함.
    • Range: bytes=1001-2000 -> content-range: bytes=2001-3000

 

헤더 - 일반 정보

From

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

Referer

  • 이전 웹 페이지 주소
  • A → B 이동시 포함 요청
  • 이거로 서버는 유입 경로를 분석한다.
  • referer는 referrer의 오타이지만 수정안되고 사용중

User-Agent

  • 웹 브라우저, 클라이언트 애플리케이션 정보

Server

  • 요청을 처리하는 origin 서버의 소프트웨어 정보
  • 응답을 만들어주는 진짜 서버
  • Server: Apache/2.2.22

Date

  • 메세지 발생 날짜 시간

 

헤더 - 특별 정보

Host

  • 요청 호스트 정보
  • 필수!!
  • 한 ip를 가진 서버가 여러개의 도메인을 가질 수 있어서 대상 서비스 서버를 인식시키기 위해서 요청에 필수적으로 넣게 됨.

Location

  • 페이지 리다이렉션
  • 웹 브라우저는 3xx 결과 헤더에 Location이 있으면 Location으로 자동 이동함 대상 리소스를 가리킴

Allow

  • 허용 가능한 HTTP 메서드
  • 405 에서 사용 가능한 http 메소드를 내려줌

Retry-After

  • 유저 에이전트가 다음 요청까지 기다려야 하는 시간

 

인증

Authorization

  • 클라이언트 인증 정보를 서버에 전달
  • Authorization: Basic xxxx

WWW-Authenticate

  • 리소스 접근시 필요한 인증 방법
  • WWW-Authenticate: xxxx~~~

 

쿠키

  • 쿠키를 사용하기 위해 두 개의 헤더를 사용함
  • Set-Cookie
  • Cookie
  • http는 기본적으로 무상태 프로토콜임
    • 클라이언트가 다시 요청하면 서버는 이전 요청을 기억하지 못함
    • 상태를 저장하기 위한 방법으로 쿠키를 사용함

쿠키 미사용

  • 모든 요청에 사용자 정보를 보낸다?
    • 보안문제도 있고 개발도 힘듬
    • 브라우저를 완전히 종료하면
      • 요즘은 웹 스토리지라는게 있음

쿠키 사용

  • 서버에서 Set-Cookie 유저 정보를 응답헤더에 심어서 보내줌
  • 클라이언트쿠키저장소에 저장
  • 이후에 다음 요청에서 Cookie를 헤더에 심어서 요청을 보냄
    • Cookie
  • 모든곳에 보내면 문제가 있으니까 제약사항이 있음
  • set-cookie
    • sessionId
    • expires
    • path
    • domain
    • Secure
  • 서버가 세션을 DB에 저장해놓고 클라이언트에 전송함
  • 쿠키가 있으면 네트워크 트래픽 추가 유발됨
  • 최소한의 정보만 사용, 세션 id, 인증 토큰 oauth
  • 서버에 전송하지 않고, 웹 브라우저에 저장하고 싶으면 웹 스토리지에 넣기
    • localStorage, sessionStorage
    • 보안 민감한 데이터는 저장하면 안됨

 

쿠키의 생명주기

  • Set-Cookie: expires=Date
  • max-age=3600
    • 0이나 음수를 지정하면 쿠키 삭제
  • 세션 쿠키 : 만료 날짜를 생략하면 브라우저 종료시까지만 유지
  • 영속 쿠키 : 만료 날짜를 입력하면 해당 날짜까지 유지

 

도메인

  • ex) domain=example.org
  • 명시 : 명시하는 도메인 + 서브 도메인
    • domain=example.org 지정시
    • example.org, dev.example.org도 쿠키 접근
  • 생략: 현재 문서 기준 도메인만 적용
    • example.org에서 생성하고 도메인 지정을 생략
    • example.org만 가능, 하위 도메인에서는 사용 불가.

 

경로

  • 이 경로를 포함한 하위 경로 페이지만 쿠키 접근
  • 일반적으로 path=/ 루트로 지정
  • ex) path=/home
    • /home 이하에는 전달되지만 /hello라고 하면 쿠키 전달이 안됨

 

보안

  • Secure
    • http, https 구분하지 않고 전송
  • HttpOnly
    • XSS 공격 방지
    • 자바스크립트에서 접근 불가
    • http 전송에만 사용
  • SameSite
    • XSRF 공격 방지
    • 요청 도메인, 쿠키 설정 도메인이 같은 경우만 쿠키 전송
    • 최근에 적용되서 지원하는 브라우저를 확인해야함.

내용 출처

반응형

'개발 > web' 카테고리의 다른 글

[http] http 헤더 - 2  (0) 2024.01.07
[http] http 상태 코드  (0) 2024.01.07
[http] http 메소드 활용  (0) 2024.01.07
[http] http 메소드, 메소드 속성  (0) 2024.01.07
[http] http 개요  (0) 2024.01.02