yeon's blog

[HTTP ์›น ๊ธฐ๋ณธ ์ง€์‹] HTTP ํ—ค๋” 1 - ์ผ๋ฐ˜ํ—ค๋” ๋ณธ๋ฌธ

HTTP

[HTTP ์›น ๊ธฐ๋ณธ ์ง€์‹] HTTP ํ—ค๋” 1 - ์ผ๋ฐ˜ํ—ค๋”

yeonii 2023. 12. 28. 13:15

๐ŸŒฑ HTTP ํ—ค๋” ๊ฐœ์š”

HTTP ํ—ค๋”

header-field = field-name ":" OWS field-values OWS (OWS: ๋„์–ด์“ฐ๊ธฐ ํ—ˆ์šฉ)

 

HTTP ์ „์†ก์— ํ•„์š”ํ•œ ๋ชจ๋“  ๋ถ€๊ฐ€์ •๋ณด๋ฅผ ๋„ฃ๋Š”๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด ๋ฉ”์‹œ์ง€ ๋ฐ”๋””์˜ ๋‚ด์šฉ, ๋ฉ”์‹œ์ง€ ๋ฐ”๋””์˜ ํฌ๊ธฐ, ์••์ถ•, ์ธ์ฆ, ์š”์ฒญ ํด๋ผ์ด์–ธํŠธ, ์„œ๋ฒ„ ์ •๋ณด, ์บ์‹œ ๊ด€๋ฆฌ์ •๋ณด.. ๋“ฑ...

ํ‘œ์ค€ ํ—ค๋”๋Š” ๊ต‰์žฅํžˆ ๋งŽ๊ณ , ํ•„์š” ์‹œ ์ž„์˜์˜ ํ—ค๋” ์ถ”๊ฐ€๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค.

 

๊ณผ๊ฑฐ์˜ HTTP ํ—ค๋” ๋ถ„๋ฅ˜๋Š” ์ƒ๋žต!

 


๐ŸŒฑ ํ‘œํ˜„

#ํ‘œํ˜„: ๋ฉ”ํƒ€ ๋ฐ์ดํ„ฐ์™€ ํ‘œํ˜„ ๋ฐ์ดํ„ฐ๋ฅผ ํ•ฉ์นœ ๊ฒƒ

 

HTTP BODY - RFC7230

 

๋ฉ”์‹œ์ง€ ๋ณธ๋ฌธ์„ ํ†ตํ•ด ์š”์ฒญ์ด๋‚˜ ์‘๋‹ต์—์„œ ์ „๋‹ฌํ•  ์‹ค์ œ ๋ฐ์ดํ„ฐ๋ฅผ ํ‘œํ˜„ ๋ฐ์ดํ„ฐ ์ „๋‹ฌ ํ•˜๋Š”๋ฐ ์‚ฌ์šฉํ•œ๋‹ค.

๋ฉ”์‹œ์ง€ ๋ณธ๋ฌธ์„ ํŽ˜์ด๋กœ๋“œ๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค. 

 

Content-Type

 

ํด๋ผ์ด์–ธํŠธ๋ž‘ ์„œ๋ฒ„ ๊ฐ„์— ์‹ค์ œ ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ  ๋ฐ›์„ ๋•Œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณ€ํ™˜ํ•ด์„œ ์ „๋‹ฌํ•ด์•ผ ํ•˜๋Š”๋ฐ,

์ด๋•Œ ํ—ค๋” Content-Type์— ๋ณ€ํ™˜ํ•  ํ˜•์‹์„ ์„ค์ •ํ•œ๋‹ค.

text/html; charset=utf-8
application/json
image/png

 

Content-Encoding

 

ํ‘œํ˜„ ๋ฐ์ดํ„ฐ๋ฅผ ์••์ถ•ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•œ๋‹ค.

์„œ๋ฒ„์—์„œ ํด๋ผ์ด์–ธํŠธ๋ฅผ ๋ณด๋‚ผ ๋•Œ Content-Encoding ๋ถ€๊ฐ€ ์ •๋ณด๋ฅผ ๋ณด๋‚ด์ค˜์•ผ ๋ฌด์—‡์œผ๋กœ ์••์ถ•๋˜๋Š”์ง€ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

๋ฐ์ดํ„ฐ ์ „๋‹ฌํ•˜๋Š” ๊ณณ์—์„œ ์••์ถ• ํ›„ ์ธ์ฝ”๋”ฉ ํ—ค๋”๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ  ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ๋Š” ์ชฝ์—์„œ ์ธ์ฝ”๋”ฉ ํ—ค๋”์˜ ์ •๋ณด๋กœ ์••์ถ• ํ•ด์ œํ•œ๋‹ค.

