일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 공채
- 개발
- Public
- 깃허브
- 신입사원
- 우리카드
- 디지털
- github
- 스프링
- 세마포어
- OS
- 운영체제
- 스터디
- Effective Java
- 자바
- package-private
- 프로그래밍
- spring
- 메모리
- 이펙티브 자바
- 컴퓨터과학
- 알고리즘
- CS
- IT
- java
- 뮤텍스
- 컴퓨터공학
- 신입
- 정보처리기사
- 깃
Archives
- Today
- Total
주니어 개발자 성장기
(22.11.14) HTTP(6) - 헤더(1) 본문
HTTP 헤더 개요
헤더의 형식은 다음과 같다
field-name ":" OWS field-value OWS (OWS: 띄어쓰기 허용)
또한, field-name은 대소문자 구분이 없다.
용도
- HTTP 전송에 필요한 모든 부가정보
- 예) 메시지 바디의 내용, 메시지 바디의 크기, 압축, 인증, 요청 클라이언트, 서버 정보, 캐시 관리 정보, etc
- 표준 헤더가 너무 많다.
- 필요시 임의의 헤더도 추가 가능하다.
RFC723x 변화
- 2014년 새로운 헤더 표준인 RFC7230 스펙이 제정된다.
- 엔티티(Entity) -> 표현(Representation) 변경
- Representation = Representation Metadata + Representation Data
- 표현 = 표현 메타데이터 + 표현 데이터
- 여기서 Representation의 R이 REST API의 R이다.
HTTP BODY
- 메시지 본문(message body)을 통해 표현 데이터 전달
- 메시지 본문 = 페이로드(payload)
- 표현은 요청이나 응답에서 전달할 실제 데이터
- 표현 헤더는 표현 데이터를 해석할 수 있는 정보 제공
- 데이터 유형(html, json), 데이터 길이, 압축 정보 등
- 참고: 표현 헤더는 표현 메타데이터와, 페이로드 메시지를 구분해야 하지만, 복잡해서 생략한다.
'entity'에서 '표현(representation)'으로 변경한 이유는 한 가지 리소스는 데이터 유형, 압축 등 여러가지 방식으로 나타내질 수(표현될 수) 있기 때문에 이를 명확하게 하기 위함이다.
표현
- Content-Type: 표현 데이터의 형식
- Content-Encoding: 표현 데이터의 압축 방식
- Content-Language: 표현 데이터의 자연 언어
- Content-Length: 표현 데이터의 길이
- Content-Length는 엄밀히 말하면 표현 헤더라기보다 전체 메시지에 대한 것이므로 페이로드지만 편의상 표현 헤더라고 한다.
*표현 헤더는 전송, 응답 둘 다 사용한다!
Content-Type
표현 데이터의 형식 설명
- 미디어 타입, 문자 인코딩
- text/html;charset=utf-8
- application/json (* json은 기본이 utf-8이다.)
- image/png
Content-Encoding
표현 데이터의 인코딩 형식
- 표현 데이터를 압축하기 위해 사용
- 데이터를 전달하는 곳에서 압축 후 인코딩 헤더 추가
- 데이터를 읽는 쪽에서 인코딩 헤더의 정보로 합축 해제
- gzip
- deflate
- identity <- 압축을 안한다는 의미
Content-Language
표현 데이터의 자연 언어
- 표현 데이터의 자연 언어를 표현
- ko
- en
- en-US
Content-Length
표현 데이터의 길이
- 바이트 단위
- Transfer-Encoding(전송 코딩)을 사용하면 Content-Length를 사용하면 안된다!
협상(콘텐츠 네고시에이션)
클라이언트가 선호하는 표현 요청 <- 요청시에만 사용!
- Accept: 클라이언트가 선호하는 미디어 타입 전달
- Accept-Charset: 클라이언트가 선호하는 문자 인코딩
- Accept-Encoding: 클라이언트가 선호하는 압축 인코딩
- Accept-Language: 클라이언트가 선호하는 자연 언어
협상과 우선순위1
Quality Values(q)
- Quality Values(q) 값 사용
- 0~1 , 클수록 높은 우선순위
- 생략하면 1
- 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/*
- */*
협상과 우선순위3
- 구체적인 것을 기준으로 미디어 타입을 맞춘다.
- Accept: text/*q=0.3, text/html;q=0.7, text/html;level=1, text/html;level=2;q=0.4, */*;q=0.5
Media Type | Quality |
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
- 압축 전송
- Content-Encoding
- 분할 전송
- Transfer-Encoding
- ex) Transfer-Encoding: chunked
분할 전송의 Body 예시
5
Hello
5
World
0
\r\n
- 각 숫자는 분할돼 전송되는 바이트를 의미한다.
- 실제로 Body가 한 번에 보내지지 않고 분할되어 보내진다.
- 마지막의 0 \r\n은 종료를 의미
- 분할 전송에서는 Content-Length 헤더가 포함이 되지 않는다
- 범위 전송
- Range, Content-Range
- Range: bytes=1001-2000
- 바이트로 된 컨텐츠의 범위를 지정해서 받는 것
- 분할해서 요청, 응답할 경우 사용 (실패 시 처음부터 다시 할 수는 없기 때문에)
'Web' 카테고리의 다른 글
(22.11.21) HTTP(7) - 헤더(3) (0) | 2022.11.21 |
---|---|
(22.11.14) HTTP(6) - 헤더(2) (0) | 2022.11.14 |
(22.10.29)HTTP(5) - 상태코드 (0) | 2022.10.29 |
(22.10.26) HTTP(3) - 메서드 활용 (0) | 2022.10.27 |
(22.10.04) HTTP(2) - TCP, UDP (0) | 2022.10.04 |