-
HTTP(5) - HTTP 헤더 (표현헤더, 협상, 전송 방식)스프링/HTTP 기본 지식 2023. 2. 7. 12:36
헤더 분류
General 헤더 : 메시지 전체에 적용되는 정보, 예) Connection: close
Request 헤더 : 요청 정보, 예) User-Agent: Mozilla/5.0 (Macintosh; ..)
Response 헤더 : 응답 정보, 예) Server: aPACHE
Entity 헤더 : 엔티티 바디 정보, 예) Content-Type: text/html, Content-Length: 3423
HTTP BODY
메시지 본문은 엔티티 본문을 전달하는데 사용
- 엔티티 본문은 요청이나 응답을 전달할 실제 데이터
표현 헤더
HTTP/1.1 200 OK
Content-Type: text/html;charset=UTF-8
Content-Length: 3423
표현 데이터
<html>
<body>...</body>
</html>
표현 헤더는 표현 데이터의 데이터를 해석할 수 있는 정보 제공
- 데이터 유형(html, json), 데이터 길이, 압축 정보 등
표현 헤더
Content-Type : 표현 데이터의 형식
Content-Encoding : 표현 데이터의 압축 방식
Content-Language : 표현 데이터의 자연 언어(한국어인지 영어인지)
Content-Length : 표현 데이터의 길이
1. Content-Type
- 미디어 타입, 문자 인코딩
- 예)
- text/html; charset=UTF-8
- apllication/json
- image/png
2. Content-Encoding
- 표현 데이터를 압축하기 위해 사용
- 데이터를 전달하는 곳에서 압축 후 인코딩 헤더 추가
- 데이터를 읽는 쪽에서 인코딩 헤더의 정보로 압축 해제
HTTP/1.1 200 OK
Content-Type: text/html;charset=UTF-8
Content-Encoding : gzip // 여기가 표현 데이터 인코딩
Content-Length: 521
3. Content-Langage
- 본문에 어떤 언어가 사용되는지 알려줌
Content-Type: text/html;charset=UTF-8
Content-Language: ko // 한국어를 사용
Content-Length: 521
4. Content-Length
- 바이트 단위
- Transfer-Encoding을 사용하면 Content-Length를 사용하면 안됨
Content-Type: text/html;charset=UTF-8
Content-Length: 5 // 5글자 사용
hello
협상 (Content negotiation)
클라이언트가 선호하는 표현 요청
Accept : 클라이언트가 선호하는 미디어 타입 전달
Accept-Charset : 클라이언트가 선호하는 문자 인코딩
Accept-Encoding : 클라이언트가 선호하는 압축 인코딩
Accept-Language : 클라이언트가 선호하는 자연 언어
협상과 우선순위 (Quality Values)
웹 사이트에 요청을 할 때 선호하는 언어가 한국어라고 하면 클라이언트가 서버에 한국어로 요청할 수 있다.
하지만 만약에 한국어가 없을 경우 서버에서 공식으로 지정된 언어를 반환할 수도 있으니 우선순위를 설정해서 한국어가 안되면 영어로 표현되는 우선순위를 지정해야한다.
- 0~1, 클수록 높은 우선순위
- 생략하면 1
GET /event
Accept-Language: ko-KR,ko;q=0.9,en-US;q=0.8,en;q=0.7
- 1. ko-KR;q=1 (q 생략)
- 2. ko;q=0.9
- 3. en-US;q=0.8
- 4. en;q=0.7
전송 방식
1. 단순 전송
2. 압축 전송
3. 분할 전송
4. 범위 전송
1. 단순 전송
HTTP/1.1 200 OK
Content-Type: text/html;charset=UTF-8
Content-Length: 3423
<html>
<body>...</body>
</html>
2. 압축 전송
HTTP/1.1 200 OK
Content-Type: text/html;charset=UTF-8
Content-Encoding: gzip // 압축해서 전송해주는 방법
Content-Length: 521
3. 분할 전송
HTTP/1.1 200 OK
Content-Type: text/html;charset=UTF-8
Transfer-Encoding: chunked
5
Hello
5
World
0
\r\n
- 5 바이트씩 끊어서 전송, 마지막 두 줄은 끝났다는 표시
- 보내는 데이터 용량이 클 때 사용
- 분할 전송때는 Content-Length를 사용하면 안됨 (길이 예상도 안되고 나눠서 보내기 때문에)
4. 범위 전송
HTTP/1.1 200 OK
Content-Type: text/html;charset=UTF-8
Content-Range: bytes 1001-2000 / 2000
- 보내야되는 데이터 범위를 따로 지정해서 보낼 수 있음
'스프링 > HTTP 기본 지식' 카테고리의 다른 글
HTTP(7) - HTTP 헤더 (캐시 검증헤더와 조건부 요청) (0) 2023.02.07 HTTP(6) - HTTP 헤더 (정보 및 쿠키) (0) 2023.02.07 HTTP(4) - HTTP 상태코드 (0) 2023.02.06 HTTP(3) - API 설계 예 (0) 2023.02.05 HTTP(2) - 클라이언트에서 서버로 데이터 전송 (0) 2023.02.05