HTTP

[HTTP] 웹 기본 지식 정리 - HTTP 헤더(일반헤더)①

aaaahy 2023. 1. 21. 20:30

- 이 게시글은 인프런 "모든 개발자를 위한 HTTP 웹 기본지식"의 김영한님 강의를 보고 요약한 내용입니다.


1. HTTP 헤더 개요

2023.01.09 - [HTTP] - [HTTP] 웹 기본 지식 정리 - HTTP 기본 

 

[HTTP] 웹 기본 지식 정리 - HTTP 기본

- 이 게시글은 인프런 "모든 개발자를 위한 HTTP 웹 기본지식"의 김영한님 강의를 보고 요약한 내용입니다. 1. HTTP(HyperText Transfer Protocol) HTTP 메시지에 모든 것을 전송한다 !! HTML Text Image 음성, 영상,

for-ahyun.tistory.com

HTTP 헤더 내용 참고

 

분류

 

RFC2616(과거) - 1999년

HTTP/1.1 200 OK
Content-Type: text/html;charset=UTF-8
Content-Length: 3423
<html>
    <body>...</body>
</html>

1) HTTP 헤더

- General 헤더 : 메시지 전체에 적용되는 정보

- Request 헤더 : 요청 정보

- Response 헤더 : 응답 정보

- Entity 헤더 : 엔티티 바디 정보

 

2) HTTP 바디

- 엔티티 본문은 요청이나 응답에서 전달할 실제 데이터

- 엔티티 헤더는 엔티티 데이터를 해석할 수 있는 정보(데이터 유형, 길이, 압축 정보 등) 제공

▶ 폐기됨

 

RFC723x(최신) - 2014년

* 엔티티(Entity) → 표현(Representation)

* 표현(Representation)

    = 표현 메타데이터(Representation Metadata) + 표현 데이터(Representation Data)

HTTP 바디

- 메시지 본문(message body)을 통해 표현 데이터 전달

- 메시지 본문 = 페이로드(payload)

- 표현은 요청이나 응답에서 전달할 실제 데이터

- 표현 헤더표현 데이터를 해석할 수 있는 정보(데이터 유형, 길이, 압축 정보 등) 제공

 

2. 표현

Content-Type: text/html;charset=UTF-8
Content-Length: 3423

 

Content-Type : 표현 데이터 형식

- 미디어 타입, 문자 인코딩  ex) text/html;charset=utf-8, application/json, image/png

 

Content-Encoding : 표현 데이터의 압축 방식

- 표현 데이터를 압축하기 위해 사용

- 데이터를 전달하는 곳에서 압축 후 인코딩 헤더 추가 → 데이터를 읽는 곳에서 인코딩 헤더 정보로 압축 해제

ex) gzip, deflate, identity(압축x)

 

Content-Language: 표현 데이터의 자연 언어 ex) ko, en, en-US

 

Content-Length : 표현 데이터의 길이 - 바이트 단위, Transfer-Encoding 사용 시 Content-Length 사용하면 안됨

* 표현 헤더는 전송, 응답 둘 다 사용

 

3. 콘텐츠 협상(Content Negotiation)

: 클라이언트가 선호하는 표현 요청

 

① Accept : 클라이언트가 선호하는 미디어 타입 전달

② Accept-Charset : 클라이언트가 선호하는 문자 인코딩

③ Accept-Encoding : 클라이언트가 선호하는 압축 인코딩 

④ Accept-Language : 클라이언트가 선호하는 자연 언어

Accept-Language 적용 전
Accept-Language 적용 후

* 협상 헤더는 요청시에만 사용

 

협상과 우선순위

 

- Quality Values(q) 값 사용

- 0 ~ 1, 클수록 높은 우선순위(생략시 1)

GET /event
Accept-Language: ko-KR,ko;q=0.9,en-US;q=0.8,en;q=0.7

▶ ko-KR;q=1 → ko;q=0.9 → en-US;q=0.8 → en;q=0.7

 

- 구체적인것이 우선

GET /event
Accept: text/*, text/plain, text/plain;format=flowed, */*

▶text/plain;format=flowed → text/plain → text/* → */*

 

- 구체적인 것을 기준으로 미디어 타입을 맞춤

 

4. 전송 방식

1) 단순 전송

- 메시지 바디에 대한 Content-Length를 지정(콘텐츠의 길이를 알 때)

- 한 번에 요청하고 한 번에 받음

 

2) 압축 전송

- 압축 후 Content-Encoding을 추가하여 전송

 

3) 분할 전송

HTTP/1.1 200 OK
Content-Type: text/plain
Transfer-Encoding: chunked

5
Hello
5
World
0
\r\n

▶ 5바이트 Hello 전송 → 5바이트 World 전송 → 마지막을 표현하는 0바이트 전송

- 분할하여 전송할 경우 오는대로 바로 표시 가능

- Content-Length 사용 불가(예상 불가)

 

4) 범위 전송

HTTP/1.1 200 OK
Content-Type: text/plain
Content-Range: bytes 1001-2000 / 2000

qweqwe1l2iu3019u2oehj1987askjh3q98y

- 범위 지정해서 전송 / 마지막 길이