gzip
deflate
identity

 

Content-Language

 

ํ‘œํ˜„ ๋ฐ์ดํ„ฐ์˜ ์ž์—ฐ ์–ธ์–ด๋ฅผ ํ‘œํ˜„ํ•œ๋‹ค.

ko
en
en-US

 

Content-Length

ํ‘œํ˜„ ๋ฐ์ดํ„ฐ์˜ ๊ธธ์ด๋กœ ๋ฐ”์ดํŠธ ๋‹จ์œ„์ด๋‹ค.

Transfer-Encoding(์ „์†ก ์ฝ”๋”ฉ)์„ ์‚ฌ์šฉํ•˜๋ฉด Content-Lenght๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์•ˆ๋œ๋‹ค. 

 


๐ŸŒฑ ์ฝ˜ํ…์ธ  ํ˜‘์ƒ

#ํ˜‘์ƒ: ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์„ ํ˜ธํ•˜๋Š” ํ‘œํ˜„์„ ์š”์ฒญํ•˜๋Š” ๊ฒƒ

  • Accept : ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์„ ํ˜ธํ•˜๋Š” ๋ฏธ๋””์–ด ํƒ€์ž… ์ „๋‹ฌ
  • Accept-Charset : ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์„ ํ˜ธํ•˜๋Š” ๋ฌธ์ž ์ธ์ฝ”๋”ฉ
  • Accept-Encoding : ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์„ ํ˜ธํ•˜๋Š” ์••์ถ• ์ธ์ฝ”๋”ฉ
  • Accept-Language : ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์„ ํ˜ธํ•˜๋Š” ์ž์—ฐ ์–ธ์–ด

* ํ˜‘์ƒ ํ—ค๋”๋Š” ์š”์ฒญ์‹œ์—๋งŒ ์‚ฌ์šฉ

 

Accept-Language ์ ์šฉ ์ „

ํด๋ผ์ด์–ธํŠธ์—์„œ ์„œ๋ฒ„๋กœ ๋ณด๋‚ผ ๋•Œ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ํ•œ๊ตญ์–ด์ธ์ง€ ์˜์–ด์ธ์ง€ ์•„๋ฌด ์ •๋ณด๊ฐ€ ์—†๋‹ค.

๊ทธ๋Ÿฌ๋ฉด ์„œ๋ฒ„๋Š” ๊ธฐ๋ณธ ์–ธ์–ด์ธ ์˜์–ด๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌํ•œ๋‹ค.

 

Accept-Language ์ ์šฉ ํ›„

ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์„ ํ˜ธํ•˜๋Š” ์–ธ์–ด๋กœ ํ•œ๊ตญ์–ด๋ฅผ ์ž…๋ ฅํ•ด์„œ ์„œ๋ฒ„์—๊ฒŒ ์ „๋‹ฌํ•œ๋‹ค.

์„œ๋ฒ„๋Š” ๊ธฐ๋ณธ ์–ธ์–ด๊ฐ€ ์˜์–ด์ง€๋งŒ ํ•œ๊ตญ์–ด๋„ ์ง€์›ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์›ํ•˜๋Š” ํ•œ๊ตญ์–ด๋กœ ๋„ฃ์–ด์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌํ•œ๋‹ค.

 

Accept-Language  ๋ณต์žกํ•œ ์˜ˆ์‹œ

ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์„ ํ˜ธํ•˜๋Š” ์–ธ์–ด๋ฅผ ํ•œ๊ตญ์–ด ์ •๋ณด๋ฅผ ์ž…๋ ฅํ•ด์„œ ์„œ๋ฒ„์—๊ฒŒ ์ „๋‹ฌํ•˜๋Š”๋ฐ ์„œ๋ฒ„๊ฐ€ ๊ธฐ๋ณธ์ด ๋…์ผ์–ด์ธ๋ฐ ์˜์–ด๋ฅผ ์ง€์›ํ•œ๋‹ค.

๋‹ค์ค‘ ์–ธ์–ด ์ง€์› ์„œ๋ฒ„๊ฐ€ ํ•œ๊ตญ์–ด๋ฅผ ์ง€์›์„ ํ•˜์ง€ ์•Š์•„ ๊ธฐ๋ณธ ์–ธ์–ด์ธ ๋…์ผ์–ด๋กœ ๋ณด๋‚ด๊ฒŒ ๋œ๋‹ค. 

 

ํ˜‘์ƒ๊ณผ ์šฐ์„ ์ˆœ์œ„ 1

- Quality Values(q) ๊ฐ’์„ ์‚ฌ์šฉํ•œ๋‹ค.

