HTTP 헤더

  • HTTP 전송에 필요한 모든 부가 정보를 포함한다. 예를들면 Content-Type, Content-Length 기반의 메시지 바디를 해석할 수 있다. (해석할 수 있는 정보 제공을 한다.) / 데이터 유형(html, json), 데이터 길이, 압축 등 
    • Content-Type : text/html ... > html 형식
    • Content-Type : application/json > json 형식
  • 메시지 본문 = 페이로드, 표현 헤더, 표현 데이터 (RFC7230~7235 등장 시점 변경 내용)
  • 표현 데이터 정보를 헤더에서 확인해볼 수 있는데 위에 언급된 2가지와 (Content-Type/ Content-Length) + Content-Encoding/ Content-Language/ Content-Length 있다. 

콘텐츠 네고시에이션

  • 클라이언트가 원하는 표현으로 서버에 요청을 해서 원하는 표현 데이터를 받는것을 의미한다. 
    • Accept
      • 클라이언트가 선호하는 미디어 타입 전달
    • Accept-Charset
    • Accept-Encoding
    • AcceptLanguage 
  • 만약, 서버에서 표현 데이터가 여러개면 Qulity Values(q)로 우선순위를 할당하게 된다. Accept-Language: ko-KR, ko;q=0.9, en-US; q=0.8; q=0.7 
  • 서버에서는 읽어보고 Qulity Values 매칭 한 후에 우선순위를 보고 클라이언트로 데이터를 보낸다. 
  • 아래는 구글에 검색 시 요청 콘텐츠 네고시에이션 사진이다.

* 서버가 XML, JSON 모두 제공하면 클라이언트별 선호하는 포맷을 제공하기 위해서 우선순위를 할당하는것을 잊지 말자. 

 

전송 방식

  • 단순 전송
    • Content-Length를 알 수 있으면 한번에 요청해서 쭉 받을 수 있다.
  • 압축 전송
    • 서버에서 html 표현 데이터를 압축해서 전송하게 되면 용량이 크게 줄어든다. 압축하는데 Content-Encoding을 사용한다. 
  • 분할 전송
    • 청크 덩어리를 쪼개서 보내게 된다. 오는대로 바로바로 전송할 수 있는 장점이 있다. 
  • 범위 전송
    • 이미를 받는데 중간에 끊키면 처음부터 다시 해야 되는데 범위를 지정해서 전송할 수 있다.
    • Content-Range : bytes 1001~2000 / 2000

 

HTTP 헤더

  • From : 유저 에이전트 이메일 정보
  • Referer : 이전 웹 페이지 정보

  • user-agent : 클라이언트 애플리케이션(=유저 에이전트) 브라우저 정보, 이 user-agent를 보고 특정 브라우저에서 에러가 발생한것을 파싱해서 확인할 수 있다. 통계 정보를 확인하는데 사용된다. 
  • server : http 요청 보내면 실제 origin server를 찾아가기 까지 중간에 여러 프록시 서버를 거친다. 응답에서 사용
  • host : 요청에서 사용하는데 필수 값이다. 하나의 서버가 여러 도메인을 처리할 때 사용한다. 하나의 IP 대역에서 여러 서버 있을 때 서버를 찾아가기 위한 용도 
  • Location
    • 201(Created) : Location 값은 요청에 의해 생성된 리소스 URI
    • 3xx(Redirection) : Location 값은 자동으로 리다이렉션하기 위해 대상 리소스 가리킴(Location 위치)
  • Allow (허용 가능한 HTTP 메서드)
    • 405(Method Not Allowed), 서버가 허용하지 않는 HTTP 메서드를 호출했을 때 사용
  • Retry-After (유저 에이전트가 다음 요청 하기까지 기다려야 하는 시간)
    • 503(Service Unavailable), 서비스가 언제까지 불능인지 알려준다.
  • 401 (Unauthorized) - HTTP 헤더에 WWW-Authenticate : Newauth realm="apps" ... 추가해서 보내야 한다. 

 

쿠키

  • 서버에서 쿠키 셋 해서 보내 줄 때는 Set-Cookie 를 사용한다. 
  • 쿠키 저장소에서 쿠키를 꺼내서 HTTP 헤더에 포함시켜 보내준다. 
  • 어디에 쓸까?
    • 사용자 세션 관리
    • 쿠키는 최소한의 정보만 사용해야 한다. (네트워크 트래픽 유발)
    • 웹 스토리지(local storage, session storage)를 써서 웹 브라우저 내부에 데이터를 저장해서 JS가 꺼내서 쓸 수도 있다.
    • 단, 보안에 민감한 데이터는 저장해서는 안된다.
  • expires(기간), max-age(초) 
  • domain = github.com 명시를 하면 명시한 문서 기준 도메인 + 서브 도메인을 포함한다. 반대로 생략하면 현재 문서 기준 도메인만 적용된다.
  • path=/ 지정하면 경로를 포함한 하위 경로 페이지 쿠키 접근이 가능하다.
    • /home (가능), /home/level1(가능), /home/level1/level2(가능)
  • 쿠키는 http, https 구분하지 않고 전송가능
  • JS가 쿠키에 접근할 수 있는데 XSS 를 쿠키에 보안을 설정하면 (HttpOnly) JS에 접근이 불가해진다. (단, Http에서만 사용)
  • 영속 쿠키 
    • 만료 날짜까지 유지
  • 세션 쿠키 
    • 만료 날짜를 생략하면 브라우저 종료까지 유지  

 

 

출처 

https://dribbble.com/shots/15126018-Cloud-icon-for-digital-ecosystem-logo-design-symbol 

'Computer Science > Network' 카테고리의 다른 글

HTTP 캐시와 조건부 요청  (0) 2021.12.09
HTTP 상태 코드  (0) 2021.12.09
HTTP 메서드 활용  (0) 2021.12.09
HTTP 메서드  (0) 2021.12.07
HTTP 기본  (0) 2021.12.07