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