[Spring] HTTP Header

늘보·2025λ…„ 2μ›” 10일

Spring

λͺ©λ‘ 보기
9/24
post-thumbnail

πŸ’‘ μ‹€μ œ HTTP Header ν™•μΈν•˜λŠ” 방법
Β Β Β Β Β κ°œλ°œμžλ„κ΅¬(F12) ➑︎ Network νƒ­ 클릭 ➑︎ Fetch/XHR νƒ­ 클릭 ➑︎ 우츑 Header 정보



Header

β—ν‘œμ€€μœΌλ‘œ μ„€μ •λœ Header의 μˆ˜κ°€ ꡉμž₯히 많기 λ•Œλ¬Έμ—, μ™Έμš°μ§€ μ•Šκ³  ν•„μš” μ‹œ μ°Ύμ•„μ„œ μ‚¬μš©ν•˜λ©΄ λœλ‹€.
Β Β Β Β [ν‘œμ€€ 헀더]


ν‘œν˜„ Header (Representation)

μ‹€μ œ 데이터 전솑 μ‹œ μ–΄λ–€ ν˜•μ‹μœΌλ‘œ λ³€ν™˜ν–ˆλŠ”μ§€, λ³€ν™˜ ν˜•νƒœλ₯Ό μ•Œλ €μ£ΌλŠ” Header이닀.
➑︎ μš”μ²­κ³Ό 응닡에 λͺ¨λ‘ μ‚¬μš©λœλ‹€.

μ’…λ₯˜

1) Content-Type

  • 전솑할 λ°μ΄ν„°μ˜ λ―Έλ””μ–΄ νƒ€μž…, 문자 인코딩을 λ‚˜νƒ€λ‚Έλ‹€.

    [λ―Έλ””μ–΄ νƒ€μž…] : μ „μ†‘λ˜λŠ” λ°μ΄ν„°μ˜ ν˜•μ‹μ„ μ˜λ―Έν•œλ‹€. ➑︎ text/html, application/json β€’β€’β€’ λ“±
    [문자 인코딩] : text 데이터λ₯ΌUTF-8 인코딩 λ°©μ‹μœΌλ‘œ μ „λ‹¬ν•œλ‹€λŠ” μ˜λ―Έμ΄λ‹€. ➑︎ text/html; charset=utf-8

2) Content-Encoding

  • 데이터 μ••μΆ• 방식을 μ˜λ―Έν•œλ‹€.
  • 데이터 μ••μΆ• ν›„ Encoding Headerλ₯Ό μΆ”κ°€ν•˜λ©΄, μ½λŠ” μͺ½μ—μ„œ ν•΄λ‹Ή 정보λ₯Ό μ••μΆ• ν•΄μ œν•œλ‹€.
    gzip
    identity : μ••μΆ•ν•˜μ§€ μ•ŠμŒμ„ λ‚˜νƒ€λ‚Έλ‹€.

3) Content-Language

  • λ°μ΄ν„°μ˜ μ–Έμ–΄λ₯Ό ν‘œν˜„ν•œλ‹€. ➑︎ ko, en

3) Content-Length

  • λ°μ΄ν„°μ˜ 길이λ₯Ό ν‘œν˜„ν•œλ‹€.
  • μ‹€μ œλ‘œλŠ” ν‘œν˜„ 헀더가 μ•„λ‹Œ, νŽ˜μ΄λ‘œλ“œ(Payload) 헀더 이닀.
  • Byte λ‹¨μœ„λ‘œ λ‚˜νƒ€λ‚Έλ‹€.


μ»¨ν…νŠΈ ν˜‘μƒ Header (Content Negotiation)

  • ν΄λΌμ΄μ–ΈνŠΈκ°€ μš”μ²­ν•  λ•Œ μ„ ν˜Έν•˜λŠ” ν‘œν˜„μ„ μš”μ²­ν•œλ‹€.
  • ν˜‘μƒ ν—€λ”μ˜ 경우 μš°μ„ μˆœμœ„κ°€ μ‘΄μž¬ν•œλ‹€. ➑︎ 0 ~ 1μ‚¬μ΄μ˜ 값이 μ‘΄μž¬ν•˜λ©°, 1에 κ°€κΉŒμšΈ 수둝 μš°μ„ μˆœμœ„κ°€ λ†’λ‹€.
    1인 경우 μƒλž΅ κ°€λŠ₯

      ex ➑︎ Accept-Language: ko-KR,en-US;q=0.9,en;q=0.8


πŸ’‘ qκ°€ μƒλž΅λ˜μ—ˆλ‹€λ©΄ μ„ μ–Έλœ μˆœμ„œλŒ€λ‘œ μš°μ„ μˆœμœ„λ₯Ό κ°€μ§„λ‹€.
Β Β Β  Accept: application/json, text/plain, */*
     ➑︎ application/json ➑︎ text/plain ➑︎ */*

