Notice
Recent Posts
Recent Comments
Link
«   2024/09   »
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
Archives
Today
Total
관리 메뉴

프로그래밍 끄적끄적

[HTTP] HTTP 헤더1 - 일반 헤더 본문

HTTP

[HTTP] HTTP 헤더1 - 일반 헤더

soeunkk 2021. 11. 17. 03:16

🌳 HTTP 헤더

🍃 필드 구성방식

field-name: field-value

 

🍃 HTTP 헤더 용도

HTTP 전송에 필요한 모든 부가 정보

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

    ▪ 표준 헤더 필드 https://en.wikipedia.org/wiki/List_of_HTTP_header_fields

 

🍃 HTTP 헤더 분류

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

      ex) Connection: close

    ▪ Request 헤더: 요청 정보

      ex) User-Agent: Mozilla/5.0

    ▪ Response 헤더: 응답 정보

      ex) Server: Apache

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

      ex) Content-Type: text/html, Content-Length: 3423

 

🍃 HTTP 표준

표현 = 표현 메타데이터 + 표현 데이터

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

메시지 본문(=페이로드)을 통해 표현 데이터 전달

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

 

🌳 헤더 필드

🍃 표현

표현 헤더는 요청, 응답 둘 다 사용함

    ▪ 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: 표현 데이터의 길이

      단위: 바이트(Byte)

      Transfer-Encoding(전송 코딩)을 사용할 땐 이 헤더필드 사용 불가

 

🍃 협상

클라이언트가 선호하는 표현 요청을 나타냄 -> 요청시에만 사용

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

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

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

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

 

한 서버가 다중 언어를 지원할 때, 원하는 요구조건을 요청할 수 있다.

그러나, 서버가 처리할 수 있는 값이 아닐 땐 디폴트로 제공한다.

만약, 독일어(기본), 영어를 지원하는 서버에 한국어를 요청했을 때 처리할 수 없으므로 디폴트인 독일어를 제공한다.

요구사항을 좀 더 구체적으로 나타낼 수 있도록 협상은 우선순위 방법을 사용한다.

 

우선순위

1. 우선순위 값은 0~1이며 값이 클수록 높은 우선순위를 가진다. (생략하면 1)

[필드 값];q=[우선순위 값]

ex) Accept-Language: ko-KR,ko;q=0.9,en-US;q=0.8,en;q=0.7 (ko-KR->ko->en-US->en)

 

2. 구체적인 것이 우선순위를 가진다.

ex) Accept: text/*, text/plain, text/plain;format=flowed, */* (text/plain;format=flowed->text/plain->text/*->*/*)

 

3. 구체적인 것을 기준으로 미디어 타입을 맞춘다.

ex) Accept: text/*;q=0.3, text/html;q=0.7, text/html;level=1, text/html;level=2;q=0.4, */*;q=0.5

 

🍃 전송 방식

    ▪ 단순 전송

      데이터를 그대로 전송하는 방법

    ▪ 압축 전송 (Content-Encoding)

      ex) Content-Encoding: gzip

    ▪ 분할 전송 (Transfer-Encoding)

      이때, Content-Length를 사용해선 안됨 (예측할 수 없을 뿐더러, 분할 시 각각 길이를 적기 때문)

ex) Content-Lencth: chunked

    ▪ 범위 전송 (Content-Range)

     클라이언트는 범위를 지정해서 요청할 수 있음 (이미 받은 부분은 불필요하므로)

     ex) Content-Range: bytes 1001-2000 / 2000

 

🍃 일반 정보

    ▪ From: 유저 에이전트의 이메일 정보

      요청에서 사용

    ▪ Referer: 이전 웹 페이지 주소

      요청에서 사용, 데이터 분석할 때 많이 사용 (유입 경로)

    ▪ User-Agent: 유저 에이전트 애플리케이션 정보

      요청에서 사용, 어떤 종류의 브라우저에서 장애가 발생하는지 파악 가능, 통계 정보

    ▪ Server: 요청을 처리하는 오리진 서버의 소프트웨어 정보

      응답에서 사용

    ▪ Date: 메시지가 생성된 날짜와 시간

      응답에서 사용

 