- 0~1, ๊ฐ’์ด ํด์ˆ˜๋ก ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋†’๊ณ , ์ƒ๋žตํ•˜๋ฉด 1์ด๋‹ค.

GET /event
Accept-Language:ko-KR,ko;q=0.9,en-US;q=0.8,en;q=0.7

 

 

ํด๋ผ์ด์–ธํŠธ์˜ ๋ธŒ๋ผ์šฐ์ €์—์„œ ํ•œ๊ตญ์–ด๋ฅผ ์„ ํ˜ธํ•˜์ง€๋งŒ ๋‹ค์ค‘ ์–ธ์–ด ์ง€์› ์„œ๋ฒ„๋Š” ๊ธฐ๋ณธ์ด ๋…์ผ์–ด์ด๊ณ  ์˜์–ด๋ฅผ ์ง€์›ํ•œ๋‹ค.

์„œ๋ฒ„์—์„œ๋Š” ๋…์ผ์–ด๋ณด๋‹ค๋Š” ์˜์–ด๋ฅผ ์„ ํ˜ธํ•œ๋‹ค๋Š” ๊ฑฐ๋ฅผ ์•Œ๊ณ  ์˜์–ด๋กœ ๋ฉ”์‹œ์ง€๋ฅผ ๋ณด๋‚ด๊ฒŒ ๋œ๋‹ค.

 

ํ˜‘์ƒ๊ณผ ์šฐ์„ ์ˆœ์œ„ 2

- ๊ตฌ์ฒด์ ์ผ ์ˆ˜๋ก ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋†’๋‹ค. 

GET /event
Accept: text/*, text/plain, text/plain;format=flowed, */*
  1. text/plain;format=flowed
  2. text/plain
  3. text/*
  4. */*

 

ํ˜‘์ƒ๊ณผ ์šฐ์„ ์ˆœ์œ„ 3

๊ตฌ์ฒด์ ์ธ ๊ฒƒ์„ ๊ธฐ์ค€์œผ๋กœ ๋ฏธ๋””์–ด ํƒ€์ž…๊ณผ ๋งค์นญํ•˜๋ฉด ๋œ๋‹ค.

Media Type Quality
text/html;level=1 1
text/html 0.7
text/plain 0.3
image/jpeg 0.5
text/html;level=2 0.4
text/html;level=3 0.7
GET /event
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-Length)

Content์˜ ๊ธธ์ด๋ฅผ ์ง€์ •์„ ํ•ด์„œ ํ•œ ๋ฒˆ์— ์š”์ฒญํ•˜๊ณ  ํ•œ ๋ฒˆ์— ์‘๋‹ต ๋ฐ›๋Š”๋‹ค.

 

์••์ถ• ์ „์†ก (Content-Encoding)

Contenxt-Ecoding ํ•„์ˆ˜ → Content๋ฅผ ์••์ถ•ํ•  ๋•Œ ์–ด๋–ป๊ฒŒ ์••์ถ•๋˜์–ด ์žˆ๋Š”์ง€ ์•Œ์•„์•ผ ํด๋ผ์ด์–ธํŠธ์—์„œ ์•Œ๊ณ  ์••์ถ•์„ ํ’€ ์ˆ˜ ์žˆ๋‹ค.

 

๋ถ„ํ•  ์ „์†ก (Transfer-Encoding)

chunked(๋ฉ์–ด๋ฆฌ) ๋ฉ์–ด๋ฆฌ๋กœ ์ชผ๊ฐœ์„œ ์ „์†ก์„ ํ•œ๋‹ค.

5byte๋กœ Hello๋ฅผ ์„œ๋ฒ„์—์„œ ํด๋ผ์ด์–ธํŠธ๋กœ ๋ณด๋‚ธ๋‹ค. ๋˜ 5byte๋กœ World๋ฅผ ๋ณด๋‚ด๊ณ  ๋งˆ์ง€๋ง‰์œผ๋กœ 0byte๋กœ src๋ฅผ ๋ณด๋‚ด๋ฉด ๋์ด๋ผ๋Š” ๊ฑธ ํ‘œํ˜„ํ•œ๋‹ค.

*๋ถ„ํ•  ์ „์†ก์„ ํ•  ๋•Œ๋Š” ๋ฉ์–ด๋ฆฌ๋งˆ๋‹ค ๊ธธ์ด๊ฐ€ ๋‹ค ์กด์žฌํ•˜๋ฏ€๋กœ, Content-Length๋ฅผ ๋„ฃ์œผ๋ฉด ์•ˆ๋œ๋‹ค.

๋ฒ”์œ„ ์ „์†ก (Content-Range)

