HTTP 일반헤더

Xonic·2021년 8월 23일
0

HTTP

목록 보기
5/6
post-thumbnail

해당 시리즈는 김영한님 강의를 보고 정리한 시리즈입니다.

목차

  1. 일반 헤더
  2. HTTP 표준
  3. HTTP BODY
  4. 표현
  5. 협상(콘텐츠 네고시에이션)
  6. 전송 방식 설명
  7. 일반 정보
  8. 특별한 정보
  9. 인증
  10. 쿠키

참조

일반 헤더

HTTP 표준

1999년 RFC2616이 폐기되고 2014년 RFC7230~7235가 등장한다!

HTTP BODY

message body - RFC7230(최신)

  • 메시지 본문 (message body)을 통해 표현 데이터 전달
  • 메시지 본문 = 페이로드(payload)
  • 표현은 요청이나 응답에서 전달할 실제 데이터
  • 표현 헤더는 표현 데이터를 해석할 수 있는 정보 제공
    • 데이터 유형(html, json), 데이터 길이, 압축 정보 등등
  • 참고 : 표현 헤더는 표현 메타데이터와, 페이로드 메시지를 구분해야 하지만, 안한다

표현

리소스 (데이터)를 어떤 데이터로 표현한다. (json으로 표현한다, html로 표현한다 등)

  • Content-Type : 표현 데이터의 형식
    • 미디어 타입, 문자 인코딩
    • text/html; charset=utf-8
    • application/json
    • image/png
  • Content-Encoding : 압축 방식
    • 표현 데이터를 압축하기 위해 사용
    • 데이터를 전달하는 곳에서 압축 후 인코딩 헤더 추가
    • 데이터를 읽는 쪽에서 인코딩 헤더의 정보로 압축 해제
    • gzip
    • deflate
    • identity
  • Content-Language : 표현 데이터의 자연언어
    • 표현 데이터의 자연 언어를 표현
    • ko
    • en
    • en-US
  • Content-Length : 표현 데이터의 길이
    • 바이트 다온
    • Transfer-Encoding(전송 코딩)을 사용하면 Content-Length를 사용하면 안됨.
  • 표현 헤더는 전송, 응답 둘다 사용

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

클라이언트가 선호하는 표현 요청

  • Accept : 클라이언트가 선호하는 미디어 타입 전달
  • Accept-Charset : 클라이언트가 선호하는 문자 인코딩
  • Accept-Encoding : 클라이언트가 선호하는 압축 인코딩
  • Accept-Language : 클라이언트가 선호하는 자연 언어
  • 협상 헤더는 요청시에만 사용한다!!

협상과 우선순위1

Quality Values(q)

  • Quality Values(q) 값 사용
  • 0 ~ 1, 클수록 높은 우선순위
  • 생략하면 1
  • Accept-Language : ko-KR,ko;q=0.9,en-US;q=0.8

협상과 우선순위2

Quality Values(q)

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

협상과 우선순위3

Quality Values(q)

  • 구체적인 것을 기준으로 미디어 타입을 맞춘다.

전송 방식 설명

  • 단순 전송
    • Content-Length
  • 압축 전송
    • Content-Encoding
    • Content-Length
  • 분할 전송
    • Transfer-Encoding (Content-Length X)
  • 범위 전송
    • Range, Content-Range

일반 정보

  • From : 유저 에이전트의 이메일 정보
    • 일반적으로 사용X
  • Referer : 이전 웹 페이지 주소
    • 현재 요청된 페이지의 이전 웹페이지 주소
    • A → B로 이동하는 경우 B를 요청할 때 Referer : A를 포함해서 요청
    • 유입 경로 분석 가능
    • 요청에서 사용
  • User-Agent : 유저 에이전트 애플리케이션 정보
    • 클라이언트 애플리케이션 정보(웹 브라우저 정보, 등등)
    • 통계 정보
    • 어떤 종류의 브라우저에서 장애가 발생하는지 파악 가능
    • 요청에서 사용
  • Server : 요청을 처리하는 ORIGIN 서버의 소프트웨어 정보 (진짜 요청이 있는 마지막 서버)
    • Server : Apache/2.2.22 (Debian)
    • server : nginx
    • 응답에서 사용
  • Date : 메시지가 생성된 날짜
    • Data
    • 응답에서만 사용

특별한 정보

1. Host

