HTTP 헤더
- 용도 : HTTP 전송에 필요한 모든 부가정보, 필요시 임의의 헤더 추가 가능
- 과거엔 엔티티 헤더, 현재 표현 헤더
Connection: close
User-Agent: Mozilla/5.0
Server: Apache
Content-Type: text/html, Content-Length: 3423
표현
(Representation) = 표현 메타데이터
(representation Metadata) + 표현 데이터
(Representation Data)Content-Type
: 표현 데이터의 형식
예)
text/html; charset=utf-8
application/json
image/png
Content-Encoding
: 표현 데이터의 압축 방식
예)
gzip // 압축하는 것
deflate
identity // =같다, 즉 압축을 안한다는 것
Content-Language
: 표현 데이터의 자연 언어
예)
ko // 한국어
en // 영문
en-US
Content-Length
: 표현 데이터의 길이
: 클라이언트가 선호하는 표현 요청
Accept
: 클라이언트가 선호하는 미디어 타입 전달Accept-Charset
: 클라이언트가 선호하는 문자 인코딩Accept-Encoding
: 클라이언트가 선호하는 압축 인코딩Accept-Language
: 클라이언트가 선호하는 자연 언어Accept-Language:ko
전송했기 때문에 한국어로 지원됨Quality Values(q)
값 사용우선순위 | 내용 |
---|---|
1 | ko-KR;q=1 (q생략) |
2 | ko;q=0.9 |
3 | en-US;q=0.8 |
4 | en;q=0.7 |
우선순위 | 내용 |
---|---|
1 | text/plain;fromat=followed |
2 | text/plain |
3 | text/* |
4 | */* |
Accept: text/*;q=0.3, text/html;q=0.7, text/html;level=1,text/html;level=2;q=0.4, */*;q=0.5
미디어 타입 | 순위 |
---|---|
text/html;level=1 | 1 |
text/html | 0.7 |
text/plain | 0.3 |
image/jpeg | 0.5 |
text/html;level=2 | 0.4 |
text/html;level=3 | 0.7 |
Content-Length
를 지정하는 것gzip
같은 것으로 압축을 하여 전송하는 것Content-Encoding
지정Transfer-Encoding
사용Content-Length
를 보내면 안됨 -> 쪼개서 전송하기 때문에 길이를 예상할 수 없고, 덩어리마다 바이트 정보가 있기 때문Hello
를 먼저 전송 후, 5바이트 World
전송 (0 \r\n
이면 끝)Content-Range
사용: 유저 에이전트의 이메일 정보
: 이전 웹 페이지 주소
-> 구글에서 '테일러 스위프트'검색 후 위키백과에 들어가면, referer에 구글 주소가 있는 것을 확인할 수 있다
: 유저 에이전트 애플리케이션 정보
Mozilla/5.0 (Windows NT 10.0; Win64; x64)AppleWebKit/537.36 (KHTML, like Gecko)
Chrome/119.0.0.0 Safari/537.36
: 요청을 처리하는 오리진(Origin) 서버의 소프트웨어 정보
오리진 서버(Origin Server)
: HTTP 요청할 경우 여러 프록시 서버를 거치게 되는데 이 때, 실제로 요청을 받아 응답을 하는 서버
: 메시지가 생성된 날짜와 시간
: 요청한 호스트 정보(도메인)
Host
가 없을 경우, 어느 애플리케이션에 들어가야할지 구분할 수 없음Host
가 있을 경우, 구분 가능: 페이지 리다이렉션
Location
헤더가 있으면, Location
위치로 자동 이동(리다이렉션)Location
값은 요청에 의해 생성된 리소스 URILocation
값은 요청을 자동으로 리다이렉션하기 위한 대상 리소스를 가리킴: 허용 가능한 HTTP 메서드
: 유저 에이전트가 다음 요청을 하기까지 기다려야 하는 시간
: 클라이언트 인증 정보를 서버에 전달
Authorization: Basic xxxxxxx
OAuth 2.0
의 경우 -> Authorization: Bearer 토큰
값이 들어감: 리소스 접근시 필요한 인증 방법 정의
WWW-Authenticate: Newauth realm="apps", type=1, title="Login to \"apps\"", Basic realm="simple"
Set-Cookie
: 서버에서 클라이언트로 쿠키 전달(응답)Cookie
: 클라이언트가 서버에서 받은 쿠키를 저장하고, HTTP 요청시 서버로 전달set-cookie: sessionId=abcde1234;
expires=Sat, 26-Dec-2020 00:00:00 GMT;
path=/;
domain=.google.com;
Secure
예시
Set-Cookie
사용쿠키는 모든 요청에 쿠키 정보를 자동으로 포함 -> 보안에 이슈 발생 가능
사용처
쿠키 정보는 항상 서버에 전송됨
localStorage
, sessionStorage
) 참고보안에 민감한 데이터는 저장하면 안됨
set-cookie: expires=Sat, 26-Dec-2020 00:00:00 GMT
set-cookie: max-age=3600 (초)
expires
사용 -> 만료일이 되면 쿠키 삭제max-age
사용 -> 초단위로 지정, 0이나 음수를 지정하면 쿠키 삭제domain=.google.com;
domain
사용domain=example.org
지정해서 쿠키 생성example.org
는 물론이고dev.example.org
도 쿠키 접근example.org
에서 쿠키 생성하고 domain
지정 생략example.org
에서만 쿠키 접근dev.example.org
는 쿠키 미접근path=/home
path=/
루트로 지정path=/home
으로 지정하면 /home/level1
은 가능하지만 /hello
는 불가능Secure
Secure
를 적용하면 https인 경우에만 전송HttpOnly
SameSite