πŸ’‘κ΅¬μ²΄μ μœΌλ‘œ μ„ μ–Έλœ 것이 μš°μ„ μˆœμœ„κ°€ λ†’λ‹€.

  • μ’…λ₯˜
    • Accept : μ„ ν˜Έν•˜λŠ” λ―Έλ””μ–΄ νƒ€μž…
    • Accept-Charset : μ„ ν˜Έν•˜λŠ” 문자 인코딩
    • Accept-Encoding : μ„ ν˜Έν•˜λŠ” μ••μΆ• 인코딩
    • Accept-Language : μ„ ν˜Έν•˜λŠ” μ–Έμ–΄


일반 정보λ₯Ό λ‚˜νƒ€λ‚΄λŠ” Header

From : ν΄λΌμ΄μ–ΈνŠΈ 이메일 정보

  • 잘 μ‚¬μš©ν•˜μ§€ μ•ŠλŠ”λ‹€.

Referer : ν˜„μž¬ μš”μ²­λœ νŽ˜μ΄μ§€μ˜ 이전 μ›Ή μ£Όμ†Œ

  • μš”μ²­ μ‹œ μ‚¬μš©λ˜λŠ” Header둜 μœ μž… 경둜λ₯Ό νŒŒμ•…ν•˜κΈ° μœ„ν•΄μ„œ μ‚¬μš©λœλ‹€.

User-Agent : ν΄λΌμ΄μ–ΈνŠΈ μ• ν”Œλ¦¬μΌ€μ΄μ…˜ 정보 (PC, Mobile λΈŒλΌμš°μ €)

  • μš”μ²­ μ‹œ μ‚¬μš©λ˜λŠ” Header둜 μ–΄λ–€ν™˜κ²½μ— 주둜 μ ‘μ†ν•˜λŠ”μ§€ ν†΅κ³„ν•˜κ³  μ–΄λ–€ ν™˜κ²½μ—μ„œ μž₯μ• κ°€ λ°œμƒν–ˆλŠ”μ§€ νŒŒμ•… κ°€λŠ₯ν•˜λ‹€.

Server : μš”μ²­μ„ μ²˜λ¦¬ν•˜λŠ” μ„œλ²„ 정보

  • 응닡 μ‹œ μ‚¬μš©ν•œλ‹€.

Date : HTTP μš”μ²­μ΄ λ°œμƒν•œ λ‚ μ§œμ™€ μ‹œκ°„

  • 응닡 μ‹œ μ‚¬μš©ν•œλ‹€.


νŠΉλ³„ 정보λ₯Ό λ‚˜νƒ€λ‚΄λŠ” Header

Host : 도메인 정보

  • μš”μ²­ μ‹œμ—λ§Œ μ‚¬μš©ν•˜λ©°, ν•„μˆ˜μ μœΌλ‘œ ν¬ν•¨ν•΄μ•Όν•œλ‹€.

Location : μƒμ„±λœ λ¦¬μ†ŒμŠ€ URI

  • μ‘λ‹΅μ½”λ“œ 3xx와 ν•¨κ»˜ μ‘λ‹΅λ˜λ©΄ λ¦¬λ‹€μ΄λ ‰νŠΈ μ£Όμ†Œμ΄λ‹€.
  • μ‘λ‹΅μ½”λ“œ 201(Created)와 ν•¨κ»˜ μ‘λ‹΅λ˜λ©΄ μƒμ„±λœ λ¦¬μ†ŒμŠ€μ˜ URI 이닀.

Allow : ν—ˆμš© κ°€λŠ₯ν•œ HTTP Method

  • μ‘λ‹΅μ½”λ“œ 405 (Method Not Allowed)와 ν•¨κ»˜ μ‘λ‹΅λœλ‹€.

Retry-After : λ‹€μŒ μš”μ²­κΉŒμ§€ λŒ€κΈ°ν•΄μ•Όν•˜λŠ” μ‹œκ°„

  • μ‘λ‹΅μ½”λ“œ 503 (Service Unavailable)와 ν•¨κ»˜ μ„œλΉ„μŠ€κ°€ μ–Έμ œκΉŒμ§€ μ‚¬μš©μ΄ λΆˆκ°€ν•œμ§€ μ•Œλ €μ€€λ‹€.


인증 Header

Authorization : ν΄λΌμ΄μ–ΈνŠΈ 인증 정보

  • ν΄λΌμ΄μ–ΈνŠΈκ°€ 인증 정보λ₯Ό 헀더에 ν¬ν•¨μ‹œμΌœ μ„œλ²„μ— μš”μ²­ν•  λ•Œ μ‚¬μš©ν•œλ‹€.

WWW-Authenticate : λ¦¬μ†ŒμŠ€μ— ν•„μš”ν•œ 인증 방법

  • μ‘λ‹΅μ½”λ“œ 401 (Unauthorized)와 ν•¨κ»˜ μ‚¬μš©λ˜λ©°, 쑰회, 생성 μ‹œ ν•„μš”ν•œ 인증 방법을 λ‚˜νƒ€λ‚Έλ‹€.