🍃 특별한 정보

    ▪ Host: 요청한 호스트 정보(도메인)

      요청에서 사용, 필수

      하나의 서버가 여러 도메인을 처리해야 할 때

      하나의 IP주소에 여러 도메인이 적용되어있을 때

      ex) Host: www.google.com  

    ▪ Location: 페이지 리다이렉션

      웹 브라우저는 3xx 응답의 결과에 Location 헤더가 있으면 Location 위치로 자동 이동 (리다이렉트)

      201에서 사용할 땐, 요청에 의해 생성된 리소스 URI를 의미함

    ▪ Allow: 허용 가능한 HTTP 메서드

      405(Method Not Allowed) 응답에서 포함해야 함

      ex) Allow: GET, HEAD, PUT

    ▪ Retry-After: 유저 에이전트가 다음 요청을 하기까지 기다려야 하는 시간

      503(Service Unavailable) 응답에서 서비스가 언제까지 불능인지 알려줄 수 있음

 

🍃 인증

    ▪ Authorization: 클라이언트 인증 정보를 서버에 전달

    ▪ WWW-Authenticate: 리소시 접근시 필요한 인증 방법 정의

      401(Unauthorized) 응답과 함께 사용

 

🍃 쿠키

    ▪ Set-Cookie: 서버에서 클라이언트로 쿠키 전달(응답)

    ▪ Cookie: 클라이언트가 서버에서 받은 쿠키를 저장하고, HTTP 요청시 서버로 전달

 

HTTP는 무상태 프로토콜이기 때문에 클라이언트가 다시 요청하면 서버는 이전 요청을 기억하지 못한다.

따라서 이전에는 사용자가 로그인한 상태를 유지하고 싶다면 요청 메시지에 사용자 정보를 계속 포함해야 했다.

이에 대한 대안이 '쿠키'다.

클라이언트는 Set-Cookie에 정보를 넣어 요청 메시지를 보낸다. 그러면 웹브라우저는 쿠키 저장소에 그 정보를 저장한다. 이후에 다시 그 서버에 요청을 보낼 때는 쿠키 저장소에서 정보를 뒤져 서버에게 해당 정보를 추가하여 보내게 된다. 이로 인해, 헤더에 더이상 사용자 정보를 포함하지 않아도 되는 것이다. 

하지만, 쿠키 정보는 묻지도 따지지도 않고 항상 서버에 전송되기 때문에 신중히 사용해야 한다. 네트워크 트래픽이 추가로 유발될 수 있으므로 최소한의 정보(세션 id, 인증 토큰)만 사용해야 하며, 보안에 민감한 데이터(주민번호, 신용카드 번호)는 저장하지 말아야 한다. 보통은 사용자 로그인 세션 관리와 광고 정보 트래킹용으로 사용한다.

* 서버에 전송하지 않고 웹 브라우저 내부에 데이터를 저장하고 싶으면 웹 스토리지(localStorage,sessionStorage)

 

 

생명주기

    ▪ expires: 만료일이 되면 쿠키 삭제

    ▪ max-age: 초 단위, 0이나 음수를 지정하면 쿠키 삭제

 

생명주기에 따른 쿠키 분류

    ▪ 세션 쿠키: 만료 날짜를 생략하면 브라우저 종료시 까지만 유지

    ▪ 영속 쿠키: 만료 날짜를 입력하면 해당 날짜까지 유지

 

도메인

    ▪ domain: 명시한 문서 기준 도메인 + 서브 도메인이 쿠키 접근

      생략하면 현재 문서 기준 도메인만 접근 가능

 

경로

    ▪ path: 이 경로를 포함한 하위 경로 페이지만 쿠키 접근 (일반적으로 path=/[루트])

 

보안

    ▪ secure: https인 경우에만 서버에 쿠키를 전송

    ▪ HttpOnly: XSS 공격을 방지하기 위함으로, 자바스크립트에서 접근 불가

    ▪ SameSite: XSRF 공격을 방지하기 위함으로, 요청 도메인과 쿠키에 설정된 도메인이 같은 경우만 쿠키 전송

 

 


참고자료

https://www.inflearn.com/course/http-%EC%9B%B9-%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC/dashboard

 

모든 개발자를 위한 HTTP 웹 기본 지식 - 인프런 | 강의

실무에 꼭 필요한 HTTP 핵심 기능과 올바른 HTTP API 설계 방법을 학습합니다., 웹 기술을 사용하는 개발자라면 누구나 OK!꼭 필요한 HTTP의 핵심을 알려드립니다. 📣 확인해주세요!본 강의는 자바 스

www.inflearn.com

 

'HTTP' 카테고리의 다른 글

[HTTP] HTTP 헤더2 - 캐시와 조건부 요청  (0) 2021.11.17
[HTTP] HTTP 상태코드  (0) 2021.11.09
[HTTP] HTTP 메서드 활용(2)  (0) 2021.11.09
[HTTP] HTTP 메서드 활용(1)  (0) 2021.11.09
[HTTP] HTTP 메서드  (0) 2021.11.09
Comments