03.Header

HTTP Header

HTTP 해더 (일반 헀더)

HTTP/1.1 200 OK         -- start line

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

-- Message Body
<html>
 <body>...</body>
</html>
---

HTTP 헀더

  • header-field

    • field-name: field-value

    • HTTP 전솑에 ν•„μš”ν•œ λͺ¨λ“  뢀가정보

      • ex) Mesasage body λ‚΄μš©/크기, μ••μΆ•, 인증, μ„œλ²„ 정보 λ“±..

ν‘œν˜„

  • ν‘œν˜„μ€ μš”μ²­μ΄λ‚˜ μ‘λ‹΅μ—μ„œ 전달할 μ‹€μ œ 데이터

  • ν‘œν˜„ ν—€λ”λŠ” ν‘œν˜„ 데이터λ₯Ό 해석할 수 μžˆλŠ” 정보 제곡

  • ν‘œν˜„ 헀더

    • Content-Type : ν‘œν˜„ λ°μ΄ν„°μ˜ ν˜•μ‹

      • text/html; charset=utf-8

      • application/json

      • image/png

    • Content-Encoding : ν‘œν˜„ λ°μ΄ν„°μ˜ μ••μΆ• 방식

      • gzip

      • deflate

      • identity

    • Content-Language : ν‘œν˜„ λ°μ΄ν„°μ˜ μžμ—° μ–Έμ–΄

      • ko

      • en

      • en-US

    • Content-Length : ν‘œν˜„ λ°μ΄ν„°μ˜ 길이(Byte)

Content negotiation

Clientκ°€ μ„ ν˜Έν•˜λŠ” ν‘œν˜„ μš”μ²­ (μš”μ²­μ‹œμ—λ§Œ μ‚¬μš©)

rfc7231 Accept

  • Accept : Clientκ°€ μ„ ν˜Έν•˜λŠ” λ―Έλ””μ–΄ νƒ€μž… 전달

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

  • Accept-Charset : Clientκ°€ μ„ ν˜Έν•˜λŠ” 문자 인코딩

  • Accept-Encoding : Clientκ°€ μ„ ν˜Έν•˜λŠ” μ••μΆ• 인코딩

  • Accept-Language : Clientκ°€ μ„ ν˜Έν•˜λŠ” μžμ—° μ–Έμ–΄

    • Accept-Language: ko-KR,ko;q=0.9,en-US;q=0.8,en;q=0.7

전솑 방식

λ‹¨μˆœ 전솑

  • Content-Length: 3423

μ••μΆ• 전솑

  • Content-Encoding: gzip

λΆ„ν•  전솑

  • Transfer-Encoding: chunked

λ²”μœ„ 전솑

  • Content-Range: bytes 1001-2000 / 2000

일반 정보

Form

  • User agent email 정보 (μš”μ²­)

Referer

  • 이전 μ›Ή νŽ˜μ΄μ§€ μ£Όμ†Œ (μš”μ²­)

User-Agent

  • User-Agent Application 정보 (μš”μ²­)

  • Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36

Server

  • μš”μ²­μ„ μ²˜λ¦¬ν•˜λŠ” ORIGIN μ„œλ²„μ˜ μ†Œν”„νŠΈμ›¨μ–΄ 정보 (응닡)

  • Apache/2.2.22

Date

  • λ©”μ‹œμ§€κ°€ λ°œμƒν•œ λ‚ μ§œμ™€ μ‹œκ°„ (응닡)

νŠΉλ³„ν•œ 정보

Host

  • μš”μ²­ν•œ 호슀트의 정보 (도메인)

  • μš”μ²­μ—μ„œ ν•„μˆ˜

  • ν•˜λ‚˜μ˜ IP에 μ—¬λŸ¬ 도메인이 μ μš©λ˜μ—ˆμ„ 경우

Location

  • νŽ˜μ΄μ§€ λ¦¬λ‹€μ΄λ ‰μ…˜

  • 3xx μ‘λ‹΅μ˜ 결과에 Location 헀더가 있으면, Location μœ„μΉ˜λ‘œ μžλ™ 이동

  • 201 (Created), 3xx (Redirection)

인증

Authorization

  • ν΄λΌμ΄μ–ΈνŠΈ 인증 정보λ₯Ό μ„œλ²„μ— 전달

  • Authorization: Basic czZCaGRSa3F0MzpnWDFmQmF0M2JW

WWW-Authenticate

  • λ¦¬μ†ŒμŠ€ μ ‘κ·Όμ‹œ ν•„μš”ν•œ 인증 방법 μ •μ˜

μΏ ν‚€

Set-Cookie

  • μ„œλ²„μ—μ„œ ν΄λΌμ΄μ–ΈνŠΈλ‘œ μΏ ν‚€ 전달(응닡)

Cookie

  • ν΄λΌμ΄μ–ΈνŠΈκ°€ μ„œλ²„μ—μ„œ 받은 μΏ ν‚€λ₯Ό μ €μž₯ν•˜κ³ , HTTP μš”μ²­μ‹œ μ„œλ²„λ‘œ 전달

