๐ ๊น์ํ ๋์ "๋ชจ๋ ๊ฐ๋ฐ์๋ฅผ ์ํ HTTP ์น ๊ธฐ๋ณธ ์ง์" ๊ฐ์ ๋ฃ๊ณ ์ ๋ฆฌ
๐HTTP ํค๋ ๊ฐ์
- HTTP ํค๋ ๊ตฌ์กฐ
๋๋ณด๊ธฐ
- ์์ฒญ ๋ฉ์์ง
start-line ์์ ๋ผ์ธ GET /search?q=hello&hl=ko HTTP/1.1 header ํค๋ Host: www.google.com empty line ๊ณต๋ฐฑ ๋ผ์ธ (CRLF) message body ์์ ๋ผ์ธ :
method SP(๊ณต๋ฐฑ) request-target SP(๊ณต๋ฐฑ) HTTP-version CRLF(์ํฐ) GET /search?q=hello&hl=ko HTTP/1.1 HTTP ํค๋ :
field-name: OWS(๋์ด์ฐ๊ธฐ ํ์ฉ) field-value OWS(๋์ด์ฐ๊ธฐ ํ์ฉ) Host: www.google.com
- ์๋ต ๋ฉ์์ง
start-line ์์ ๋ผ์ธ HTTP/1.1 200 OK header ํค๋ Content-Type: text/html;charset=UTF-8
Content-Length: 3423empty line ๊ณต๋ฐฑ ๋ผ์ธ (CRLF) message body <html>
<body>...</body>
</html>์์ ๋ผ์ธ :
HTTP-version SP(๊ณต๋ฐฑ) status-code SP(๊ณต๋ฐฑ) reason-phrase CRLF HTTP/1.1 200 OK HTTP ํค๋ :
field-name: OWS(๋์ด์ฐ๊ธฐ ํ์ฉ) field-value OWS(๋์ด์ฐ๊ธฐ ํ์ฉ) Content-Type:
Content-Length:text/html;charset=UTF-8
3423 - HTTP ํค๋์ ์ฉ๋
- HTTP ์ ์ก์ ํ์ํ ๋ชจ๋ ๋ถ๊ฐ์ ๋ณด
ex) ๋ฉ์์ง ๋ฐ๋์ ๋ด์ฉ, ๋ฉ์์ง ๋ฐ๋์ ํฌ๊ธฐ, ์์ถ, ์ธ์ฆ, ์์ฒญ ํด๋ผ์ด์ธํธ, ์๋ฒ ์ ๋ณด, ์บ์ ๊ด๋ฆฌ ์ ๋ณด ๋ฑ - ํ์ค ํค๋๊ฐ ๋๋ฌด ๋ง์
- ํ์์ ์์ ํค๋ ์ถ๊ฐ ๊ฐ๋ฅ
- HTTP ์ ์ก์ ํ์ํ ๋ชจ๋ ๋ถ๊ฐ์ ๋ณด
- HTTP ํค๋์ ๋ถ๋ฅ :
- 1999๋
RFC2616 ๋ฑ์ฅ (ํ๊ธฐ๋จ) RFC2616 ๊ณผ๊ฑฐ : https://www.rfc-editor.org/rfc/rfc2616
โ ๊ณผ๊ฑฐ์๋ ํค๋๋ฅผ ํฌ๊ฒ 4๊ฐ์ง๋ก ๋ถ๋ฅ
- General ํค๋ : ๋ฉ์ธ์ง ์ ์ฒด์ ์ ์ฉ๋๋ ์ ๋ณด ex) Connection: close
- Request ํค๋ : ์์ฒญ ์ ๋ณด ex) User-Agent: Mozilla/5.0 (Macintosh; ..)
- Response ํค๋ : ์๋ต ์ ๋ณด ex) Server: Apache
- Entity ํค๋: ์ํฐํฐ ๋ฐ๋ ์ ๋ณด ex) Content-Type: text/html, Content-Length:3423
โ message Body
- ๋ฉ์์ง ๋ณธ๋ฌธ (message body)์ ์ํฐํฐ ๋ณธ๋ฌธ(entity body)์ ์ ๋ฌํ๋ ๋ฐ ์ฌ์ฉ
- ์ํฐํฐ ๋ณธ๋ฌธ์ ์์ฒญ์ด๋ ์๋ต์์ ์ ๋ฌํ ์ค์ ๋ฐ์ดํฐ์ ํด๋นํ๋ค. ์ํฐํฐ ๋ณธ๋ฌธ์ ๋ฉ์์ง ๋ณธ๋ฌธ์ ๋ด์ ์ ์ก.
- ์ํฐํฐ ํค๋๋ ์ํฐํฐ ๋ณธ๋ฌธ์ ๋ฐ์ดํฐ๋ฅผ ํด์ํ ์ ์๋ ์ ๋ณด ์ ๊ณต
- ๋ฐ์ดํฐ ์ ํ(html, json), ๋ฐ์ดํฐ ๊ธธ์ด, ์์ถ ์ ๋ณด ๋ฑ๋ฑ - 2014๋
RFC7230-7235 ๋ฑ์ฅ
- ์คํ์ด ์ชผ๊ฐ์ง๋ฉด์ ๋ค์ ๊ฐ์
- ์ํฐํฐ(Entity) ๋์ ํํ(Representation) ์์๊ฐ ๋์ (์์ ๋์๋๋ ๊ฑด X)
- Representation (ํํ) = representation Metadata (ํํ ๋ฉํ๋ฐ์ดํฐ(ํค๋)) + Representation Data (ํํ ๋ฐ์ดํฐ)
- ์ด REpresentation๊ฐ REST API์ RE์ ํด๋น
โ message Body
- ๋ฉ์์ง ๋ณธ๋ฌธ(message body)์ ํตํด ํํ ๋ฐ์ดํฐ ์ ๋ฌ
- ๋ฉ์์ง ๋ณธ๋ฌธ = ํ์ด๋ก๋(payload)
- ์์ฒญ์ด๋ ์๋ต์์ ์ ๋ฌํ ์ค์ ๋ฐ์ดํฐ๋ฅผ ๋ช ํํ๊ฒ ํํ์ผ๋ก ์ ์
- ํํ ํค๋๋ ํํ ๋ฐ์ดํฐ๋ฅผ ํด์ํ ์ ์๋ ์ ๋ณด ์ ๊ณต
- ๋ฐ์ดํฐ ์ ํ(html, json), ๋ฐ์ดํฐ ๊ธธ์ด, ์์ถ ์ ๋ณด ๋ฑ๋ฑ
- ์ฐธ๊ณ : ํํ ํค๋๋ ํํ ๋ฉํ๋ฐ์ดํฐ์ ํ์ด๋ก๋ ๋ฉ์์ง๋ฅผ ๊ตฌ๋ถํด์ผ ํ์ง๋ง, ์ฌ๊ธฐ ๊ฐ์์์ ์๋ต
- 1999๋
RFC2616 ๋ฑ์ฅ (ํ๊ธฐ๋จ) RFC2616 ๊ณผ๊ฑฐ : https://www.rfc-editor.org/rfc/rfc2616
๐ ํํ
- ํํ :
ํด๋ผ์ด์ธํธ์ ์๋ฒ ๊ฐ์ ์ฃผ๊ณ ๋ฐ์ ๋๋ ์๋ก๊ฐ ์ดํดํ ์ ์๋ ๋ฌด์ธ๊ฐ๋ก ๋ณํํด์ผํ๋ค. ๊ทธ๊ฑธ ์ํด ๊ฐ์์ ๋ฐ์ดํฐ๋ฅผ html, xml, Json ๋ฑ์ผ๋ก ํํํ๊ฒ ๋๋ค. - ํํ ํค๋ (์์ฒญ, ์๋ต ๋ ๋ค ์ฌ์ฉ)
- Content-Type: ํํ ๋ฐ์ดํฐ์ ํ์
- ๋ฏธ๋์ด ํ์ , ๋ฌธ์ ์ธ์ฝ๋ฉ
ex) text/html; charset=utf-8 , application/json , image/png ๋ฑ - Content-Encoding: ํํ ๋ฐ์ดํฐ์ ์์ถ ๋ฐฉ์
- ๋ฐ์ดํฐ๋ฅผ ์ก์ ์ธก์์ ์์ถ ํ ์ธ์ฝ๋ฉ ํค๋ ์ถ๊ฐ
- ๋ฐ์ดํฐ๋ฅผ ์์ ์ธก์์ ์ธ์ฝ๋ฉ ํค๋ ์ ๋ณด๋ก ์์ถ ํด์
ex) gzip , deflate , identity (No์์ถ) ๋ฑ - Content-Language: ํํ ๋ฐ์ดํฐ์ ์์ฐ ์ธ์ด
- ์์ฐ ์ธ์ด? ์ธ๊ฐ์ด ์ผ์์ ์ผ๋ก ์ฌ์ฉํ๊ณ ์๋ ์ธ์ด
ex) ko , en , en-US ๋ฑ - Content-Length: ํํ ๋ฐ์ดํฐ์ ๊ธธ์ด
- ๋ฐ์ดํธ ๋จ์
- Transfer-Encoding(์ ์ก ์ฝ๋ฉ)์ ์ฌ์ฉํ ๋๋ Content-Length๋ฅผ ์ฌ์ฉํ๋ฉด ์๋จ
(์ ์ก ์ฝ๋ฉ ์์ ์ด๋ฏธ ์ ๋ณด๊ฐ ๋ค ๋ค์ด ์๋ค.)
- Content-Type: ํํ ๋ฐ์ดํฐ์ ํ์
๐์ฝํ ์ธ ํ์
- ํ์ (์ฝํ
์ธ ๋ค๊ณ ์์์ด์
) :
ํด๋ผ์ด์ธํธ๊ฐ ์ ํธํ๋ ํํ์ด ์ด๊ฒ์ด๋ผ๊ณ ์๋ฒ์๊ฒ ์์ฒญํ๋ ๊ฒ.
์๋ฒ๊ฐ ์ต๋ํ ์ ํธ์ ๋ง์ถฐ์ ๋ณด๋ด์ค ์ ์๋๋ก ํ๋ค. (๋ชป๋ง์ถฐ ์ค ์๋ ์์)
(ํ์ํค๋๋ ์์ฒญ์์๋ง ์ฌ์ฉ)- Accept : ํด๋ผ์ด์ธํธ๊ฐ ์ ํธํ๋ ๋ฏธ๋์ด ํ์ ์ ๋ฌ
- Accept-Charset: ํด๋ผ์ด์ธํธ๊ฐ ์ ํธํ๋ ๋ฌธ์ ์ธ์ฝ๋ฉ
- Accept-Encoding: ํด๋ผ์ด์ธํธ๊ฐ ์ ํธํ๋ ์์ถ ์ธ์ฝ๋ฉ
- Accept-Language: ํด๋ผ์ด์ธํธ๊ฐ ์ ํธํ๋ ์์ฐ์ธ์ด
- ํ์ ํค๋ ์๋ ๊ฒฝ์ฐ
ํด๋ผ์ด์ธํธ > ์๋ฒ : ํด๋ผ์ด์ธํธ๊ฐ ํ๊ตญ์ด ๋ธ๋ผ์ฐ์ ๋ฅผ ์ฌ์ฉํด์ ์๋ฒ์ ์์ฒญ ์ ์ก
์๋ฒ > ํด๋ผ์ด์ธํธ : ํด๋ผ์ด์ธํธ์ ์ ํธ ์ฌํญ์ ๋ชจ๋ฆ์ผ๋ก ๊ทธ๋ฅ ์๋ฒ์ ๊ธฐ๋ณธ์ผ๋ก ์ค์ ๋ ์ธ์ด๋ก ์ ์ก
- ํ์ ํค๋ ์๋ ๊ฒฝ์ฐ
ํด๋ผ์ด์ธํธ > ์๋ฒ : ํด๋ผ์ด์ธํธ๊ฐ ํ๊ตญ์ด ๋ธ๋ผ์ฐ์ ๋ฅผ ์ฌ์ฉํด์ ์๋ฒ์ ์์ฒญ ์ ์ก
์๋ฒ > ํด๋ผ์ด์ธํธ : ํ์ ํค๋ Accept-Language: ๋ก ko(ํ๊ตญ์ด)๋ฅผ ๋ณด๋ด๋ฉด ์ ํธ ์ธ์ด๋ก ์ ์ก (๊ทธ ์ธ์ด ์ง์ ๊ฒฝ์ฐ)
โ๊ทธ๋ผ ๋ ์ผ์ด์ ์์ด๋ฅผ ์ง์ํ๋ ์๋ฒ์ ํ๊ตญ์ด๋ก ์์ฒญํ๋๋ฐ... ๋ ์ผ์ด ๋ณด๋จ ์์ด๋ฅผ ๋ฐ๊ณ ์ถ๋ค ์ด๋ด ๋๋?
๊ทธ๋ด ๋๋ฅผ ์ํ๊ฒ ์ฐ์ ์์ ์ด๋ค
- ํ์๊ณผ ์ฐ์ ์์
- Quality Values(q) ๊ฐ ์ฌ์ฉ
0~1, ํด์๋ก ๋์ ์ฐ์ ์์์ ํด๋นํ๋ค (์๋ตํ๋ฉด 1)
ex) Accept-Language: ko-KR,ko;q=0.9,en-US;q=0.8,en;q=0.7- ko-KR;q=1 (์์์๋ q๊ฐ ์๋ต๋จ,ko-KR์ ํ๊ตญ์ฌ๋์ด ์ฐ๋ ํ๊ตญ์ด)
- ko;q=0.9 (ko๋ ํ๊ตญ๊ณตํต์ด)
- en-US;q=0.8 (en-US๋ US์์ ์ฐ๋ ์์ด)
- en:q=0.7 (en๋ ์์ด๊ณตํต์ด)
- ๊ตฌ์ฒด์ ์ธ ๊ฒ์ด ๊ฐ์ฅ ์ฐ์ ์ ํ๋ค.
ex) Accept: text/*, text/plain, text/plain;format=flowed, */*- ์์: text/plain;format=flowed
- ์์: text/plain
- ์์: text/*
- ์์: */*
- ๊ตฌ์ฒด์ ์ธ ๊ฒ์ ๊ธฐ์ค์ผ๋ก ๋ฏธ๋์ด ํ์
์ ๋ง์ถ๋ค.
ex) Accept: text/*;q=0.3, text/html;q=0.7, text/html;level=1, text/html;level=2;q=0.4, */*;q=0.5
Media Type Quality text/html;level=1 1 text/html 0.7 text/plain 0.3 (text/*์ ๋ง์ถค) image/jpeg 0.5 (*/*์ ๋ง์ถค) text/html;level=2 0.4
(์๋ ์ 0.4 ์ธ๊ฐ ํ๋ฉด ์์ text/html;level=2 ์ ๋ํด์๋ ๊ตฌ์ฒด์ ์ธ ์ฐ์ ์์๊ฐ ๋์์์ง๋ง ์๋ level=3๋ ์ ํํ ๋งค์นญ๋๋ ๊ฒ์ด ์์ด text/html ์ ์ฐ์ ์์์ ๋ง์ถ ๊ฒ)text/html;level=3 0.7 (text/html ์ ๋ง์ถค)
- Quality Values(q) ๊ฐ ์ฌ์ฉ
๐์ ์ก ๋ฐฉ์
- ๋จ์ ์ ์ก: ์์ฒญํ๋ฉด ์๋ต์ ์ฃผ๋ ๋ฐ Content-Length๋ง ์ง์ ํด์ ์ฝํ ์ธ ๋ฅผ ๊ทธ๋ฅ ์ฃผ๊ณ ๋ฐ๋๋ค. (Content-Length๋ message body ์ ์ก์ ๊ธฐ๋ณธ์ธ๋ฏํ๋ค ๋ถํ ์ ์ก์ ์ ์ธ)
- ์์ถ ์ ์ก: ์๋ฒ๊ฐ ์ฝํ ์ธ ๋ฅผ ์์ถํ๊ณ ๋ญ๋ก ์์ถํ๋์ง ์ ๋ณด๋ฅผ Content-Encoding ํค๋๋ ํจ๊ป ๋ณด๋ธ๋ค.
- ๋ถํ ์ ์ก: Transfer-Encoding: chunked, chunk๋ ๋ฉ์ด๋ฆฌ๋ฅผ ์๋ฏธ.
๋ฐ์ดํฐ๋ฅผ ๋ถํ ํด์ ๋ณด๋ผ๊ฑฐ๋ค ๋ผ๋ ํ์๋ฅผ ํ๋ฉฐ ํ์๋ ๋ฐ์ดํธ (์ฌ๊ธฐ์ 5, 5, 0 ์ ํด๋นํ๋ ์ซ์๋ค)์ Hello ๋ฐ์ดํฐ๋ฅผ ๋จผ์ ๋ณด๋ด๊ณ , World๋ฅผ ๋ณด๋ด๊ณ \r\n(Enter, ๋์ด๋ผ๋ ๋ป)์ ๋ณด๋ธ๋ค.
์ฃผ์) ๋ถํ ์ ์ก์์๋ Content-Length๋ฅผ ๋ณด๋ด๋ฉด ์๋๋ค! Chunk์์ ๊ธธ์ด ์ ๋ณด ์๋ค.
- ๋ฒ์ ์ ์ก: Range, Content-Range. ๋ฐ์ดํฐ์ ๋ฒ์๋ฅผ ์ง์ ํด ์ ์ก ๋ฐ์ ์ ์๋ค.
ํ์ผ์ ๋ฐ๋ค๊ฐ ๋๊ฒผ์ ๋ ์ด๋ฏธ ๋ฐ์์ง ๊ฑธ ์ ์ธํ ๊ฑธ ๋ฐ๊ณ ์ ํ ๋ ์ฌ์ฉ๊ฐ๋ฅ
๐์ผ๋ฐ ์ ๋ณด
- From: ์ ์ ์์ด์ ํธ์ ์ด๋ฉ์ผ ์ ๋ณด
- ์ผ๋ฐ์ ์ผ๋ก ์ฌ์ฉX, ๊ฒ์ ์์ง ๊ฐ์ ๊ณณ์์ ์ฌ์ฉ
- ์์ฒญ์์ ์ฌ์ฉ - Referer: ์ด์ ์น ํ์ด์ง ์ฃผ์
- ํ์ฌ ์์ฒญ๋ ํ์ด์ง์ ์ด์ ์น ํ์ด์ง ์ฃผ์
- A > B๋ก ์ด๋ํ๋ ๊ฒฝ์ฐ B๋ฅผ ์์ฒญํ ๋ Referer: A ๋ฅผ ํฌํจํด์ ์์ฒญํ๋ค.
- Referer์ ์ฌ์ฉํด ์ ์ ๊ฒฝ๋ก ๋ถ์ ๊ฐ๋ฅํ๋ค.
- ์์ฒญ์์ ์ฌ์ฉ
- ๐ฏโํฉ๋นํ๊ฒ๋ Referer์ Referrer์ ์คํ์ธ๋ฐ ์ด๋ฏธ ๋๋ฌด ๋ง์ด ์ฌ์ฉํด์ ๊ทธ๋๋ก ์ฌ์ฉํ๋ ๊ฑฐ๋ผ๊ณ - User-Agent: ์ ์ ์์ด์ ํธ ์ ํ๋ฆฌ์ผ์ด์
์ ๋ณด
- ex) user-agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/110.0.0.0 Safari/537.36
- ํด๋ผ์ด์ธํธ์ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ณด (์น ๋ธ๋ผ์ฐ์ ์ ๋ณด ๋ฑ)
- ํต๊ณ ์ ๋ณด๋ก ์ฌ์ฉ, ์ด๋ค ์ข ๋ฅ์ ๋ธ๋ผ์ฐ์ ์์ ์ฅ์ ๊ฐ ๋ฐ์ํ๋ ์ง ํ์ ๊ฐ๋ฅ
- ์์ฒญ์์ ์ฌ์ฉ - Server: ์์ฒญ์ ์ฒ๋ฆฌํ๋ ์ค๋ฆฌ์ง ์๋ฒ์ ์ํํธ์จ์ด ์ ๋ณด
(์ค๊ฐ์ ์ ๋ณด๊ฐ ๊ฑฐ์น๋ ์๋ฒ๋ค์ด ์๋๋ผ ์ ๋ณด๋ฅผ ์ฒ๋ฆฌํ๋ ๋์ ์ ์๋ ์๋ฒ๋ฅผ ์ค๋ฆฌ์ง ์๋ฒ๋ผ๊ณ ํ๋ค.)
- ex) Server: Apach/2.2.22 (Debian)
- ex) server: nginx
- ์๋ต์์ ์ฌ์ฉ - Date: ๋ฉ์์ง๊ฐ ์์ฑ๋ ๋ ์ง
- ex) Date: Tue, 15 Nov 1994 08:12:31 GMT
- ์๋ต์์ ์ฌ์ฉ
๐ํน๋ณํ ์ ๋ณด
- Host: ์์ฒญํ ํธ์คํธ ์ ๋ณด (๋๋ฉ์ธ)
- ํ์๊ฐ
- ์์ฒญ์์ ์ฌ์ฉ
- ํ๋์ ์๋ฒ๊ฐ ์ฌ๋ฌ ๋๋ฉ์ธ์ ์ฒ๋ฆฌํด์ผ ํ ๋, ํ๋์ IP ์ฃผ์์ ์ฌ๋ฌ ๋๋ฉ์ธ์ด ์ ์ฉ๋์ด ์์ ๋
(๊ฐ์ํธ์คํธ๋ฅผ ํตํด ์๋ฒ์ ์ฌ๋ฌ ์ ํ๋ฆฌ์ผ์ด์ ์ฌ๋ฌ๊ฐ๊ฐ ๊ตฌ๋ ์ค์ผ ๊ฒฝ์ฐ ํด๋ผ์ด์ธํธ์์ ์ด๋ ๋๋ฉ์ธ์ผ๋ก ๋ฐ์ดํฐ๊ฐ ๊ฐ์ผํ ์ง ๋ชจ๋ฅด๊ธฐ ๋๋ฌธ์ ์ด๋ฅผ ํตํด ๊ตฌ๋ถ) ? ํฌํธ๋ ์ด๋ป๊ฒ ๋ค๋ฅด์ง? TCP/IP๋ IP๋ก๋ง ํต์ ? ํฌํธ๋? - Location: ํ์ด์ง ๋ฆฌ๋ค์ด๋ ์
- ์น ๋ธ๋ผ์ฐ์ 3xx ์๋ต์ ๊ฒฐ๊ณผ์ Location ํค๋๊ฐ ์์ผ๋ฉด, Location ์์น๋ก ์๋ ์ด๋(๋ฆฌ๋ค์ด๋ ํธ)
- 201 (Created): Location ๊ฐ์ ์์ฒญ์ ์ํด ์์ฑ๋ ๋ฆฌ์์ค URI๋ก ์๋ต์ ํจ๊ป ์ ๋ฌ
- 3xx (Redirection): Location ๊ฐ์ ์์ฒญ์ ์๋์ผ๋ก ๋ฆฌ๋ค์ด๋ ์ ํ๊ธฐ ์ํ ๋์ ๋ฆฌ์์ค๋ฅผ ๊ฐ๋ฅดํด - Allow: ํ์ฉ ๊ฐ๋ฅํ HTTP ๋ฉ์๋
- 405 (Method Not Allowed) ์์ ์๋ต์ ํฌํจํด์ผํจ
- Allow: GET, HEAD, PUT
- ex) ๋ง์ฝ ๊ฒฝ๋ก๊ฐ ์กด์ฌํ๊ณ GET, HEAD, PUT๋ง์ ํ์ฉํ๋๋ฐ POST๋ก ์์ฒญํ ๊ฒฝ์ฐ ์์ ๊ฐ์ด ์๋ต - Retry-After: ์ ์ ์์ด์ ํธ๊ฐ ๋ค์ ์์ฒญ์ ํ๊ธฐ๊น์ง ๊ธฐ๋ค๋ ค์ผ ํ๋ ์๊ฐ
- 503 (Service Unavailavble): ์๋น์ค๊ฐ ์ธ์ ๊น์ง ๋ถ๋ฅ์ธ์ง ์๋ ค์ค ์ ์์
- ex) Retry-Ater: Fri, 31 Dec 1999 23:59:59 GMT (๋ ์ง ํ๊ธฐ)
- ex) Retry-Ater: 120 (์ด๋จ์ ํ๊ธฐ)
๐์ธ์ฆ
- Authorization: ํด๋ผ์ด์ธํธ ์ธ์ฆ ์ ๋ณด๋ฅผ ์๋ฒ์ ์ ๋ฌ
- ex) Authorization: Basic xxxxxxxxxxxxxxx
- ๋ค์ํ ์ธ์ฆ ๋ฉ์ปค๋์ฆ ๋ง๋ค value๊ฐ ๋ฌ๋ผ์ง - WWW-Authenticate: ๋ฆฌ์์ค ์ ๊ทผ์ ํ์ํ ์ธ์ฆ ๋ฐฉ๋ฒ ์ ์
- ์ ๊ทผ์ ์ธ์ฆ์ด ์๋ฌ๊ฑฐ๋ ๋ฌธ์ ์ 401 Unauthorized ์๋ต๊ณผ ํจ๊ป ์ฌ์ฉ,
์๋์ฒ๋ผ ํ์ํ ์ธ์ฆ ์ ๋ณด์ ์์๋ฅผ ํจ๊ป ๋ณด๋ด์ค๋ค.
- WWW-Authenticate: Newauth realm="apps", type=1, title="Login to \"apps\"",Basic realm="simple"
๐์ฟ ํค
- Set-Cookie: ์๋ฒ์์ ํด๋ผ์ด์ธํธ๋ก ์ฟ ํค ์ ๋ฌ (์๋ต)
- Cookie: ํด๋ผ์ด์ธํธ๊ฐ ์๋ฒ์์ ๋ฐ์ ์ฟ ํค๋ฅผ ์ ์ฅํ๊ณ , HTTP ์์ฒญ์ ์๋ฒ๋ก ์ ๋ฌ
* ์ฟ ํค ๋ฑ์ฅ
HTTP๋ ๋ฌด์ํ ํ๋กํ ์ฝ์ด๋ค. ์์ฒญ๊ณผ ์๋ต์ ๋ฐ๊ณ ๋๋ฉด ๋์ด์ ธ ์๋ก ์ํ๋ฅผ ์ ์งํ์ง ์๊ธฐ ๋๋ฌธ์ ๋ก๊ทธ์ธ ํ ์๋๋ผ๋ ๊ฑธ ์ ์ ์๋ ๋ฐฉ๋ฒ์ด ์๋ฒ์๊ฒ ์๋ค.
ํ์ง๋ง ๋ก๊ทธ์ธ ์ํ๋ฅผ ์ ์งํด์ผํ๋ค๋ฉด ๋์์?
- ๋ชจ๋ ์์ฒญ์ ์ฌ์ฉ์ ์ ๋ณด๋ฅผ ํฌํจํด์ ์ ์ก
- ๋ณด์๋ฌธ์ ๋ถํฐ ๋ฐ์ดํฐ ์ ์ก๋์ด ๋๊ณ , ๊ฐ๋ฐ ์ด๋ ค์ ๋ฑ์ ๋ค์ํ ๋ฌธ์ ๋ฐ์
- ๋ธ๋ผ์ฐ์ ๋ฅผ ์์ ํ ์ข ๋ฃํ๊ณ ๋ค์ ์ด๋ฉด ๊ทธ ๋ ๋ ์ด๋ป๊ฒ ํด์ผํ๋ ์ง ๋ฑ์ ๋ฌธ์ ๋ฐ์
์ด๊ฑธ ํด๊ฒฐํ๊ธฐ ์ํด ์ฟ ํค๋ผ๋ ๊ฐ๋ ์ด ๋์ ๋จ
* ์ฟ ํค ์ ์ฅ๊ณผ ์ ๋ฌ ๊ณผ์
๋ก๊ทธ์ธ์ ํ๊ฒ ๋๋ฉด ์๋ฒ์์ Set-Cookie์ ๋ก๊ทธ์ธ ์ ์ ์ ๋ณด๋ฅผ ๋ง์์ ๋ณด๋ธ๋ค. (์ ๋ง๋ค๋ผ๋ ํํ์ ํ ๊น?)
์น๋ธ๋ผ์ฐ์ ๋ ์ด๋ฅผ ๋ฐ์ ์น๋ธ๋ผ์ฐ์ ์์ ์ฟ ํค ์ ์ฅ์์ ๊ทธ ์ ๋ณด๋ฅผ ์ ์ฅํด ๋๋๋ค.
์ด์ ์น๋ธ๋ผ์ฐ์ ๋ ํด๋น ์๋ฒ์ ์์ฒญํ ๋ ๋ง๋ค ์ฟ ํค ์ ์ฅ์๋ฅผ ๋ค์ ธ์ ์ฟ ํค ๊ฐ์ ๊ฐ์ ธ์ ํค๋์ Cookie ๊ฐ์ผ๋ก ์ ๋ฌํ๋ค.
* ์ฟ ํค๋ ๋ชจ๋ ์์ฒญ์ ์ฟ ํค ์ ๋ณด๋ฅผ ์๋ ํฌํจํ๋ค.
- ํ์ง๋ง ์ ๋ง ๋ชจ๋ ์์ฒญ์ ๋ณด๋ด๋ฉด ์ด๋ ๋ ๋ค๋ฅธ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ค. (๋ฐ๋ผ์ ๋ฐ๋ก ์ ์ฝํ๋ ๋ฐฉ๋ฒ๋ ์๋ค)
- ๋คํธ์ํฌ ํธ๋ํฝ์ด ์ถ๊ฐ๋ก ์ ๋ฐ๋๊ธฐ ๋๋ฌธ์ ์ต์ํ์ ์ ๋ณด(์ธ์ ID, ์ธ์ฆํ ํฐ ๋ฑ)๋ง ์ฌ์ฉํด์ผ ํ๋ค.
- ๋ณด์์ ๋ฏผ๊ฐํ ๋ฐ์ดํฐ๋ ์ ์ฅํ๋ฉด ์๋๋ค.
- ์๋ฒ์ ์ ์กํ์ง ์๊ณ ์น ๋ธ๋ผ์ฐ์ ๋ด์๋ง ์ ์ฅํ๊ณ ์ถ๋ค๋ฉด ์น ์คํ ๋ฆฌ์ง ์ฐธ๊ณ
* ์ฟ ํค์ ์์
ex) set-cookie: sessionId=abcde1234; expires=Sat, 26-Dec-2020 00:00:00 GMT; path=/; domain=.google.com; Secure
* ์ฟ ํค์ ์ฌ์ฉ์ฒ
- ์ฌ์ฉ์ ๋ก๊ทธ์ธ ์ธ์ ๊ด๋ฆฌ
- ๊ด๊ณ ์ ๋ณด ํธ๋ํน
* ์ฟ ํค์ ์๋ช ์ฃผ๊ธฐ
- Set-Cookie: expires= ๋ง๋ฃ์ผ์ ์ง์ (GMT ๊ธฐ์ค)
- Set-Cookie: max-age= ์ด๋ฅผ ์ค์ (0์ด๋ ์์๋ฉด ์ฟ ํค ์ญ์ )
- ๋ง๋ฃ์๊ฐ์ ๋ฐ๋ฅธ ์ฟ ํค ์ข
๋ฅ
- ์ธ์ ์ฟ ํค: ๋ง๋ฃ ๋ ์ง๋ฅผ ์๋ตํ๋ฉด ๋ธ๋ผ์ฐ์ ์ข ๋ฃ์ ๊น์ง๋ง ์ ์ง
- ์์ ์ฟ ํค: ๋ง๋ฃ ๋ ์ง๋ฅผ ์ ๋ ฅํ๋ฉด ํด๋น ๋ ์ง๊น์ง ์ ์ง
* ์ฟ ํค์ ๋๋ฉ์ธ
- ex) domain=example.org
- ๋ช
์: ๋ช
์ํ ๋ฌธ์ ๊ธฐ์ค ๋๋ฉ์ธ + ์๋ธ ๋๋ฉ์ธ๋ ํฌํจํ์ฌ ์ฟ ํค ์ ์ก ๊ฐ๋ฅ
(O) example.org (O) dev.example.org - ์๋ต: ํ์ฌ ๋ฌธ์ ๊ธฐ์ค ๋๋ฉ์ธ๋ง ์ ์ฉ๋์ด ์๋ธ ๋๋ฉ์ธ์๋ ์ฟ ํค๊ฐ ์ ์ก๋์ง ์๋๋ค.
(O) example.org (X) dev.example.org
* ์ฟ ํค์ ๊ฒฝ๋ก
- ex) path=/home
- ์ด ๊ฒฝ๋ก๋ฅผ ํฌํจํ ํ์ ๊ฒฝ๋ก ํ์ด์ง๋ง ์ฟ ํค ์ ๊ทผ ๊ฐ๋ฅ
- ์ผ๋ฐ์ ์ผ๋ก path=/ ๋ฃจํธ๋ก ์ง์
* ์ฟ ํค์ ๋ณด์
- Secure
- ์ฟ ํค๋ http, https๋ฅผ ๊ตฌ๋ถํ์ง ์๊ณ ์ ์ก
- Secure๋ฅผ ์ ์กํ๋ฉด https์ธ ๊ฒฝ์ฐ์๋ง ์ ์ก
- HttpOnly
- XSS ๊ณต๊ฒฉ ๋ฐฉ์ง
- ์๋ฐ์คํฌ๋ฆฝํธ์์ ์ ๊ทผ ๋ถ๊ฐ (document.cookie)
- HTTP์ ์ก์๋ง ์ฌ์ฉ
- SameSite
- XSRF ๊ณต๊ฒฉ ๋ฐฉ์ง
- ์์ฒญ ๋๋ฉ์ธ๊ณผ ์ฟ ํค์ ์ค์ ๋ ๋๋ฉ์ธ์ด ๊ฐ์ ๊ฒฝ์ฐ๋ง ์ฟ ํค ์ ์ก
'Computer Science > Web' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| HTTP ์น ์ง์ - HTTP ํค๋2 (์บ์์ ์กฐ๊ฑด๋ถ ์์ฒญ) (0) | 2023.03.13 |
|---|---|
| HTTP ์น ์ง์ - HTTP ์ํ์ฝ๋ ์๊ฐ (0) | 2023.03.08 |
| HTTP ์น ์ง์ - HTTP ๋ฉ์๋ ํ์ฉ (0) | 2023.03.08 |
| HTTP ์น ์ง์ - HTTP API๋ฅผ ๋ง๋ค์ด๋ณด์ (0) | 2023.03.07 |
| HTTP ์น ์ง์ - ๋ชจ๋ ๊ฒ์ด HTTP (0) | 2023.03.06 |