์ด๋ฏธ์ง€๋ฅผ ๋ฐ›์•˜๋Š”๋ฐ ์ค‘๊ฐ„์— ๋Š๊ธธ ๊ฒฝ์šฐ ๋ชป ๋ฐ›์€ ๋ฒ”์œ„๋ฅผ ์ง€์ •ํ•ด ์žฌ์š”์ฒญ์„ ํ•œ๋‹ค.

 


๐ŸŒฑ ์ผ๋ฐ˜ ์ •๋ณด

From

์œ ์ € ์—์ด์ „ํŠธ์˜ ์ด๋ฉ”์ผ ์ •๋ณด๋กœ, ์ผ๋ฐ˜์ ์œผ๋กœ ์ž˜ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค.

๊ฒ€์ƒ‰ ์—”์ง„ ๋‹ด๋‹น์žํ•œํ…Œ ์—ฐ๋ฝํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์ด ํ•„์š”ํ•  ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค.

 

Referer

ํ˜„์žฌ ์š”์ฒญ๋œ ํŽ˜์ด์ง€์˜ ์ด์ „ ์›น ํŽ˜์ด์ง€ ์ฃผ์†Œ์ด๋‹ค.

A์—์„œ B๋กœ ์ด๋™ํ•˜๋Š” ๊ฒฝ์šฐ B๋ฅผ ์š”์ฒญํ•  ๋•Œ Referer A๋ฅผ ํฌํ•จํ•ด์„œ ์š”์ฒญํ•œ๋‹ค.

Referer๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๋ฐ์ดํ„ฐ ๋ถ„์„ ํ•  ๋•Œ ์œ ์ž… ๊ฒฝ๋กœ ๋ถ„์„์„ ๊ฐ€๋Šฅํ•˜๋‹ค. 

* referer๋Š” referrer์˜ ์˜คํƒ€

 

User-Agent

ํด๋ผ์ด์–ธํŠธ์˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ •๋ณด์ด๋‹ค.

์‚ฌ์šฉ์ž๋“ค์ด ์–ด๋–ค ์ข…๋ฅ˜์˜ ๋ธŒ๋ผ์šฐ์ €์—์„œ ์žฅ์• ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š”์ง€ ํŒŒ์•…์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

 

Server

์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ORIGIN ์„œ๋ฒ„์˜ ์†Œํ”„ํŠธ์›จ์–ด ์ •๋ณด์ด๋‹ค.

ORIGIN ์„œ๋ฒ„๋Š” ์‹ค์ œ HTTP ์‘๋‹ต์„ ํ•ด์ฃผ๋Š” ์„œ๋ฒ„์ด๋‹ค. 

 

Date

๋ฉ”์‹œ์ง€๊ฐ€ ๋ฐœ์ƒํ•œ ๋‚ ์งœ์™€ ์‹œ๊ฐ„์ด๋‹ค.

์‘๋‹ต์—์„œ๋งŒ ์‚ฌ์šฉํ•œ๋‹ค. 

 


๐ŸŒฑ ํŠน๋ณ„ํ•œ ์ •๋ณด

โœจ Host โœจ

์š”์ฒญ์—์„œ ์‚ฌ์šฉํ•˜๊ณ  ํ•„์ˆ˜๊ฐ’์ด๋‹ค.(๋งค์šฐ ์ค‘์š”!!)

ํ•˜๋‚˜์˜ ์„œ๋ฒ„๊ฐ€ ์—ฌ๋Ÿฌ ๋„๋ฉ”์ธ์„ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•  ๋•Œ ์ฆ‰, ํ•˜๋‚˜์˜ IP ์ฃผ์†Œ์— ์—ฌ๋Ÿฌ ๋„๋ฉ”์ธ์ด ์ ์šฉ๋˜์–ด ์žˆ์„ ๋•Œ ๊ตฌ๋ถ„ํ•ด์ค˜์•ผ ํ•œ๋‹ค.

 

 

ํ•˜๋‚˜์˜ ์„œ๋ฒ„ IP : 200.200.200.2 ๊ฐ€ ์žˆ๋Š”๋ฐ ์„œ๋ฒ„ ์•ˆ์— ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ๋‹ค๋ฅธ ๋„๋ฉ”์ธ์œผ๋กœ ๊ตฌ๋™๋˜์–ด ์žˆ๋‹ค.

ํด๋ผ์ด์–ธํŠธ๊ฐ€ /hello ๋กœ GET ๋ฐฉ์‹์œผ๋กœ ์š”์ฒญ์„ ํ–ˆ๋Š”๋ฐ ์„œ๋ฒ„ ์ž…์žฅ์—์„œ๋Š” /hello ์™€ ๊ด€๋ จ๋œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ์–ด๋””๋กœ ๋“ค์–ด๊ฐˆ์ง€ ์•Œ์ˆ˜ ์—†๋‹ค. 