λ™μž‘

  1. 둜그인

  2. μ„œλ²„λŠ” Set-Cookie에 user 정보λ₯Ό λ‹΄μ•„μ„œ 응닡

  3. μ›ΉλΈŒλΌμš°μ € λ‚΄λΆ€ μΏ ν‚€ μ €μž₯μ†Œμ— μΏ ν‚€(user) 정보 μ €μž₯

  4. 둜그인 이후 μš”μ²­μ„ 보낼 λ•Œλ§ˆλ‹€ μžλ™μœΌλ‘œ μΏ ν‚€ μ €μž₯μ†Œλ₯Ό 쑰회 ν›„ Cookie 헀더λ₯Ό λ§Œλ“€μ–΄μ„œ μ„œλ²„μ— 전솑

μ‚¬μš©

  • μ‚¬μš©μž 둜그인 μ„Έμ…˜ 관리

  • κ΄‘κ³  정보 νŠΈλž˜ν‚Ή

μΏ ν‚€ μ •λ³΄λŠ” 항상 μ„œλ²„μ— 전솑

  • λ„€νŠΈμ›Œν¬ νŠΈλž˜ν”½ μΆ”κ°€ 유발

  • μ΅œμ†Œν•œμ˜ μ •λ³΄λ§Œ μ‚¬μš©(session id, 인증 token)

  • μ›Ή μŠ€ν† λ¦¬μ§€(localStorage, sessionStorage)λ₯Ό μ‚¬μš©ν•˜μ—¬ μ›Ή λΈŒλΌμš°μ € 내뢀에 데이터 μ €μž₯ κ°€λŠ₯

생λͺ…μ£ΌκΈ°

  • Set-Cookie

    • expires=Sat, 26-Dec-2020 04:39:21 GMT

    • max-age=3600 (sec)

    • domain=google.com

      • λͺ…μ‹œ : λͺ…μ‹œ 도메인 + μ„œλΈŒ 도메인

      • μƒλž΅ : ν˜„μž¬ λ¬Έμ„œ κΈ°μ€€ 도메인

    • path=/

      • λͺ…μ‹œ 경둜 포함 ν•˜μœ„ 경둜

    • Secure

      • https인 κ²½μš°μ—λ§Œ μΏ ν‚€ 전솑

    • HttpOnly

      • XSS 곡격 방지 / JSμ—μ„œ μ ‘κ·Ό λΆˆκ°€

    • SameSite

      • XSRF 곡격 방지

      • μš”μ²­ 도메인과 μΏ ν‚€ μ„€μ • 도메인이 같은 κ²½μš°μ—λ§Œ μΏ ν‚€ 전솑

  • μ„Έμ…˜ μΏ ν‚€: 만료 λ‚ μ§œλ₯Ό μƒλž΅ν•˜λ©΄ λΈŒλΌμš°μ € μ’…λ£Œμ‹œ κΉŒμ§€λ§Œ μœ μ§€

  • μ˜μ† μΏ ν‚€: 만료 λ‚ μ§œλ₯Ό μž…λ ₯ν•˜λ©΄ ν•΄λ‹Ή λ‚ μ§œκΉŒμ§€ μœ μ§€


HTTP 해더 (μΊμ‹œμ™€ 쑰건뢀 μš”μ²­)

μΊμ‹œ κΈ°λ³Έ λ™μž‘

λ™μž‘

  1. μΊμ‹œ 유효 μ‹œκ°„ μ„€μ • -> cache-control: max-age=60

  2. 응닡 κ²°κ³Όλ₯Ό λΈŒλΌμš°μ € μΊμ‹œμ— μ €μž₯

  3. 두 번째 μš”μ²­ μ‹œ μΊμ‹œλ₯Ό 탐색 ν›„ μΊμ‹œμ—μ„œ 쑰회 (λ„€νŠΈμ›Œν¬ μ‚¬μš©λŸ‰ κ°μ†Œ)

  4. μž¬μš”μ²­ μ‹œ μΊμ‹œ 유효 μ‹œκ°„μ΄ μ΄ˆκ³Όλ˜μ—ˆλ‹€λ©΄ κ°±μ‹ 

