ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 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

     

    - 보내야되는 데이터 범위를 따로 지정해서 보낼 수 있음

Designed by Tistory.