HTTP 헤더

  • header-field = field-name ":" OWS field-value OWS (OWS:띄어쓰기 허용)
  • field-name은 대소문자 구문 없음

헤더 분류

  • Request 헤더: 요청 정보, 예) User-Agent: Mozilla/5.0 (Macintosh; ..)
  • Response 헤더: 응답 정보, 예) Server: Apache
  • General 헤더: 메시지 전체에 적용되는 정보, 예) Connection: close
  • Entity 헤더: 엔티티 바디 정보, 예) Content-Type: text/html, Content-Length: 3423

HTTP 표준 변경

  • 1999년 RFC2616 (폐기) -> 2014년 RFC7230~7235 등장
  • 엔티티(Entity) -> 표현(Representation)
  • Representation = representation Metadata + Representation Data
  • 표현 = 표현 메타데이터 + 표현 데이터

HTTP BODY

  • 메시지바디 = payload
  • 표현은 요청이나 응답에서 전달할 실제 데이터
  • 표현 헤더는 표현 데이터를 해석할 수 있는 정보 제공

표현 헤더

  • Content-Type: 표현 데이터의 형식
  • Content-Encoding: 표현 데이터의 압축 방식
  • Content-Language: 표현 데이터의 자연 언어
  • Content-Length: 표현 데이터의 길이

표현 헤더는 전송, 응답 둘다 사용

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

  • Accept: 클라이언트가 선호하는 미디어 타입 전달
  • Accept-Charset: 클라이언트가 선호하는 문자 인코딩
  • Accept-Encoding: 클라이언트가 선호하는 압축 인코딩
  • Accept-Language: 클라이언트가 선호하는 자연 언어

협상 헤더는 요청시에만 사용

협상과 우선순위 

   Quality Values(q)

  • 0~1, 클수록 높은 우선순위, 생략하면 1

      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
  • 구체적인 것이 우선한다.

       Accept: text/*, text/plain, text/plain;format=flowed, */*

  1. text/plain;format=flowed
  2. text/plain
  3. text/*
  4. */*
 
  • 구체적인 것을 기준으로 미디어 타입을 맞춘다.
Media Type
Quality
text/html;level=1
1
text/plain
0.3
image/jpeg
0.5
text/html;level=2
0.4
text/html;level=3 0.7
text/html;level=1
0.7 

전송 방식

  • 단순 전송      | Content-Length: 3423
  • 압축 전송.     | Content-Encoding: gzip
  • 분할 전송.     | Transfer-Encoding: chunked
  • 범위 전송.     Range:bytes=1001-2000| Content-Range: bytes 1001-2000 / 2000(끝길이)
 

일반 정보

From: 유저 에이전트의 이메일 정보
Referer: 이전 웹 페이지 주소 (referrer의 오타)
User-Agent: 유저 에이전트 애플리케이션 정보
Server: 요청을 처리하는 오리진 서버의 소프트웨어 정보 Date: 메시지가 생성된 날짜

특별한 정보

  • Host: 요청한 호스트 정보(도메인)
  • Location: 페이지 리다이렉션
                         201 (Created): Location 값은 요청에 의해 생성된 리소스 URI
                         3xx (Redirection): Location 값은 요청을 자동으로 리디렉션하기 위한 대상 리소스를 가리킴
                                                         -> 해당 Location으로 자동 이동
  • Allow: 허용 가능한 HTTP 메서드
                         405 (Method Not Allowed) 에서 응답에 포함해야함
                         ex) Allow: GET, HEAD, PUT  
  • Retry-After: 유저 에이전트가 다음 요청을 하기까지 기다려야 하는 시간
                         503 (Service Unavailable): 서비스가 언제까지 불능인지 알려줄 수 있음
                         Retry-After: Fri, 31 Dec 1999 23:59:59 GMT (날짜 표기)
                         Retry-After: 120 (
    초단위 표기)

인증

  • Authorization: 클라이언트 인증 정보를 서버에 전달
  • WWW-Authenticate: 리소스 접근시 필요한 인증 방법 정의

쿠키

  • 예) set-cookie: sessionId=abcde1234; expires=Sat, 26-Dec-2020 00:00:00 GMT; path=/; domain=.google.com; Secure
  • 사용처
    - 사용자 로그인 세션 관리
    - 광고 정보 트래킹
  • 쿠키 정보는 항상 서버에 전송됨
    - 네트워크 트래픽 추가 유발
    - 최소한의 정보만 사용(세션 id, 인증 토큰)
    - 서버에 전송하지 않고웹 브라우저 내부에 데이터를 저장하고 싶으면 웹 스토리지 (localStorage, sessionStorage) 참고
  • 주의!
    - 보안에 민감한 데이터는 저장하면 안됨(주민번호, 신용카드 번호 등등)
  • 생명주기
    - Set-Cookie: expires=Sat, 26-Dec-2020 04:39:21 GMT
    - Set-Cookie: max-age=3600 (3600), 0이나 -1일 경우 즉시 삭제
    - 세션 쿠키: 만료 날짜를 생략하면 브라우저 종료시 까지만 유지
    - 영속 쿠키: 만료 날짜를 입력하면 해당 날짜까지 유지
  • 도메인
    - 명시: 명시한 문서 기준 도메인 + 서브 도메인 포함
       domain=example.org를 지정해서 쿠키 생성시, example.org는 물론이고 dev.example.org도 쿠키 접근
    - 생략: 현재 문서 기준 도메인만 적용
       example.org 에서 쿠키를 생성하고 domain 지정을 생략시, example.org 에서만 쿠키 접근, dev.example.org는 쿠키 미접근
  • 경로
    - 이 경로를 포함한 하위 경로 페이지만 쿠키 접근
    - 일반적으로 path=/ 루트로 지정
  • 보안
    1) Secure
       - 쿠키는 http, https를 구분하지 않고 전송
       - Secure를 적용하면 https인 경우에만 전송
    2) HttpOnly
       - XSS 공격 방지
       - 자바스크립트에서 접근 불가(document.cookie)
       - HTTP 전송에만 사용
    3) SameSite
       - XSRF 공격 방지
       - 요청 도메인과 쿠키에 설정된 도메인이 같은 경우만 쿠키 전송

 

'HTTP' 카테고리의 다른 글

HTTP 상태코드  (0) 2022.03.13
HTTP 메서드 활용  (0) 2022.03.06
HTTP 메서드  (0) 2022.03.05
HTTP 기본  (0) 2022.03.01
URI와 웹 브라우저 요청 흐름  (0) 2022.02.24

+ Recent posts