검증 헀더와 쑰건뢀 μš”μ²­ (Last-Modified)

  • μΊμ‹œ λ§Œλ£Œν›„μ—λ„ μ„œλ²„μ—μ„œ 데이터λ₯Ό λ³€κ²½ν•˜μ§€ μ•Šμ•˜λ‹€λ§Œ μ €μž₯ν•΄ λ‘μ—ˆλ˜ μΊμ‹œλ₯Ό μž¬μ‚¬μš© ν•  수 μžˆλ‹€.

  • 초기 μš”μ²­ μ‹œ 데이터 μ΅œμ’… μˆ˜μ •μΌμ„ μΊμ‹œμ— ν•¨κ»˜ μ €μž₯ (검증 헀더)

    • Last-Modified: Wed, 21 July 2021 07:28:00 GMT

  • μΊμ‹œ μ‹œκ°„ 초과 ν›„ μž¬μš”μ²­ μ‹œ 데이터 μ΅œμ’… μˆ˜μ •μΌμ„ 헀더에 ν•¨κ»˜ 전달 (쑰건뢀 μš”μ²­)

    • if-modified-since: Wed, 21 July 2021 07:28:00 GMT

  • μ„œλ²„μ—μ„œ 데이터가 μˆ˜μ •λ˜μ§€ μ•Šμ€κ²Œ ν™•μΈλ˜λ©΄ 304 Not Modified 둜 응닡

    • HTTP BodyλŠ” ν¬ν•¨ν•˜μ§€ μ•Šκ³  Header 메타 μ •λ³΄λ§Œ 응닡

  • ν΄λΌμ΄μ–ΈνŠΈλŠ” μΊμ‹œμ— μ €μž₯λ˜μ–΄ μžˆλŠ” 데이터 μž¬μ‚¬μš©

검증 헀더와 쑰건뢀 μš”μ²­ (ETag)

  • Entity Tag : Last-Modified의 단점 보완

  • μΊμ‹œ μ œμ–΄ λ‘œμ§μ„ μ„œλ²„μ—μ„œ 관리

    • μΊμ‹œ λ°μ΄ν„°λŠ” μž„μ˜μ˜ 고유 버전 ν˜Ήμ€ Hash 이름 보유

  • 초기 μš”μ²­ μ‹œ ETagλ₯Ό μΊμ‹œμ— ν•¨κ»˜ μ €μž₯ (검증 헀더)

    • ETag: "a2jiodwjekjl3"

  • μΊμ‹œ μ‹œκ°„ 초과 ν›„ μž¬μš”μ²­ μ‹œ ETagλ₯Ό 헀더에 ν•¨κ»˜ 전달 (쑰건뢀 μš”μ²­)

    • If-None-Match: "aaaaaaaaaa"

  • μ„œλ²„μ—μ„œ 데이터가 μˆ˜μ •λ˜μ§€ μ•Šμ€κ²Œ ν™•μΈλ˜λ©΄ 304 Not Modified 둜 응닡

    • HTTP BodyλŠ” ν¬ν•¨ν•˜μ§€ μ•Šκ³  Header 메타 μ •λ³΄λ§Œ 응닡

  • ν΄λΌμ΄μ–ΈνŠΈλŠ” μΊμ‹œμ— μ €μž₯λ˜μ–΄ μžˆλŠ” 데이터 μž¬μ‚¬μš©

μΊμ‹œμ™€ 쑰건뢀 μš”μ²­ 헀더

Cache-Control : μΊμ‹œ μ œμ–΄

  • max-age : μΊμ‹œ 유효 μ‹œκ°„ (초)

  • no-cache : (μ΄ν„°λŠ” μΊμ‹œν•΄λ„ λ˜μ§€λ§Œ), ν”„λ‘μ‹œ μΊμ‹œκ°€ μ•„λ‹Œ 항상 μ›μ„œλ²„μ— 변경사항 검증 ν›„ μ‚¬μš©

  • no-store : 데이터에 λ―Όκ°ν•œ 정보가 μžˆμœΌλ―€λ‘œ μ €μž₯ X

  • must-revalidate : μΊμ‹œ 만료 ν›„ 졜초 쑰회 μ‹œ 원 μ„œλ²„μ— 검증

ν”„λ‘μ‹œ μ„œλ²„

  • ν•΄μ™Έ μ›μ„œλ²„μ— μžˆλŠ” 데이터λ₯Ό λΈŒλΌμš°μ €μ—μ„œ(private cache)λΉ λ₯΄κ²Œ μ΄μš©ν•˜κΈ° μœ„ν•΄ 쀑간(ν”„λ‘μ‹œ μΊμ‹œ μ„œλ²„, public cache)μ—μ„œ 곡용으둜 μ‚¬μš©ν•˜λŠ” μΊμ‹œ μ„œλ²„

μΊμ‹œ μ§€μ‹œμ–΄(directives)

  • Cache-Control: public

    • 응닡이 public μΊμ‹œμ— μ €μž₯ κ°€λŠ₯

  • Cache-Control: private

    • 응닡이 ν•΄λ‹Ή μ‚¬μš©μžλ§Œμ„ μœ„ν•œ 것, private μΊμ‹œμ— μ €μž₯(κΈ°λ³Έκ°’)

μΊμ‹œ λ¬΄νš¨ν™”

Cache-Control: no-cache, no-store, must-revalidate

Pragma: no-cache # HTTP 1.0 ν•˜μœ„ ν˜Έν™˜

Reference

HTTP μŠ€νŽ™ : RFC 7230~7235

HTTP μ™„λ²½κ°€μ΄λ“œ λ„μ„œ

Last updated