반응형
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 기준으로 응답을 내려주게 됨.
- 서버가 en, ko를 지원하면 브라우저가 ko로 accept-language로 요청한다면
- 복잡한 예시
- 서버는 기본으로 독일어, 영어까지 지원한다.
- 클라이언트는 한국어로 브라우저를 사용중
- 이럴때? 우선순위를 지정하는 것이 좋다.
- ex) 한국인이 아무래도 독일어보다는 영어가 좀 더 친숙하니 영어를 우선순위로 지정한다.
우선순위 1 - quality values
- 우선순위를 값으로 지정함.
- 클수록 높은 우선순위
- 생략하면 1
- ex) Accept-Language: ko-KR,ko;q=0.9,en-US;q=0.8,en;q=0.7
- ko-KR;q=1 (q생략)
- ko;q=0.9
- en-Us;q=0.8
- en;q=0.7
우선순위 2
- 구체적인 것이 우선한다.
- Accept: text/*, text/plain, text/plain;format=flowed, */*
- text/plain;format=flowed
- text/plain
- text/*
- */*
전송 방식
- 단순 전송
- 길이를 알고 값을 전달함.
- 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 |