์ด ๋•Œ, Host ํ—ค๋”์— ์ •๋ณด๋ฅผ ์ž…๋ ฅํ•˜๋ฉด ์„œ๋ฒ„์—์„œ ์š”์ฒญ์— ๋งž๋Š” ๋„๋ฉ”์ธ์ฃผ์†Œ์— ๋“ค์–ด๊ฐˆ ์ˆ˜ ์žˆ๋‹ค.  

 

Location

์‘๋‹ต์˜ ๊ฒฐ๊ณผ์— Location ํ—ค๋”๊ฐ€ ์žˆ์œผ๋ฉด, Location ์œ„์น˜๋กœ ์ž๋™ ์ด๋™(๋ฆฌ๋‹ค์ด๋ ‰ํŠธ)!

201(Created) : Location ๊ฐ’์€ ์š”์ฒญ์— ์˜ํ•ด ์ƒ์„ฑ๋œ ๋ฆฌ์†Œ์Šค URI
3xx(Redirection) : Location ๊ฐ’์€ ์š”์ฒญ์„ ์ž๋™์œผ๋กœ ๋ฆฌ๋‹ค์ด๋ ‰์…˜ํ•˜๊ธฐ ์œ„ํ•œ ๋Œ€์ƒ ๋ฆฌ์†Œ์Šค

 

Allow

ํ—ˆ์šฉ ๊ฐ€๋Šฅํ•œ HTTP ๋ฉ”์„œ๋“œ์ด๋‹ค.

405(Method Not Allowed) : ์˜ค๋ฅ˜๋ฅผ ๋‚ด๋ฉด์„œ ์‘๋‹ต์— ํฌํ•จํ•œ๋‹ค. 

 Allow: GET, HEAD, PUT๋งŒ ์ง€์›์„ ํ•œ๋‹ค. ์„œ๋ฒ„์—์„œ ๋งŽ์ด ๊ตฌํ˜„๋˜์ง€๋Š” ์•Š๋Š”๋‹ค.

 

Retry-After

์œ ์ € ์—์ด์ „ํŠธ๊ฐ€ ๋‹ค์Œ ์š”์ฒญ์„ ํ•˜๊ธฐ๊นŒ์ง€ ๊ธฐ๋‹ค๋ ค์•ผ ํ•˜๋Š” ์‹œ๊ฐ„์ด๋‹ค. 

503(Service Unavaliable) : ์„œ๋น„์Šค๊ฐ€ ์–ธ์ œ๊นŒ์ง€ ๋ถˆ๋Šฅ์ธ์ง€ ์•Œ๋ ค์ค„ ์ˆ˜ ์žˆ์Œ
Retry-After : ๋‚ ์งœ ํ‘œ๊ธฐ, ์ดˆ๋‹จ์œ„ ํ‘œ๊ธฐ

 


๐ŸŒฑ ์ธ์ฆ

Authorization

ํด๋ผ์ด์–ธํŠธ ์ธ์ฆ ์ •๋ณด๋ฅผ ์„œ๋ฒ„์— ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ๋‹ค.

 

WWW-Authenticate

๋ฆฌ์†Œ์Šค ์ ‘๊ทผ ์‹œ ํ•„์š”ํ•œ ์ธ์ฆ ๋ฐฉ๋ฒ• ์ •์˜ํ•œ๋‹ค. 

401(Unauthorize) : ์‘๋‹ต๊ณผ ํ•จ๊ป˜ ์‚ฌ์šฉ

401 ์˜ค๋ฅ˜๊ฐ€ ๋‚  ๋•Œ,
      โฌ‡๏ธ โฌ‡๏ธ โฌ‡๏ธ
WWW-Authenticate: Newauth realm="apps", type=1, title="Login to \"apps"\"", Basic realm="simple"

 

๐ŸŒฑ ์ฟ ํ‚ค

Set-Cookie

์„œ๋ฒ„์—์„œ ํด๋ผ์ด์–ธํŠธ๋กœ ์ฟ ํ‚ค๋ฅผ ์ „๋‹ฌ(์‘๋‹ต)ํ•œ๋‹ค.

Cookie

ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์„œ๋ฒ„์—์„œ ๋ฐ›์€ ์ฟ ํ‚ค๋ฅผ ์ €์žฅํ•˜๊ณ , HTTP ์š”์ฒญ์‹œ ์„œ๋ฒ„๋กœ ์ „๋‹ฌํ•œ๋‹ค.

