[HTTP] 헤더 (1)

이병수·2024년 1월 2일
0

HTTP 웹 기본 지식

목록 보기
7/10

HTTP 헤더

이 글은 모든 개발자를 위한 HTTP 웹 기본 지식 - 김영한 님의 강의를 듣고 정리한 내용입니다.


HTTP 헤더에는 (필드 이름 : 필드 값) 이 들어가 있다.

HTTP 헤더 용도

  • HTTP 전송에 필요한 모든 부가 정보들이 들어가 있다.

  • 예시) 메시지 바디 내용, 메시지 바디의 크기, 압축, 인증, 요청 클라이언트, 서버 정보, 캐시 관리 정보 등..

  • 필요시 임의의 헤더 추가 가능

HTTP BODY

message body - RFC7230(최신)

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

  • 메시지 본문 = 페이로드(pay load)

  • 표현 은 요청이나 응답에서 전달할 실제 데이터를 의미

  • 표현 헤더표현 데이터를 해석할 수 있는 정보 제공

    • 데이터 유형(html,json), 데이터 길이, 압축 정보 등등..

GET 메서드를 제외한 나머지들은 다 payload (메시지 본문)을 보낼 수 있다는 것이 HTTP의 약속

표현

  • Content-Type : 표현 데이터의 형식

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

  • Content-Language : 표현 데이터의 자연 언어

  • Content-Length : 표현 데이터의 길이


  • 표현 헤더는 전송, 응답 둘 다 사용한다.

1. Content-Type

표현 데이터의 형식 설명

  • 미디어 타입, 문자 인코딩

  • 예시)

    • text/html; charset=utf-8

    • application/json -> json 타입은 기본이 utf-8

    • image/png ... 등등


2. Content-Encoding

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

  • 데이터를 전달하는 곳에서 압축 후 인코딩 헤더를 추가한다.

  • 데이터를 읽는 쪽에서 인코딩 헤더의 정보로 압축을 해제한다.

  • 예시)

    • gzip

    • deflate

    • identity


3. Content-Language

표현 데이터의 자연 언어

  • 표현 데이터의 자연 언어를 표현

  • 예시)

    • ko

    • en

    • en-US


4. Content-Length

표현 데이터의 길이

  • 바이트 단위

  • Transfer-Encoding(전송 코딩)을 사용하면 Content-Length를 사용하면 안됨


협상(콘텐츠 네고시에이션)

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

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

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

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

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


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

협상과 우선순위1

Quality Values(q)

  • Quality Values(q)값 사용

  • 0~1, 클수록 높은 우선순위를 갖는다.

  • 생략하면 1을 갖는다.

협상과 우선순위2

Quality Values(q)

  • 구체적인 것이 우선한다.

  • Accept: text/*, text/plain, text/plain;format=flowed, */*

    1. text/plain;format=flowed

    2. text/plain

    3. text/*

    4. */*

  • 이런 순위로 우선한다.

협상과 우선순위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

전송 방식

  • Transfer-Encoding

  • Range, Content-Range


전송 방식 설명

  • 단순 전송

  • 압축 전송

  • 분할 전송

  • 범위 전송



1. 단순 전송


2. 압축 전송


3. 분할 전송


4. 범위 전송

profile
백엔드 개발자가 되고 싶어요

0개의 댓글