요청한 호스트 정보(도메인)

  • Host: aaa.com
  • 요청에서 사용
  • 필수
  • 하나의 서버가 여러 도메인을 처리해야 할 때
  • 하나의 IP 주소에 여러 도메인이 적용되어 있을 때

2. Location

페이지 리다이렉션

  • 웹 브라우저는 3xx 응답의 결과에 Location 헤더가 있으면, Location 위치로 자동 이동 (리다이렉트)
  • 201 (Created): Location 값은 요청에 의해 생성된 리소스 URI
  • 3xx (Redirection): Location 값은 요청을 자동으로 리다이렉션 하기 위한 대상 리소스를 가리킴

3.Allow

허용 가능한 HTTP 메서드

4.Retyr-After

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

  • 503 (Service Unavailable) : 서비스가 언제까지 불능인지 알려줄 수 있음
  • 초단위 표기, 날짜 표기

인증

  • Authorization : 클라이언트 인증 정보를 서버에 전달
    • Authorization : Basic xxxxxxx
  • WWW-Authenticate : 리소스 접근시 필요한 인증 방법 정의
    • 리소스 접근시 필요한 인증 방법 정의
    • 401 응답과 함께 사용
    • 인증을 어떻게 하는지에 대한 방법을 같이 응답

쿠키

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

쿠키 미사용

  • 사용자가 로그인을 요청하고 서버가 응답하면, 그 당시엔 정보를 서버에선 받았기 때문에 로그인에 맞는 처리가능
  • 하지만 재요청시에는
    • Stateless
      • 무상태기 때문에 요청과 응답을 주고 받으면 연결이 끊어지기 때문에 인증을 기억하지 못함.
  • 대안 : 모든 요청과 링크에 사용자 정보 포함??? X
    • 브라우저를 완전히 종료하고 다시 열면?

쿠키 사용

  • 클라이언트 로그인 요청시 서버에서 Set-Cookie를 하여 클라이언트의 쿠키 저장소에 넣으면, 클라이언트 재 요청시마다 쿠키 헤더에 실어 요청함.

쿠키

  • 예) set-cookie: sessionId=abcd1234; expires=Sat, 26-Dec-2020 00:00:00 GTM; path=/; domain=.google.com; Secure
  • 사용처
    • 사용자 로그인 세션 관리
    • 광고 정보 트래킹
  • 쿠키 정보는 항상 서버에 전송됨
    • 네트워크 트래픽 추가 유발
    • 최소한의 정보만 사용(세션 id, 인증 토큰)
    • 서버에 전송하지 않고, 웹 브라우저 내부에 데이터를 저장하고 싶으면 웹 스토리지 (localStorage, sessionStorage) 참고
  • 주의!
    • 보안에 민감한 데이터는 저장하면 안됨!(주민번호, 신용카드 번호 등등)

쿠키 - 생명주기

Expires, max-age

  • Set-Cookie : expires-Sta, 26-Dec-2020 04:49:21 GMT
    • 만료일이 되면 쿠키 삭제
  • Set-Cookie : max-age=3600 (3600초)
    • 0이나 음수를 지정하면 쿠키 삭제
  • 세션 쿠키 : 만료 날짜를 생략하면 브라우저 종료시 까지만 유지
  • 영속 쿠키 : 만료 날짜를 입력하면 해당 날짜까지 유지

쿠키 - 도메인

domain

  • 예) domain=example.org
  • 명시 : 명시한 문서 기준 도메인 + 서브 도메인 포함
  • 생략 : 현재 문서 기준 도메인만 적용
    • example.org에서 쿠키를 생성하고 domain 지정을 생략
    • example.org만 접근 가능

쿠키 - 경로

Path

  • 예) path=/home
  • 이 경로를 포함한 하위 경로 페이지만 쿠키 접근
  • 일반적으로 path=/ 루트로 지정
  • 예)
    • path=/home 지정
    • /home → 가능
    • /home/leve1 가능
    • /hello 불가능

쿠키 - 보안

Secure, HttpOnly, SameSite

  • Secure
    • 쿠키는 http, https를 구분하지 않고 전송
    • Secure를 적용하면 https인 경우에만 전송
  • HttpOnly
    • XSS 공격 방지
    • 자바스크립트에서 접근 불가(document.cookie)
    • HTTP 전송에만 사용
  • SameSite
    • XSRF 공격 방지
    • 요청 도메인과 쿠키에 설정된 도메인이 같은 경우만 쿠키 전송

참조

profile
공부 한 것을 공유하는 블로그입니다.

0개의 댓글