์›น ๋ธŒ๋ผ์šฐ์ €์—์„œ ๋กœ๊ทธ์ธ ์•ˆํ•œ ์‚ฌ์šฉ์ž๊ฐ€ /welcome ์›น ํŽ˜์ด์ง€๋กœ ์ ‘๊ทผํ•˜๋ฉด, ์„œ๋ฒ„์—์„œ๋Š” ์†๋‹˜์œผ๋กœ ๋“ค์–ด์˜ค๊ฒŒ ๋œ๋‹ค.

/login ์œ ์ € ์ •๋ณด, ํŒจ์Šค์›Œ๋“œ ๋“ฑ์„ POST ๋ฐฉ์‹์œผ๋กœ ๋ณด๋‚ด ๋กœ๊ทธ์ธ์„ ํ•˜๋ฉด, ์„œ๋ฒ„์—์„œ๋Š” ํ™๊ธธ๋™์œผ๋กœ ๋กœ๊ทธ์ธ ํ–ˆ๋‹ค๊ณ  ์‘๋‹ต์„ ์ค€๋‹ค. 

์ด ์ƒํƒœ์—์„œ ๋‹ค์‹œ /welcome์œผ๋กœ ์ ‘๊ทผํ•˜๋ฉด ์„œ๋ฒ„ ์ž…์žฅ์—์„œ ๋กœ๊ทธ์ธํ•œ ์‚ฌ์šฉ์ž์ธ์ง€ ์•„๋‹Œ์ง€ ๊ตฌ๋ถ„ํ•  ์ˆ˜ ์žˆ๋Š” ์—†๋‹ค. HTTP๊ฐ€ ๋ฌด์ƒํƒœ ํ”„๋กœํ† ์ฝœ์ด๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. 

๊ธฐ๋ณธ์ ์œผ๋กœ ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„๊ฐ€ ์š”์ฒญ๊ณผ ์‘๋‹ต์„ ์ฃผ๊ณ  ๋ฐ›์œผ๋ฉด ์—ฐ๊ฒฐ์ด ๋Š์–ด์ง€๊ณ , ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋‹ค์‹œ ์š”์ฒญํ•œ๋‹ค ํ•ด๋„ ์„œ๋ฒ„๋Š” ์ด์ „ ์š”์ฒญ์„ ๊ธฐ์–ตํ•˜์ง€ ๋ชปํ•œ๋‹ค.

์ฆ‰, ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„๊ฐ€ ์„œ๋กœ ์ƒํƒœ๋ฅผ ์œ ์ง€ํ•˜์ง€ ์•Š์•„ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

ํ•ด๊ฒฐ์ฑ…! โœจ

๋ชจ๋“  ์š”์ฒญ์— ์‚ฌ์šฉ์ž ์ •๋ณด๋ฅผ ํฌํ•จํ•ด์„œ ๋ณด๋‚ด๋ฉด ๋œ๋‹ค.

๋ฌธ์ œ์ !โœจ

๋ชจ๋“  ์š”์ฒญ๊ณผ ๋งํฌ์˜ ์‚ฌ์šฉ์ž ์ •๋ณด๋ฅผ ๋‹ค ํฌํ•จํ•˜๋ฉด ๋ณด์•ˆ์˜ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉฐ ๊ฐœ๋ฐœํ•˜๊ธฐ ํž˜๋“ค๋‹ค.

๋ธŒ๋ผ์šฐ์ €๋ฅผ ์™„์ „ํžˆ ์ข…๋ฃŒํ•˜๊ณ  ๋‹ค์‹œ ์—ด๋ฉด? ์›น ์Šคํ† ๋ฆฌ์ง€์— ์ €์žฅ์„ ํ•ด๋†“๊ณ  ๋‹ค์‹œ ๋„˜๊ธฐ๋ฉด ๋˜์ง€๋งŒ ๊ฐœ๋ฐœํ•˜๊ธฐ ํž˜๋“ค๋‹ค.

 

Cookie

์›น ๋ธŒ๋ผ์šฐ์ €๊ฐ€ POST๋กœ ๋กœ๊ทธ์ธ์„ ํ•˜๋ฉด, ์„œ๋ฒ„์—์„œ๋Š” Set-Cookie๋กœ ํ™๊ธธ๋™ ์ •๋ณด๋ฅผ ๋งŒ๋“ค์–ด ์‘๋‹ต ํ•ด์ค€๋‹ค.

์›น ๋ธŒ๋ผ์šฐ์ € ๋‚ด๋ถ€์—๋Š” ์ฟ ํ‚ค ์ €์žฅ์†Œ๊ฐ€ ์žˆ๋Š”๋ฐ ์„œ๋ฒ„๊ฐ€ ์‘๋‹ต์—์„œ ๋งŒ๋“  Set-Cookie๋ฅผ ์ฟ ํ‚ค ์ €์žฅ์†Œ์— ์ €์žฅํ•œ๋‹ค.

