[혼공네트]5주차_Chap05 정리 (2)

임지·2025년 8월 19일
0

혼공네트

목록 보기
6/7

1. HTTP 헤더 (1)

1-1. 요청 시 자주 사용

1) Host

  • 요청을 보내는 호스트
  • 도메인 네임, 포트번호
GET /exmaple/post.html HTTP/1.1
Host: example.com

2) User-Agent

  • HTTP 요청을 시작하는 클라이언트 측 프로그램
  • OS나, 브라우저, 렌더링 엔진 등의 정보를 포함
  • 서버로 하여금 클라이언트의 접속환경을 유추할 수 있도록 함

3) Referer

  • (다른 웹페이지로 이동하기 전에) 클라이언트가 머무르고 있던 URL 명시
  • 서버로 하여금 클라이언트의 유입 경로를 파악할 수 있도록 함
Referer: https://en.wikipedia.org/

4) Authorization

  • 클라이언트의 인증 정보
  • 인증 정보는 인증 타입과 정보로 나뉨
    - 타입 : 인증 방식
    - 정보 : 해당 타입으로 생성한 정보
  • 대표적인 인증 타입은 Basic 방식
    : id와 비밀번호를 Base46 인코딩하는 방법
  • 인증 타입으로는 토큰을 사용한 인증 방식도 존재
Authorization: Basic dlfiaweg135er

1-2. 응답시 자주 사용

1) Server

  • 서버 측 소프트웨어 정보를 포함
  • 아래 정보는 Unix 운영체제 하에서 동작하는 아파치 HTTP 서버를 의미
Server: Apache/2.4.1 (Unix)

2) Allow

  • 클라이언트에게 허용된 메서드 목록을 반환
  • 상태코드 405(Method Not Allowed)와 함께 사용됨
HTTP/1.1 405 Method Not Allowed

(중략)

Allow: POST, OPTIONS

3) Retry-After

  • 자원을 사용할 수 있는 날짜, 시각을 반환
  • 상태코드의 503(Service Unavailable)과 함께 사용됨
HTTP/1.1 503 Service Unavailable

(중략)

// 날짜를 알려주는 경우 
Retry-After: Wed, 20 Aug 2025 09:00:00 GMT
// 시간을 알려주는 경우 (단위 : 초)
Retry-After: 120

4) Location

  • 자원의 위치를 알려주는 헤더
  • 상태코드 201(Created) 등, 보통 새로운 자원이 생성되었을 때 생성된 자원의 위치를 알려주기 위해 사용

5) WWW-Authenticate

  • 클라이언트에게 인증 방법을 설명하기 위한 헤더
  • Autorization 헤더와 엮어서 알아두기
// 인증 타입 명시
WWW-Authenticate: Basic

// 보안 영역, 문자집합도 함께 명시
WWW-Authenticate: Basic realm="Access to engineering site", charset="UTF-8"

⭐ 6) HTTP 인증

  1. 인증 X인 클라이언트가 서버에 GET 요청
  2. 서버가 401(Unauthorized) 상태코드와 함께 WWW-authenticate헤더에 인증 방식을 함께 응답
  3. 인증을 받기 위해 클라이언트는 사용자로부터 인증정보 (아이디, 비밀번호 등)를 전달 받음
  4. Base64 인코딩 후, Authorization 헤더에 해당 정보를 명시 후 다시 요청
  5. 서버는 이를 확인하고, 인증 정보의 유효성에 따라 200(OK)나 401(Unauthorized) 상태코드를 응답

1-3. 요청과 응답 둘다 자주 사용

1) Date

  • 메세지 생성 당시 날짜나 시각

2) Connection

  • 클라이언트와 서버의 요청&응답 간 연결 방식
  • HTTP는 연결 수립 후 이를 계속 유지 - Keep alive 방식
Connection: keep-alive
Connection: close // 연결 종료 시

3) Content-Length

  • 메세지 본문의 바이트 단위 크기를 명시

4-1) Content-Type

  • 메세지 본문에서 사용된 미디어 타입
  • 아래 헤더는 메세지 본문이 HTML 문서 형식이고, 문자 인코딩은 UTF-8 방식을 사용한다는 의미
Content-Type: text/html; charset=UTF-8

