헤더: HTTP 전송에 필요한 모든 부가정보
RFC7230~7235
Entity -> Representation = representation Metadata + Representation Data
표현 = 표현 메타데이터 + 표현데이터
HTTP BODY (message body):
메시지 본문을 통해 표현(representation)데이터 전달
메시지 본문 = 페이로드(payload)
표현은 요청이나 응답에서 전달할 실제 데이터
표현 헤더는표현 데이터를 해석할 수 있는정보 제공 (데이터 유형 html json, 데이터 길이, 압축정보 등)
표현 - representation
헤더:
Content-Type: 표현 데이터의 형식 / ex) Content-Type: text/html;charset=UTF-8 or Content-Type:application/json
Content-Encoding: 표현 데이터의 압축 방식 / 표현데이터를 압축하기 위해 사용, 전달하는 곳에서 압축 후 인코딩 헤더 추가 후 데이터 읽는 쪽에서 인코딩 헤더의 정보로 압축 해제 ex) Content-Encoding: gzip / identity는 압축 안한다는 뜻
Content-Language: 표현 데이터의 자연 언어 (한국어인지 영어인지) ex) Content-Language: ko
Content-Length: 표현 데이터의 길이 ex) Content-Length: 521 / 바이트 단위고 Transfer-Encoding을 사용하면 적으면 안됨
표현 헤더는 전송, 응답 둘다 사용
협상헤더: (콘텐츠 네고시에이션) - 클라이언트가 선호하는 표현 요청, 요청시에만 사용
Accept: 클라이언트가 선호하는 미디어 타입 전달
Accept-Charset: 클라이언트가 선호하는 문자 인코딩
Accept-Encoding: 클라이언트가 선호하는 압축 인코딩
Accept-Language: 클라이언트가 선호하는 자연 언어
협상과 우선순위1
Quality Vaules(q)
0~1, 클수록 높은 우선순위, 생략하면 1
ex) ACCEPT-Language: ko-KR,ko;1=0.9,en-US;q=0.8,en;q=0.7
1. ko-KR;q=1 (q 생략) - 한국사람이 쓰는 한국어
2. ko;1=0.9 - 한국 공통어?
3. en-US;q=0.8 - us에서 쓰는 영어
4. en:q=0.7 - 공통 영어
협상과 우선순위2
구체적인 것이 우선한다.
Accept: text/*, text/plain, */*
협상과 우선순위3
구체적인 것을 기준으로 미디어 타입을 맞춘다.
전송 방식
단순 전송: 요청하면 바로 Content-Length에 대한 정보를 준다. 한번에 요청하고 한번에 쭉 받는다
압축 전송: Content-Encoding: gzip, 어떠한 방식으로 압축되어 있는지
분할 전송: Transfer-Encoding:chunked, 청크별로 몇개로 나눠서 보냄, Content-Length를 넣으면 안된다.
HTTP/1.1 200 OK
Content-Type: text/plain
Transfer-Encoding: chucked
5
HELLO
5
WORLD
0
/r/n
범위 전송: Range: bytes=1001-2000 (요청)
Content-Range: bytes 1001-2000 / 2000 (응답)
일반정보
From: 유저 에이전트의 이메일 정보 - 잘 사용되지 않음
Referer: 현재 요청된 페이지의 이전 웹 페이지 주소 (뒤로가기 할때나 유입 경로 분석에 필요, 요청에서 사용)
user-agent: 유저 에이전트의 애플리케이션 (웹브라우저) 정보
Server: 요청을 처리하는 ORIGIN 서버의 소프트웨어 정보 (Server: Apache/2.2.22 (Debian), Server: nginx) (응답에서 사용)
Date : 메시지가 발생한 날짜와 시간 ex) Date: Tue, 15 Nov 1994 08:12:32 GMT (응답에서 사용)
특별한 정보
Host : 요청한 호스트 정보 (도메인) => 요청에서 사용, 필수값이다.
하나의 서버가 여러 도메인을 처리해야 할 때, 하나의 IP주소에 여러 도메인이 적용되어 있을 때.
가상호스트를 통해 여러 도메인을 한번에 처리할 수 있는 서버의 경우, 하나의 아이피인데 google.com, naver.com 의 여러 도메인을 처리하는 경우
Location: 3xx 응답의 결과에 Location 헤더가 있으면 해당 URI로 자동이동, 요청 자동 리디렉션하기위한 리소스 정의
Allow: 허용 가능한 HTTP 메서드, ex) allow: GET, HEAD, PUT
Retry-After: 유저 에이전트가 다음 요청을 하기까지 기다려야 하는 시간,
인증
Authorization: 클라이언트 인증 정보를 서버에 전달 ex) Authorization: Basic xxxxxxxxxxxxxx
WWW-Authenticate: 리소스 접근시 필요한 인증 방법 정의, 401 Unathorized 응답과 함께 사용
쿠키
Set-Cookie: 서버에서 클라이언트로 쿠키 전달(응답) ex) Set-Cookie: expires=Sat, 26-Dec-2020 04:39:21 GMT, max-age=3600
(초) 0이나 음수 지정시 쿠키 삭제, 세션 쿠키: 만료 날짜를 생략하면 브라우저 종료시까지만 유지, 영속 쿠키: 만료 날짜를 입력하면 해당 날짜까지 유지
Cookie: 클라이언트가 서버에서 받은 쿠키를 저장하고, HTTP 요청시 서버에 전달
쿠키- 도메인:
예 ) domain=example.org
명시: 명시한 문서 기준 도메인 + 서브 도메인 포함
domain=example.org 지정해서 쿠키 생성시
example.org는 물론이고 dev.example.org 또한 쿠키접근 근ㅇ
생략: 현재 문서 기준 도멩니만 적용
example.org 에서 쿠키 생성하고 domain 지정을 생략
dev.example.org에서는 쿠키 접근 불가
쿠키 - 경로
예) path=/home
이 경로를 포함한 하위 경로 페이지만 쿠키 접근
일반적으로는 path=/ 루트로 지정
예) path=/home 시에는 /home/level1 가능이지만 /hello는 불가능
쿠키 - 보안
Secure: 쿠키는 http, https 구분하지 않고 전송, Secure를 적용하면 https인 경우에만 전송 가능
HttpOnly: XSS 공격 방지, 자바스크립트에서 접근 불가(document.cookie), HTTP 전송에만 사용
SameSite: XSRF 공경 방지, 요청 도메인과 쿠키에 설정된 도메인이 같은 경우에만 쿠키 전송
'CS' 카테고리의 다른 글
HTTPServletRequest, HTTPServletResponse (0) | 2024.06.11 |
---|---|
HTTP 헤더 - 헤더2 (캐시, 조건부) (0) | 2024.06.09 |
HTTP 상태코드 (0) | 2024.06.09 |
URI와 웹 브라우저 요청 흐름, Stateful (0) | 2024.06.04 |
IP(인터넷 프로토콜), PORT, DNS (0) | 2024.06.03 |