(key: user, value: ํ™๊ธธ๋™)

 

๋กœ๊ทธ์ธ ์ดํ›„์— ์›น ๋ธŒ๋ผ์šฐ์ €๊ฐ€ /welcome์— ๋“ค์–ด์˜ค๋ฉด ์ž๋™์œผ๋กœ ์„œ๋ฒ„์— ์š”์ฒญ์„ ๋ณด๋‚ผ ๋•Œ๋งˆ๋‹ค ์ฟ ํ‚ค ์ €์žฅ์†Œ์—์„œ ํ™๊ธธ๋™์„ ์กฐํšŒํ•œ ํ›„ HTTP ํ—ค๋”์— ์ฟ ํ‚ค๋ฅผ ๋„ฃ์–ด ์„œ๋ฒ„์— ๋ณด๋‚ธ๋‹ค.

์„œ๋ฒ„๋Š” ์ฟ ํ‚ค๋ฅผ ์—ด์–ด ํ™๊ธธ๋™ user์ธ๊ฒƒ์„ ํ™•์ธํ•œ๋‹ค.

 

์ฟ ํ‚ค

set-cookie: sessionId=abcde1234; expires=Sat, 26-Dec-2020 00:00:00 GMT; path=/; domain=.google.com; Secure

 

  • ์‚ฌ์šฉ์ฒ˜ 
- ์‚ฌ์šฉ์ž ๋กœ๊ทธ์ธ ์„ธ์…˜ ๊ด€๋ฆฌ : ๋กœ๊ทธ์ธ์„ ํ•˜๋ฉด ์„œ๋ฒ„์—์„œ ์„ธ์…˜ Id๋ฅผ ๋งŒ๋“ค์–ด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ €์žฅํ•˜๊ณ  ํด๋ผ์ด์–ธํŠธ์— ๋ฐ˜ํ™˜ํ•ด์ค€๋‹ค.
                                          ํด๋ผ์ด์–ธํŠธ๋Š” ์„œ๋ฒ„์— ์š”์ฒญํ•  ๋•Œ ๋งˆ๋‹ค ์„ธ์…˜ Id๋ฅผ ๋ณด๋‚ด๊ณ , ์„œ๋ฒ„๋Š” ๋ฐ›์€ ์„ธ์…˜ Id๋ฅผ ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ๋‹ค.

- ๊ด‘๊ณ  ์ •๋ณด ํŠธ๋ž˜ํ‚น

 

  • ์ฟ ํ‚ค ์ •๋ณด๋Š” ํ•ญ์ƒ ์„œ๋ฒ„์— ์ „์†ก๋จ
๋„คํŠธ์›Œํฌ ํŠธ๋ž˜ํ”ฝ ์ถ”๊ฐ€ ์œ ๋ฐœํ•ด์„œ ์ตœ์†Œํ•œ์˜ ์ •๋ณด๋งŒ ์‚ฌ์šฉ : ์„ธ์…˜ Id, ์ธ์ฆ ํ† ํฐ
์„œ๋ฒ„์— ์ „์†กํ•˜์ง€ ์•Š๊ณ  ์›น ๋ธŒ๋ผ์šฐ์ € ๋‚ด๋ถ€์— ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅ : ์›น ์Šคํ† ๋ฆฌ์ง€ (localStorage, sessionStorage) ์ฐธ๊ณ 

 

  • ์ฃผ์˜!
๋ณด์•ˆ์— ๋ฏผ๊ฐํ•œ ๋ฐ์ดํ„ฐ๋Š” ์ €์žฅํ•˜๋ฉด ์•ˆ๋œ๋‹ค! (์ฃผ๋ฏผ๋ฒˆํ˜ธ, ์‹ ์šฉ์นด๋“œ ๋ฒˆํ˜ธ ๋“ฑ๋“ฑ)

 

์ฟ ํ‚ค - ์ƒ๋ช…์ฃผ๊ธฐ

Set-Cookie: expires=Sat, 26-Dec-2020 04:39:21 GMT
  • expires : ์ฟ ํ‚ค๋ฅผ ๋ฌด์ œํ•œ์œผ๋กœ ๋ณด๊ด€ํ•  ์ˆ˜ ์—†๋‹ค. GMT๊ธฐ์ค€์œผ๋กœ ๋งŒ๋ฃŒ์ผ์ด ๋˜๋ฉด ์ฟ ํ‚ค๋ฅผ ์ž๋™์œผ๋กœ ์‚ญ์ œํ•œ๋‹ค. 

 

