HTTP๋? HTTP ์ค๋ช
๐HTTP๋?
HTTP(HyperText Transfer Protocol)
์ธํฐ๋ท ์์์ ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ์ ์ ์๋ ํ๋กํ ์ฝ์ ๋งํ๋ฉฐ
์น ๋ธ๋ผ์ฐ์ ์ ์น ์๋ฒ์ ์ํต์ ์ํด ๋์์ธ๋์๋ค.
โ HTTP์ ํน์ง
Connetionless(๋น ์ฐ๊ฒฐ์ฑ)
HTTP๋ ์์ฒญ๊ณผ ์๋ต์ ์ฃผ๊ณ ๋ฐ์ ๋๋ง ์ฐ๊ฒฐ์ ์ ์งํ๊ณ , ์๋ต์ ์ฃผ๊ณ ๋๋ฉด ์๋ฒ์์ ์ฐ๊ฒฐ์ ๋๋๋ค.
Stateless(๋ฌด์ํ์ฑ)
์ปค๋ฅ์ ์ ๋๋ ์๊ฐ ํด๋ผ์ด์ธํธ์ ์๋ฒ์ ํต์ ์ด ๋๋๋ฉฐ ์ํ ์ ๋ณด๋ ์ ์ง(์ ์ฅ)ํ์ง ์๋๋ค.
Stateless ํน์ง์ผ๋ก ์ธํด ํด๋ผ์ด์ธํธ์ ์๋ฒ์ ์ํ ์ ๋ณด๋ฅผ ๋ค๊ณ ์์ง ์์์
ํด๋ผ์ด์ธํธ๊ฐ ์ํ ์ ๋ณด๋ฅผ ๋งค๋ฒ http์ ๋ด์์ ์์ฒญํด์ผํ๋ค.
โ HTTP messages
HTTP messages๋ ํด๋ผ์ด์ธํธ์ ์๋ฒ ์ฌ์ด์์ ๋ฐ์ดํฐ๊ฐ ๊ตํ๋๋ ๋ฐฉ์์ด๋ค.
์ ํ์ ์์ฒญ(Requests)๊ณผ ์๋ต(Responses)์ด ์๋ค.
HTTP message ๊ตฌ์ฑ
1. ์์ ๋ผ์ธ(Start Line)
ํญ์ ์ฒซ ๋ฒ์งธ ์ค์ ์์นํ๋ฉฐ ์์ฒญ์ด๋ ์๋ต์ ์ํ๋ฅผ ๋ํ๋ธ๋ค.
- ์์ฒญ
- Method : GET / POST / PUT / DELTE ๋ฑ (HTTP ๋ฉ์๋)
- URL : ์์ฒญ ๋์ ๊ฒฝ๋ก ํ์
- Version : ์ฌ์ฉ๋ http ๋ฒ์
- ์๋ต
- Version : ์ฌ์ฉ๋ http ๋ฒ์
- Status Code : ํด๋ผ์ด์ธํธ ์์ฒญ์ ์ฑ๊ณต, ์คํจ ์ฌ๋ถ๋ฅผ ๋ํ๋ด๋ ์ซ์ ์ฝ๋ (200, 404, 500 ๋ฑ)
- Status Message : Status Code ์ ๋ํ ๊ฒฐ๊ณผ๋ฅผ ํด๋ผ์ด์ธํธ๊ฐ ์ดํดํ ์ ์๋ ๊ธ๋ก ํํ
2. ํค๋(Header)
์์ฒญ์ ์ง์ ํ๊ฑฐ๋, ๋ฉ์์ง์ ํฌํจ๋ ๋ณธ๋ฌธ์ ์ค๋ช ํ๋ ํค๋์ ์งํฉ์ผ๋ก
HTTP ์ ์ก์ ํ์ํ ๋ชจ๋ ๋ถ๊ฐ ์ ๋ณด๋ฅผ ๋ด๊ณ ์๋ค.
๋ฉ์ธ์ง ํฌ๊ธฐ, ์์ถ ์ฌ๋ถ, ์ธ์ฆ, ๋ธ๋ผ์ฐ์ ์ ๋ณด, ์๋ฒ ์ ๋ณด, ์บ์ ๋ฑ
- ์์ฒญ
- Host : ์์ฒญํ๋ ค๋ ์๋ฒ ํธ์คํธ ์ด๋ฆ๊ณผ ํฌํธ ๋ฒํธ
- User-agent : ํด๋ผ์ด์ธํธ ํ๋ก๊ทธ๋จ ์ ๋ณด
์ด ์ ๋ณด๋ฅผ ํตํด ์๋ฒ๋ ํด๋ผ์ด์ธํธ ํ๋ก๊ทธ๋จ(๋ธ๋ผ์ฐ์ )์ ๋ง๋ ์ต์ ์ ๋ฐ์ดํฐ๋ฅผ ์๋ตํ ์ ์๋ค. - Referer : ๋ฐ๋ก ์ง์ ์ ๋จธ๋ฌผ๋ ๋ ๋๋ฉ์ธ ์ฃผ์
- Accept : ํด๋ผ์ด์ธํธ๊ฐ ์ฒ๋ฆฌ ๊ฐ๋ฅํ ๋ฏธ๋์ด ํ์ ์ข ๋ฅ
- If-Modified-Since : ์ฌ๊ธฐ์ ์ฐ์ฌ์ง ์๊ฐ ์ดํ๋ก ๋ณ๊ฒฝ๋ ๋ฆฌ์์ค ์ทจ๋
ํ์ด์ง๊ฐ ์์ ๋์์ผ๋ฉด ์ต์ ํ์ด์ง๋ก ๊ต์ฒดํ๋ค. - Authorization : ์ธ์ฆ ํ ํฐ์ ์๋ฒ๋ก ๋ณด๋ผ ๋ ์ฌ์ฉ
- Origin : ์๋ฒ๋ก Post ์์ฒญ์ ๋ณด๋ผ ๋ ์์ฒญ์ด ์ด๋ ์ฃผ์์์ ์์๋์๋์ง ๋ํ๋ด๋ ๊ฐ
์ด ๊ฐ์ผ๋ก ์์ฒญ์ ๋ณด๋ธ ์ฃผ์์ ๋ฐ๋ ์ฃผ์๊ฐ ๋ค๋ฅด๋ฉด CORS(Cross-Origin Resource Sharing) ์๋ฌ๊ฐ ๋ฐ์ํ๋ค. - Cookie : key-value๋ก ๊ตฌ์ฑ๋ ์ฟ ํค
- ์๋ต
- Location : 301, 302 ์ํ์ฝ๋์ผ ๋๋ง ๋ณผ ์ ์๋ Header๋ก
์๋ฒ์ ์๋ต์ด ๋ค๋ฅธ ๊ณณ์ ์๋ค๊ณ ์๋ ค์ฃผ๋ฉด์ ํด๋น ์์น(URI)๋ฅผ ์ง์ ํ๋ค. - Server : ์น ์๋ฒ ์ข ๋ฅ
- Age : max-age ์๊ฐ๋ด์์ ์ผ๋ง๋ ํ๋ ๋์ง ์ด ๋จ์๋ก ์๋ ค์ฃผ๋ ๊ฐ
- Referrer-policy : ์๋ฒ referrer ์ ์ฑ ์ ์๋ ค์ฃผ๋ ๊ฐ ex) origin, no-referrer, unsafe-url
- WWW-Authenticate : ์ฌ์ฉ์ ์ธ์ฆ์ด ํ์ํ ์์์ ์๊ตฌํ ์, ์๋ฒ๊ฐ ์ ๊ณตํ๋ ์ธ์ฆ ๋ฐฉ์
- Proxy-Authenticate : ์์ฒญํ ์๋ฒ๊ฐ ํ๋ก์ ์๋ฒ์ธ ๊ฒฝ์ฐ ์ ์ ์ธ์ฆ์ ์ํ ๊ฐ
- Location : 301, 302 ์ํ์ฝ๋์ผ ๋๋ง ๋ณผ ์ ์๋ Header๋ก
3. ๊ณต๋ฐฑ ๋ผ์ธ(Empty Line)
ํค๋์ ๋ฐ๋๋ฅผ ๊ตฌ๋ถํ๊ธฐ ์ํ ๋ผ์ธ
4. ๋ฐ๋(Message Body)
- ์์ฒญ
- ์ค์ ์ ์กํ ๋ฐ์ดํฐ (HTML ๋ฌธ์, ์ด๋ฏธ์ง, ์์, JSON ๋ฐ์ดํฐ ๋ฑ)
- ์๋ต
- ์ ์ก ๋ฐ์ ๋ฐ์ดํฐ
โ HTTP ๋ฉ์๋
HTTP ๋ฉ์๋๋ ์ด 9๊ฐ๊ฐ ์๊ณ ์ด ์ค ์ฃผ๋ก ์ฐ์ด๋ ๋ฉ์๋๋ 5๊ฐ์ด๋ค.
์ฃผ์ ๋ฉ์๋ 5๊ฐ
- GET : ๋ฆฌ์์ค ์กฐํ
- POST : ์์ฒญ ๋ฐ์ดํฐ ์ฒ๋ฆฌ, ์ฃผ๋ก ๋ฐ์ดํฐ ๋ฑ๋ก์ ์ฌ์ฉ
- PUT : ๋ฆฌ์์ค๋ฅผ ๋์ฒด, ํด๋น ๋ฆฌ์์ค๊ฐ ์์ผ๋ฉด ์์ฑ (์ ์ฒด ์ ๋ฐ์ดํธ)
- PATCH : ๋ฆฌ์์ค ์ผ๋ถ ๋ณ๊ฒฝ (๋ถ๋ถ ์ ๋ฐ์ดํธ)
- DELETE : ๋ฆฌ์์ค ์ญ์
๊ทธ์ธ ๋ฉ์๋ 4๊ฐ
- HEAD : GET๊ณผ ๋์ผํ์ง๋ง ๋ฉ์ธ์ง ๋ถ๋ถ์ ์ ์ธํ๊ณ , ์ํ ์ค๊ณผ ํค๋๋ง ๋ฐํ
- OPTIONS : ๋์ ๋ฆฌ์์ค์ ๋ํ ํต์ ๊ฐ๋ฅ ์ต์ ์ ์ค๋ช (์ฃผ๋ก CORS์์ ์ฌ์ฉ)
- CONNECT : ๋์ ์์์ผ๋ก ์๋ณ๋๋ ์๋ฒ์ ๋ํ ํฐ๋์ ์ค์
- TRACE : ๋์ ๋ฆฌ์์ค ๊ฒฝ๋ก๋ฅผ ๋ฐ๋ผ ๋ฉ์ธ์ง ๋ฃจํ๋ฐฑ ํ ์คํธ ์ํ
โ HTTP ์ํ์ฝ๋
์ํ ์ฝ๋๋ ํด๋ผ์ด์ธํธ ์์ฒญ์ ์ฒ๋ฆฌ ์ํ๋ฅผ ์๋ต์์ ์๋ ค์ฃผ๋ ์ฝ๋๋ฅผ ๋งํ๊ณ
์ผ๋ฐ์ ์ผ๋ก๋ 3์๋ฆฌ ์ซ์๋ก ๋์ด ์์ผ๋ฉฐ, 100 ~ 500๋ฒ๋ ์ซ์๋ก ์ด๋ฃจ์ด์ ธ ์๋ค.
1xx(์ ๋ณด) : ์์ฒญ์ ๋ฐ์์ผ๋ฉฐ ํ๋ก์ธ์ค ๊ณ์ ์งํ
2xx(์ฑ๊ณต) : ์์ฒญ์ ์ฑ๊ณต์ ์ผ๋ก ๋ฐ์์ผ๋ฉฐ ์ธ์ํ๊ณ ์์ฉ
3xx(๋ฆฌ๋ค์ด๋ ์ ) : ์์ฒญ ์๋ฃ๋ฅผ ์ํด ์ถ๊ฐ ์์ ์กฐ์น ํ์
4xx(ํด๋ผ์ด์ธํธ ์ค๋ฅ) : ์์ฒญ์ ๋ฌธ๋ฒ์ด ์๋ชป๋์๊ฑฐ๋ ์์ฒญ์ ์ฒ๋ฆฌํ ์ ์์
5xx(์๋ฒ ์ค๋ฅ) : ํด๋ผ์ด์ธํธ ์์ฒญ์ ๋ํ ์๋ฒ์ ์๋ต ์คํจ
์ฐธ๊ณ
https://developer.mozilla.org/ko/docs/Web/HTTP
HTTP | MDN
ํ์ดํผํ ์คํธ ์ ์ก ํ๋กํ ์ฝ(HTTP)์ HTML๊ณผ ๊ฐ์ ํ์ดํผ๋ฏธ๋์ด ๋ฌธ์๋ฅผ ์ ์กํ๊ธฐ ์ํ ์ ํ๋ฆฌ์ผ์ด์ ๋ ์ด์ด ํ๋กํ ์ฝ์ ๋๋ค. ์น ๋ธ๋ผ์ฐ์ ์ ์น ์๋ฒ๊ฐ์ ํต์ ์ ์ํด ์ค๊ณ๋์์ง๋ง ๋ค๋ฅธ ๋ชฉ์ ์ผ๋ก
developer.mozilla.org