[HTTP] 헤더

Local Gaji·2023년 12월 31일

🎈 HTTP 헤더

HTTP 전송에 필요한 모든 부가정보
인증, 요청 클라이언트, 서버 정보, 캐시 관리 정보, 메세지 바디의 내용, 크기, 압축 등등..
필요 시 임의의 헤더를 추가할 수 있다.


🎈 표현 헤더

데이터는 다양한 방식으로 표현될 수 있는데, 표현 헤더는 표현 데이터를 해석할 수 있는 정보를 제공한다.
요청과 응답에 모두 사용된다.

헤더정보
Content-Type표현 데이터의 형식
미디어 타입, 문자 인코딩 등
Content-Encoding표현 데이터의 압축 방식
ex) gzip, deflate, identify(압축안함) 등
Content-Language표현 데이터의 자연어
ex) ko, en, en-US 등
Content-Length표현 데이터의 길이
바이트 단위

🎈 컨텐츠 협상

클라이언트가 요청 시 선호하는 표현을 알려주는 역할
요청 시에 사용된다.

헤더정보
Accept클라이언트가 원하는 미디어 타입
Accept-Charset클라이언트가 원하는 문자 인코딩
Accept-Encoding클라이언트가 원하는 압축 인코딩
Accept-Language클라이언트가 원하는 자연어


🔰 Quality Values

원하는 표현으로 응답할 수 없는 경우를 대비해서 우선 순위를 알려줄 수 있다

q는 0 ~ 1 사이의 값으로 우선순위를 지정하고, 클수록 높은 우선순위를 가진다.
q 가 1일 경우 생략할 수 있다 (ko-KR;q=1, 에서 ;q=1 은 생략)


q가 없는 경우 구체적인 값이 우선된다
(text/plain;format=flowed > text/plain > text/* > *)


🎈 전송 방식


🔰 단순 전송

데이터를 그냥 메세지 바디에 실어서 전송


🔰 압축 전송

데이터를 압축해서 전송, Content-Encoding 에 압축 방법 명시


🔰 분할 전송

쪼개서 전송, Transfer-Encoding: chuncked 로 분할 전송 명시
Content-Length 헤더는 보내면 안됨

크기(Byte)
데이터 -------> 보냄
크기(Byte)
데이터 -------> 보냄


🔰 범위 전송

데이터의 일부만 필요한 경우, 범위를 지정해서 요청하면 해당 범위에 해당하는 데이터만 응답
Content-Range: bytes 시작-끝 / 전체


🎈 일반 정보 헤더

헤더요청/응답정보
From요청발신인의 이메일 정보를 전송
검색 엔진 같은 곳에서 사용
Referer요청이전 페이지 주소를 명시 (어디를 통해서 페이지에 들어왔는지)
유입경로 분석 가능
오타가 났지만 그냥 이대로 쓰고 있음
User-Agent요청클라이언트 애플리케이션 정보 (웹브라우저 등등)
특정 브라우저에서만 문제가 생길 때 파악, 통계
Server응답Origin 서버의 소프트웨어 정보
프록시 서버나 캐시 서버를 제외한 실제 서버
Data응답메세지가 발생한 날짜와 시간

🎈 특수정보 헤더

헤더요청/응답정보
Host요청하나의 서버가 여러 도메인을 처리해야 할 때 도메인을 구분하기 위해 명시 (필수)
Location응답201 Created 응답에서는 생성된 리소스의 URI를 명시
3xx Redirection 응답에서는 페이지 리다이렉션 URI를 명시
Allow응답405 Method Not Allowed 응답에서 해당 URI의 허용 가능한 메서드를 명시
Retry-After응답503 Service Unavailable 응답에서 서비스를 언제부터 다시 이용할 수 있는지


🎈 인증 헤더

헤더요청/응답정보
Authorization요청/응답클라이언트 인증 정보를 서버에 전달

(JWT 등)
WWW-Authenticate | 응답 | 401 Unauthorized 응답에서 필요한 인증 방법을 명시


🎈 쿠키

요청할 때마다 사용자 정보를 쿼리 파라미터 등으로 전달하기는 힘들기 때문에, 서버에서 사용자 정보를 쿠키에 실어 클라이언트에 전송한다. 클라이언트는 쿠키를 저장해뒀다가 (정보가 필요한) 요청을 할 때마다 쿠키와 함께 전송한다.

  • 사용자 로그인 세션 관리, 광고 정보 트래킹 등에 사용된다.
  • 쿠키 정보가 계속 전송되어 네트워크 트래픽을 추가로 유발하므로 최소한의 정보만 사용하는게 좋다.
  • 필요할 때에만 사용하고 싶은 정보는 쿠키보다 웹 스토리지를 사용하는게 좋다
  • 보안에 민감한 데이터는 저장 X
헤더요청/응답정보
Set-Cookie응답서버에서 클라이언트로 쿠키 전달
Cookie요청클라이언트가 서버에서 받은 쿠키를 저장했다가 요청 시 이 헤더를 통해 쿠키를 서버에 전달

Set-Cookie: sessionId={세션 아이디}; expires={만료 시간}; path={허용할 경로}; 
domain={허용할 도메인}; {보안 옵션}
  • 만료 시간을 생략하면 브라우저 종료시 까지만 유지
  • 도메인을 생략하면 현재 문서의 도메인에만 적용 (하위 도메인 X)
  • 경로를 지정하면 해당 경로 페이지와 하위 경로 페이지에서 쿠키가 전송됨
  • 보안 옵션
    • Secure : HTTPS 에서만 허용
    • HttpOnly : HTTP 에서만 허용 (XSS 공격 방지, 자바스크립트에서 쿠키 접근 불가)
    • SameSite : 요청 요청 도메인과 쿠키에 설정된 도메인이 같을 때 허용 (XSRF 공격 방지)

0개의 댓글