Set-Cookie: max-age=3600
  • max-age :  0์ด๋‚˜ ์Œ์ˆ˜๋ฅผ ์ง€์ •ํ•˜๋ฉด ์ฟ ํ‚ค๊ฐ€ ์‚ญ์ œํ•œ๋‹ค. 

 

์ฟ ํ‚ค -  ์ข…๋ฅ˜

์„ธ์…˜ ์ฟ ํ‚ค : ๋งŒ๋ฃŒ ๋‚ ์งœ๋ฅผ ์ƒ๋žตํ•˜๋ฉด ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์ข…๋ฃŒํ•  ๋•Œ๊นŒ์ง€ ์œ ์ง€
์˜์† ์ฟ ํ‚ค : ๋งŒ๋ฃŒ ๋‚ ์งœ๋ฅผ ์ž…๋ ฅํ•˜๋ฉด ํ•ด๋‹น ๋‚ ์งœ๊นŒ์ง€ ์œ ์ง€

 

์ฟ ํ‚ค - ๋„๋ฉ”์ธ

 

ex) domain=example.org

๋ช…์‹œ : ๋„๋ฉ”์ธ์„ ๋ช…์‹œ๋ฅผ ํ•˜๋ฉด, ๋ช…์‹œํ•œ ๋ฌธ์„œ ๊ธฐ์ค€ ๋„๋ฉ”์ธ + ์„œ๋ธŒ ๋„๋ฉ”์ธ ํฌํ•จ
- example.org ์ง€์ •์„ ํ•ด์„œ ์ฟ ํ‚ค๋ฅผ ์ƒ์„ฑํ•˜๋ฉด dev.example.org๋„ ์ฟ ํ‚ค๋ฅผ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋‹ค.
์ƒ๋žต : ํ˜„์žฌ ๋ฌธ์„œ ๊ธฐ์ค€ ๋„๋ฉ”์ธ๋งŒ ์ ์šฉ
- example.org์—์„œ ์ฟ ํ‚ค๋ฅผ ์ƒ์„ฑํ–ˆ๋Š”๋ฐ ๋„๋ฉ”์ธ ์ง€์ •์„ ์ƒ๋žตํ•˜๋ฉด,
example.org์—์„œ๋งŒ ์ฟ ํ‚ค๋ฅผ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๊ณ , ํ•˜์œ„ ๋„๋ฉ”์ธ์ธ dev.example.org๋Š” ์ฟ ํ‚ค๋ฅผ ์ ‘๊ทผํ•  ์ˆ˜ ์—†๋‹ค.

 

์ฟ ํ‚ค - ๊ฒฝ๋กœ

ex) path=/home

๊ฒฝ๋กœ๋ฅผ ํฌํ•จํ•œ ํ•˜์œ„ ๊ฒฝ๋กœ ํŽ˜์ด์ง€๋งŒ ์ฟ ํ‚ค๋ฅผ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ path=/ ๋ฃจํŠธ๋กœ ์ง€์ •ํ•œ๋‹ค.

path=/home ์ง€์ •
/home  โžก๏ธ  ๊ฐ€๋Šฅ
/home/level1  โžก๏ธ  ๊ฐ€๋Šฅ
/home/level1/level2  โžก๏ธ ๊ฐ€๋Šฅ
/hello  โžก๏ธ  ๋ถˆ๊ฐ€๋Šฅ

 

์ฟ ํ‚ค - ๋ณด์•ˆ

Secure
- ์ฟ ํ‚ค๋Š” http, https๋ฅผ ๊ตฌ๋ถ„ํ•˜์ง€ ์•Š๊ณ  ์ „์†ก์„ ํ•œ๋‹ค.
- Secure๋ฅผ ์ ์šฉํ•˜๋ฉด https์ธ ๊ฒฝ์šฐ์—๋งŒ ํด๋ผ์ด์–ธํŠธ์—์„œ ์„œ๋ฒ„๋กœ key๋ฅผ ์ „์†กํ•œ๋‹ค.

HttpOnly
- XXS ๊ณต๊ฒฉ์„ ๋ฐฉ์ง€ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.
- ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ ์ ‘๊ทผํ•  ์ˆ˜ ์—†๋‹ค(document.cookie).
- http ์ „์†ก์—์„œ๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

SameSite
- XSRF ๊ณต๊ฒฉ์„ ๋ฐฉ์ง€ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.
- ์š”์ฒญ ๋„๋ฉ”์ธ๊ณผ ์ฟ ํ‚ค์— ์„ค์ •๋œ ๋„๋ฉ”์ธ์ด ๊ฐ™์€ ๊ฒฝ์šฐ์—๋งŒ ์ฟ ํ‚ค๋ฅผ ์ „์†กํ•  ์ˆ˜ ์žˆ๋‹ค.