4-2) Content-Language

  • 메세지 본문에 사용된 자연어 (어떤 언어로 작성되었는지)
  • 첫 번째 서브태그는 언어를, 두 번째 서브태그는 나라를 의미
  • 언어는 소문자로, 나라는 대문자로 적음
언어언어코드국가국가코드
한국어ko한국KR
영어en미국/영국US/GB
중국어zh중국CN
일본어jp일본JP
프랑스어fr프랑스FR
독일어de독일DE

4-3) Content-Encoding

  • 메세지 본문을 압축하거나, 변환한 방식
  • 여러 인코딩이 사용되었다면 적용된 순서대로 이를 명시

2. HTTP 헤더 (2)

2-1. 캐시 관련 헤더 (날짜 기준)

1) Expires

  • 캐시된 데이터의 유효 기간을 설정
  • 해당 날짜까지만 데이터가 유효하도록 함
Expires: Wed, 20 Aug 2025 09:00:00 GMT

2) Cach-Control 헤더의 Max-Age 값

  • 캐시된 데이터의 유효 시간을 설정
  • 적혀진 시간 (단위: 초)만큼만 데이터가 유효하도록 함
Cache-Control: max-age=1200

3) If-Modified-Since

  • 클라이언트 측에서 서버에게 특정 날짜 이후로 원본 데이터 변경 여부를 묻는 헤더
  • 변경된 경우 상태코드 200(OK)와 함께 새로운 자원을 반환
  • 변경되지 않은 경우 상태코드 304(Not Modified)를 반환
  • 삭제된 경우 상태코드 404(Not Found)를 반환
GET /index.html HTTP/1.1
Host: www.example.com
If-Modified-Since: Wed, 20 Aug 2025 09:00:00 GMT

4) Last-Modified

  • 서버 측에서 응답 시, 원본 데이터의 마지막 변경 시점을 함께 알려줌
  • 보통 304(Not Modified) 상태코드와 함께 사용됨
Last-Modified: Mon, 18 Aug 2025 09:00:00 GMT

2-2. 캐시 관련 헤더 (엔티티 기준)

1) If-None-Match

  • 자원의 버전을 식별하기 위해 사용
  • 해당 Etag값과 일치하는 자원이 있는지를 확인하기 위해 사용
  • 새로운 버전이 있다면 200(OK) 상태코드와 변경된 데이터와 Etag를 반환
  • 변경되지 않았다면 304(Not Modified) 상태코드를 반환
  • 삭제된 경우 상태코드 404(Not Found)를 반환
If-None-Match: "abc"

2-3. 쿠키 관련 헤더

  • 서버 측에서 쿠키를 생성하고 이를 클라이언트에 보낼 때 사용
  • 쿠키가 여러 개인 경우, 여러 개의 Set-Cookie 헤더 사용
  • 속성 정보도 함께 보낼 수 있음
Set-Cookie: 이름=값;
Set-Cookie: 이름=값; 속성1
Set-Cookie: 이름=값; 속성1; 속성2
  • 클라이언트 측에서 서버에 요청 메세지를 보낼 때, 쿠키 정보를 함께 전송
  • 요청 시 매번 함께 전송
  • 여러 개의 쿠키 정보를 하나의 Cookie 헤더에 넣을 수 있음 (구분자: ;)
Cookie: name=jyeo0ng; phone=100-100; message=Hi

3) 속성값

  • domain : 쿠키를 사용할 도메인을 특정
  • path : 같은 도메인이어도 다른 경로면 쿠키를 구분지음
  • 유효시간 (Expires, Max-Age) : 쿠키의 유효시간

4) 보안 관련

  • Secure : HTTPS 프로토콜 사용시에만 쿠키 전송
  • HttpOnly : HTTP 프로토콜 사용시에만 쿠키 전송 (자바스크립트를 통한 접근 불가능)

2-4. 콘텐츠 협상 관련 헤더

1) Accept

  • 선호하는 미디어 타입 (요청 시)

2) Accept-Language

  • 선호하는 언어 타입

3) Accept-Charset, Accept-Encoding

  • 선호하는 인코딩 방식
Accept-Language: ko-KR, ko;q=0.9, en-US;q=0.8
// q의 숫자는 0~1 사이의 값, 클 수록 우선순위가 높음

0개의 댓글