Cookie

  • HTTPλŠ” StateLess νŠΉμ„±μ„ κ°€μ§€κ³  μžˆμ–΄ μƒνƒœλ₯Ό 맀번 보내주어야 ν•œλ‹€.
    ➑︎ μ‚¬μš©μž μ„Έμ…˜ 관리 및 κ΄‘κ³  정보 νŠΈλž˜ν‚Ήμ— 많이 μ‚¬μš©λœλ‹€.

1) Set-Cookie

  • μ„œλ²„μ—μ„œ μ‘λ‹΅μ‹œ ν΄λΌμ΄μ–ΈνŠΈλ‘œ Cookie κ°’ μ „λ‹¬ν•˜λ©°, λ§Œλ£Œμ‹œκ°„, μ‚¬μš©λ  μœ„μΉ˜λ₯Ό μ„€μ •ν•  수 μžˆλ‹€.

    ⚠️ 항상 μ„œλ²„μ— μ „λ‹¬λ˜λ‹ˆ μ΅œμ†Œν•œμ˜ μ •λ³΄λ§Œ μ‚¬μš©ν•˜μ—¬ νŠΈλž˜ν”½μ„ μ΅œμ ν™” μ‹œμΌœμ•Ό ν•œλ‹€.
    ⚠️ νƒˆμ·¨ λ‹Ήν•˜κΈ° μ‰¬μš°λ‹ˆ λ³΄μ•ˆμ— λ―Όκ°ν•œ κ°œμΈμ •λ³΄ 등은 μ €μž₯ν•˜μ§€ μ•ŠλŠ”λ‹€.


2) Cookie

  • ν΄λΌμ΄μ–ΈνŠΈκ°€ μ„œλ²„μ—μ„œ 받은 μΏ ν‚€λ₯Ό Cookie 헀더λ₯Ό 톡해 μ „μ†‘ν•œλ‹€.

3) Secure

  • ν•΄λ‹Ή 헀더가 적용되면 https인 κ²½μš°μ—λ§Œ μΏ ν‚€λ₯Ό μ „μ†‘ν•œλ‹€.

4) HTTPOnly

  • http μ „μ†‘μ—λ§Œ μ‚¬μš©ν•œλ‹€.

5) SameSite

  • 쿠킀에 μ„€μ •λœ 도메인이 같은 경우만 μΏ ν‚€λ₯Ό μ „μ†‘ν•œλ‹€.

    ➑︎ Set-Cookieμ—μ„œ μ§€μ •ν•œ μ£Όμ†Œ


Cache

1) Cache-Control (max-age)

  • μΊμ‹œ 유효 μ‹œκ°„(초)을 λ‚˜νƒ€λ‚΄λŠ” 헀더이닀.
    ➑︎ μΊμ‹œ μœ νš¨μ‹œκ°„μ΄ μ§€λ‚˜λ©΄ λ‹€μ‹œ μ„œλ²„λ₯Ό 톡해 데이트λ₯Ό 응닡받고 μΊμ‹œλ₯Ό κ°±μ‹ ν•œλ‹€.

2) Cache-Control (no-cache)

  • μΊμ‹œλŠ” κ°€λŠ₯ν•˜μ§€λ§Œ μ„œλ²„μ—μ„œ 검증 후에 μ‚¬μš©κ°€λŠ₯ν•˜λ‹€.

3) Cache-Control (no-store)

  • λ³΄μ•ˆμ— λ―Όκ°ν•œ 데이터이기 λ•Œλ¬Έμ— μΊμ‹œν•˜μ§€ μ•ŠλŠ”λ‹€.

4) if-modified-since

  • μš”μ²­ μ‹œ μ‚¬μš©λ˜λŠ” 헀더이며, μΊμ‹œλ‘œ μ €μž₯된 데이터 μ΅œμ’… μˆ˜μ •μΌ

5) Last-Modifiede

  • μ‘λ‹΅μ‹œ μ‚¬μš©ν•˜λŠ” 헀더이며, if-modified-since μš”μ²­μ΄ 였면 μ‘λ‹΅ν•œλ‹€.
  • 응닡 μ½”λ“œ 304 (Not Modified)와 ν•¨κ»˜ μ‘λ‹΅λ˜λ©΄ μˆ˜μ •λ˜μ§€ μ•Šμ•˜λ‹€λŠ” μ˜λ―Έκ°€ λœλ‹€.

    πŸ’‘if-modified-since + Last-Modified 방식은
        ➑︎ μˆ˜μ •λœ 데이터가 κ°™κ±°λ‚˜, μΊμ‹œκ°€ λΆˆν•„μš”ν•œ 경우 λ₯Ό κ΅¬λΆ„ν•˜μ§€ λͺ»ν•œλ‹€.


6) ETag

  • μš”μ²­ μ‹œ μ‚¬μš©ν•˜λŠ” 헀더이며, μΊμ‹œμš© 데이터에 λ‚ μ§œ, μ‹œκ°„μ΄ μ•„λ‹Œ 이름을 μ§€μ •ν•œλ‹€.
profile
λˆ„μ›Œλ§Œ μžˆμ§€ 말고 제발 뭐라도 ν•˜μž.

0개의 λŒ“κΈ€