2021. 1. 11. 06:21ใ๐ Web
๋ณธ ํฌ์คํ ์ ์ฐ์ํ ํ์ ๋ค, ๊น์ํ ๋์ '๋ชจ๋ ๊ฐ๋ฐ์๋ฅผ ์ํ HTTP ์น ๊ธฐ๋ณธ ์ง์' ๊ฐ์๋ฅผ ์๊ฐ ํ ์ ๋ฆฌํ ๊ธ์ ๋๋ค.
ํค๋๋ ํฌ๊ฒ ์ผ๋ฐ ํค๋์ ์บ์/์กฐ๊ฑด๋ถ ํค๋ 2๊ฐ์ง๋ก ๋๋๋ค.
1. HTTP ํค๋ ์ฉ๋
-> HTTP ์ ์ก์ ํ์ํ ๋ชจ๋ ๋ถ๊ฐ ์ ๋ณด ํฌํจ
-> ex) ๋ฉ์์ง ๋ฐ๋์ ๋ด์ฉ ๋ฐ ํฌ๊ธฐ, ์์ถ, ์ธ์ฆ, ์์ฒญ ํด๋ผ์ด์ธํธ, ์๋ฒ ๋ฑ
2. ํ์ค ํค๋๋ ๋๋ฌด ๋ง์ด ์กด์ฌ
-> ref: en.wikipedia.org/wiki/List_of_HTTP_header_fields
3. ๊ณผ๊ฑฐ HTTP ํค๋ (RFC2616)
-> ๊ณผ๊ฑฐ์ header๋ฅผ ํฌ๊ฒ 4๊ฐ์ง๋ก ๋ถ๋ฅ
- General header: ๋ฉ์์ง ์ ์ฒด์ ์ ์ฉ๋๋ ์ ๋ณด
- Request header: ์์ฒญ ์ ๋ณด
- Response header: ์๋ต ์ ๋ณด
- Entity header: ์ํฐํฐ ๋ฐ๋ ์ ๋ณด ex) Content-type: text/html, Content-Lenght: 3423
-> ๋ฉ์์ง ๋ณธ๋ฌธ์ ์ํฐํฐ ๋ณธ๋ฌธ์ ์ ๋ฌํ๋๋ฐ ์ฌ์ฉ
-> ์ํฐํฐ ํค๋๋ ์ํฐํฐ ๋ณธ๋ฌธ์ ๋ฐ์ดํฐ๋ฅผ ํด์ํ ์ ์๋ ์ ๋ณด ์ ๊ณต ( data type : html, json, data length etc)
4. ํ์ฌ HTTP ํค๋์ ๋ณํ
- ๋จ์ด์ ๋ณํ: Entity -> ํํ(Representation)
- Representation = representation MetaData + Representation Data (ํํ = ํํ ๋ฉํ๋ฐ์ดํฐ + ํํ ๋ฐ์ดํฐ)
- ์ฌ๊ธฐ์ Representation์ R์ REST์ R๊ณผ ์ํต
-> ๊ณผ๊ฑฐ์ ๋ฐ๋ ๊ฒ์ ํํ์ด๋ ๋จ์ด (from entity to representation)
5. ํํ (ํํ ํค๋๋ ์ ์ก, ์๋ต ๋๋ค ์ฌ์ฉ)
- Content-type : ํํ ๋ฐ์ดํฐ์ ํ์
- Content-Encoding: ํํ ๋ฐ์ดํฐ์ ์์ถ ๋ฐฉ์
- Content-Language : ํํ ๋ฐ์ดํฐ์ ์์ฐ ์ธ์ด
- Content-Length : ํํ ๋ฐ์ดํฐ์ ๊ธธ์ด
-> Content-Language ๊ฒฝ์ฐ, ์๋ฅผ ๋ค์ด, Apple ๊ณตํ์์ ์ธ์ด์ ํ์ ๋ฌด์์ผ๋ก ํ๋๋์ ๋ฐ๋ผ Content-Language ๊ฐ์ด ๋ณ๊ฒฝ๋๋ค.
6. Content-Encoding : ํํ ๋ฐ์ดํฐ ์ธ์ฝ๋ฉ
-> ํํ ๋ฐ์ดํฐ๋ฅผ ์์ถํ๊ธฐ ์ํด ์ฌ์ฉ
-> ๋ฐ์ดํฐ ์ ๋ฌ ์ชฝ์์ ์์ถ ํ ์ธ์ฝ๋ฉ ํค๋ ์ถ๊ฐ
-> ๋ฐ์ดํฐ๋ฅผ ์ฝ๋ ์ชฝ์์ ์ธ์ฝ๋ฉ ํค๋์ ์ ๋ณด๋ก ์์ถ ํด์
ex) gzip(์ค๋ฌด์์ ๋ณธ ํ์), deflate, identity(์์ถ์ ํ์ง ์์ ์ํ, ๋ณด๋ธ ๋ฐ์ดํฐ์ ๋ฐ๋ ๋ฐ์ดํฐ์ ์ํ๊ฐ ๋์ผํ๋ค๋ ๋ป)
7. ํ์ (content negotiation)
-> ํด๋ผ์ด์ธํธ๊ฐ ์ ํธํ๋ ํํ์ ๋ณด๋ด๋ฌ๋ผ๊ณ ์๋ฒ์ ์์ฒญ
-> ์ฆ ํ์์ request์ผ ๋๋ง ์ฌ์ฉ๋๋ค.
8. ํ์์ ์ข ๋ฅ
- Accept: ํด๋ผ์ด์ธํธ๊ฐ ์ ํธํ๋ ๋ฏธ๋์ด ํ์ ์ ๋ฌ
- Accept-Charset: ํด๋ผ์ด์ธํธ๊ฐ ์ ํธํ๋ ๋ฌธ์ ์ธ์ฝ๋ฉ
- Accept-Encoding: ํด๋ผ์ด์ธํธ๊ฐ ์ ํธํ๋ ์์ถ ์ธ์ฝ๋ฉ
- Accept-Language: ํด๋ผ์ด์ธํธ๊ฐ ์ ํธํ๋ ์์ฐ ์ธ์ด
9. ํ์๊ณผ ์ฐ์ ์์
-> Quality Values(q) ๊ฐ ์ฌ์ฉ
-> ๊ฐ์ด ๋ฒ์๋ 0~1๋ก, ํด์๋ก ๋์ ์ฐ์ ์์ ๊ฐ๋๋ค. -> ์๋ตํ๋ฉด 1
-> ko-KR;q=1 (์๋ต)
-> ์ซ์ ๋์๋๋ก ์ฐ์ ์์ ๊ฐ๋๋ค( ko-KR -> en-US )
-> ์ด๋ ๊ฒ ์ค๊ณํ๋ฉด, ์๋ฒ๊ฐ ๋ ์ผ์ด(์ฐ์ )์ ์์ด๋ฐ์ ์ง์ํ์ง ์์ ๋, ํด๋ผ์ด์ธํธ๊ฐ ์์ฒญํ ํ์ ์ฐ์ ์์ ๋ด์ฉ์ ๋ฐ๋ผ content-language๋ฅผ ์์ด๋ก ์ค์ ํ์ฌ ์๋ตํ๋ค.
-> ์ด๋ฌํ ์๋ฒ์, ์ฐ์ ์์ ์์ด ko-KR๋ง ์์ฒญํ ๊ฒฝ์ฐ, ์์ฒญ๋ฐ์ ๋ญ๊ท์ง๋ฅผ ์ง์ํ์ง ์๊ธฐ ๋๋ฌธ์ ๊ณง๋ฐ๋ก ๋ ์ผ์ด๋ก ์๋ตํ ์ ์๋ค.
-> ๊ทธ๋ฌ๋ ์ฐ์ ์์๋ฅผ ์ค์ ํด์ ์์ฒญํ๋ ๊ฒ!
10. ํ์๊ณผ ์ฐ์ ์์: ๊ตฌ์ฒด์ ์ธ ๊ฒ์ด ์ฐ์
- Accept: text/*, text/plain, text/plain;format=flowed, */*
- ํด๋ผ์ด์ธํธ๊ฐ ์์ ๊ฐ์ ๋ฏธ๋์ด ํ์
์ ์์ฒญํ ๋
1. text/plain;format=flowed (๊ฐ์ฅ ๊ตฌ์ฒด์ ์ด๋ฏ๋ก ๋์ ์ฐ์ ์์ ๊ฐ๋๋ค)
2. text/plain
3. text/*
4. */*
11. HTTP์ ์ ์ก ๋ฐฉ์
- ๋จ์ ์ ์ก: content-length
- ์์ถ ์ ์ก: content-encoding
- ๋ถํ ์ ์ก
- ๋ฒ์ ์ ์ก
12. ๋จ์ ์ ์ก๊ณผ ์์ถ ์ ์ก
13. ๋ถํ ์ ์ก
-> ์ฉ๋ ํฐ ๋ฐ์ดํฐ๋ฅผ ์ชผ๊ฐ์ ๋ณด๋ด๋๋ฐ, ์ด๋๋ content-length๋ฅผ ๋ณด๋ด์ง ์๋๋ค(์ชผ๊ฐ์ ๋ณด๋ด๊ธฐ์)
14. ํค๋์ ์ผ๋ฐ ์ ๋ณด
- From: ์ ์ ์์ด์ ํธ์ ์ด๋ฉ์ผ ์ ๋ณด
- Referer: ์ด์ ์น ํ์ด์ง ์ฃผ์
- User-Agent: ์ ์ ์์ด์ ํธ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ณด
- Server: ์์ฒญ์ ์ฒ๋ฆฌํ๋ origin ์๋ฒ์ ์ํํธ์จ์ด ์ ๋ณด
- Date: ๋ฉ์์ง๊ฐ ์์ฑ๋ ๋ ์ง
15. From
-> ์ ์ ์์ด์ ํธ์ ์ด๋ฉ์ผ ์ ๋ณด (์ผ๋ฐ์ ์ผ๋ก ๋ง์ด ์ฌ์ฉ๋์ง ์์)
-> ์์ฒญ์, ๊ฒ์์์ง ๊ฐ์ ๊ณณ์์ ์ฃผ๋ก ์ฌ์ฉ
16. Referer (referer๋ referrer์ ์คํ -> ์ฌ๋ด: ์ฒ์์ ์๋ชป ์ธํ ๋์ด ํ์ฌ๋ ๊ทธ๋ฅ ์ฌ์ฉํ๋ ์ํฉ )
-> ๊ตฌ๊ธ์์ hello๋ฅผ ๊ฒ์ํ์ฌ ์ด๋ ์น์ฌ์ดํธ๋ก ์ด๋ํ ๋, ๊ฒ์๊ณผ์ ์์ ๊ฐ์ฅ ๋ง์ง๋ง์ผ๋ก ๊ฑฐ์น ์ด์ ์ ์น ํ์ด์ง ์ฃผ์๋ฅผ ๋ํ๋ธ๋ค.
-> Referer๋ฅผ ์ฌ์ฉํด์ ์ ์ ๊ฒฝ๋ก ๋ถ์ ๊ฐ๋ฅ
17. User-Agent
-> ์ฌ์ฉ์ ๋ณธ์ธ์ ์น๋ธ๋ผ์ฐ์ ์ ์ ๋ณด ( ์์ฒญ์์ ์ฌ์ฉ )
-> ์ด๋ค ์ข ๋ฅ์ ๋ธ๋ผ์ฐ์ ์์ ์ฅ์ ๊ฐ ๋ฐ์ํ๋์ง ํ์ ๊ฐ๋ฅ
18. Server
-> ์์ฒญ์ ์ฒ๋ฆฌํ๋ ORIGIN ์๋ฒ ์ํํธ์จ์ด ์ ๋ณด ( ์๋ต์์ ์ฌ์ฉ )
-> Http ์์ฒญ์ ๋ณด๋ด๋ฉด ์๋ง์ proxy ์๋ฒ๋ฅผ ๊ฑฐ์ณ ์ต์ข ์ ์ผ๋ก origin ์๋ฒ์ ๋ฟ๊ฒ ๋๋ค.
19. Date
-> ๋ฉ์์ง๊ฐ ๋ฐ์ํ ๋ ์ง์ ์๊ฐ ( ์๋ต์์ ์ฌ์ฉ )
20. ํค๋์ ํน๋ณํ ์ ๋ณด
- Host: ์์ฒญํ ํธ์คํธ ์ ๋ณด(๋๋ฉ์ธ)
- Location: ํ์ด์ง redirection
- Allow: ํ์ฉ ๊ฐ๋ฅํ HTTP ๋ฉ์๋
- Retry-After: ์ ์ ์์ด์ ํธ๊ฐ ๋ค์ ์์ฒญ์ ํ๊ธฐ๊น์ง ๊ธฐ๋ค๋ ค์ผ ํ๋ ์๊ฐ
21. Host
-> ํ๋์ ์๋ฒ(or IP)๊ฐ ์ฌ๋ฌ ๋๋ฉ์ธ์ ์ฒ๋ฆฌํด์ผ ํ ๊ฒฝ์ฐ(์๋ ๊ทธ๋ฆผ์ฒ๋ผ),
-> request์์ ๋ณด๋ธ Host์ ๋ณด๋ฅผ ์ฝ๊ณ ์๋ฒ์์ hosting์ ์งํํ๋ค.
22. Location
-> Page redirection
-> Location๊ฐ์ ์์ฒญ์ ์๋์ผ๋ก redirectionํ๊ธฐ ์ํ ๋์ ๋ฆฌ์์ค๋ฅผ ๊ฐ๋ฆฌํจ๋ค.
23. Allow
-> ํ์ฉ ๊ฐ๋ฅํ HTTP ๋ฉ์๋
-> Allow: GET, HEAD, PUT
24. Retry-After
-> ์ ์ ์์ด์ ํธ๊ฐ ๋ค์ ์์ฒญ์ ํ๊ธฐ๊น์ง ๊ธฐ๋ค๋ ค์ผ ํ๋ ์๊ฐ
-> 503 ์๋ฌ: ์๋น์ค๊ฐ ์ธ์ ๊น์ง ๋ถ๋ฅ์ธ์ง ์๋ ค์ค ์ ์๋ค.
25. ์ธ์ฆ
Authorization: ํด๋ผ์ด์ธํธ ์ธ์ฆ ์ ๋ณด๋ฅผ ์๋ฒ์ ์ ๋ฌ
WWW-Authenticate: WWW-Authenticate ์๋ต ํค๋๋ ๋ฆฌ์์ค์ ์ก์ธ์ค๋ฅผ ์ป๊ธฐ ์ํ ์ธ์ฆ ๋ฐฉ๋ฒ์ ์ ์
26. ์ฟ ํค
-> set-cookie: ์๋ฒ์์ ํด๋ผ์ด์ธํธ๋ก ์ฟ ํค ์ ๋ฌ(์๋ต:response)
-> cookie: ํด๋ผ์ด์ธํธ๊ฐ ์๋ฒ์์ ๋ฐ์ ์ฟ ํค๋ฅผ ์ ์ฅํ๊ณ , HTTP ์์ฒญ์ ์๋ฒ๋ก ์ ๋ฌ
27. ์ฟ ํค: ๋ชจ๋ ์์ฒญ์ ์ ๋ณด๋ฅผ ๋๊ธฐ๋ ๋ฌธ์
-> ์๋์ฒ๋ผ ๋ชจ๋ ์์ฒญ๋ง๋ค state(์ฌ์ฉ์ ์ ๋ณด)๋ฅผ ๋ฃ์ด ์์ฒญํ๋ค๋ฉด
-> ๋ฌธ์ 1) ๋ชจ๋ ์์ฒญ์ ์ฌ์ฉ์ ์ ๋ณด๊ฐ ํฌํจ๋๋๋ก ๊ฐ๋ฐํด์ผํจ ( ๋์ด๋ up )
-> ๋ฌธ์ 2) Browser๋ฅผ ์์ ํ ์ข ๋ฃํ๊ณ ๋ค์ ์ด๋ฉด ์ ์ฅ๋ ์ํ๊ฐ ๋ชจ๋ ๋ ๋ผ๊ฐ๋ค.
28. ์ฟ ํค ์ ์ฅ์
29. ์ฟ ํค - ์๋ช ์ฃผ๊ธฐ <Expires, Max-age>
-> set-cookie: expires = Mon, 31-DEC-2021 12:00:00 GMT -> ๋ง๋ฃ์ผ ๋๋ฉด ์ฟ ํค ์ญ์
-> set-cookie: max-age = 3600 (3600์ด)
-> ์ธ์ ์ฟ ํค: ๋ง๋ฃ ๋ ์ง ์๋ตํ๋ฉด ๋ธ๋ผ์ฐ์ ์ข ๋ฃ์ ๊น์ง๋ง ์ ์ง
-> ์์ ์ฟ ํค: ๋ง๋ฃ ๋ ์ง ์ ๋ ฅํ๋ฉด ํด๋น ๋ ์ง๊น์ง ์ ์ง
30. ์ฟ ํค - ๊ฒฝ๋ก <Path=/๋ฃจํธ๋ก ์ง์ >
-> ํด๋น ๊ฒฝ๋ก๋ฅผ ํฌํจํ ํ์ ๊ฒฝ๋ก ํ์ด์ง์์๋ง ์ฟ ํค ์ ๊ทผ ๊ฐ๋ฅ (ํ์ ๊ฒฝ๋ก๋ ๋ชจ๋ ๊ฐ๋ฅ!)
31. ์ฟ ํค - ๋ณด์
-> Secure
- ์ฟ ํค๋ http, https ๊ตฌ๋ถํ์ง ์๊ณ ์ ์ก
- Secure ์ ์ฉํ๋ฉด https์ธ ๊ฒฝ์ฐ์๋ง ์ ์ก
-> HttpOnly
- XSS ๊ณต๊ฒฉ ๋ฐฉ์ง
- ์๋ฐ์คํฌ๋ฆฝํธ์์๋ ์ ๊ทผ ๋ถ๊ฐ (document,cookie)
- HTTP ์ ์ก์๋ง ์ฌ์ฉ
-> SameSite (๋น๊ต์ ์ต์ ๊ธฐ์ , ๊ธฐ๋ฅ์ด ์ ์ฉ๋์ง ์ผ๋ง ์๋๋ค.)
- XSRF ๊ณต๊ฒฉ ๋ฐฉ์ง
- ์์ฒญ ๋๋ฉ์ธ๊ณผ ์ฟ ํค์ ์ค์ ๋ ๋๋ฉ์ธ์ด ๊ฐ์ ๊ฒฝ์ฐ๋ง ์ฟ ํค ์ฌ์ฉ (SameSite๋ฅผ ์ค์ ํ์ง ์์ผ๋ฉด, ๋๋ฉ์ธ์ด ๊ฐ์ง ์์ ๊ฒฝ์ฐ์๋ ์ฟ ํค๊ฐ ์ ์ก๋ ์ ์๊ธฐ์, SameSite๋ก ์ด๋ฅผ ๋ฐฉ์ง)
'๐ Web' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
HTTP 401(Unauthorized), 403(Forbidden) ์ฐจ์ด (0) | 2021.06.20 |
---|---|
7. HTTP ํค๋ 2 - ์บ์์ ์กฐ๊ฑด๋ถ ์์ฒญ (2) | 2021.01.17 |
5. HTTP ๋ฉ์๋ ํ์ฉ (0) | 2021.01.03 |
4. HTTP ๋ฉ์๋ (0) | 2021.01.03 |
3. HTTP (0) | 2020.12.31 |