HTTP(Hyper Text Transfer Protocol)
์ ๋๋ฌธ์์ด๋ก, ํ ์คํธ ๊ธฐ๋ฐ์ ํต์ ๊ท์ฝ์ผ๋ก์ธํฐ๋ท์์ ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ์ ์ ์๋ ํ๋กํ ์ฝ
์ด๋ค. ์ฃผ๋กHTML
๋ฌธ์๋ฅผ ์ฃผ๊ณ ๋ฐ๋ ๋ฐ์ ์ฐ์ธ๋ค. ์ฃผ๋กTCP
๋ฅผ ์ฌ์ฉํ๊ณHTTP/3
๋ถํฐ๋UDP
๋ฅผ ์ฌ์ฉํ๋ฉฐ,80๋ฒ ํฌํธ
๋ฅผ ์ฌ์ฉํ๋ค. 1996๋ ๋ฒ์ 1.0, ๊ทธ๋ฆฌ๊ณ 1999๋ 1.1์ด ๊ฐ๊ฐ ๋ฐํ๋์๋ค.
์ด๋ ๊ฒ ๊ท์ฝ์ ์ ํด๋์๊ธฐ ๋๋ฌธ์ ๋ชจ๋ ํ๋ก๊ทธ๋จ์ด ์ด ๊ท์ฝ์ ๋ง์ถฐ ๊ฐ๋ฐํด์ ์๋ก ์ ๋ณด๋ฅผ ๊ตํํ ์ ์๊ฒ ๋์๋ค.
HTTP๋ ํด๋ผ์ด์ธํธ์ ์๋ฒ ์ฌ์ด์ ์ด๋ฃจ์ด์ง๋ ์์ฒญ/์๋ต(request/response) ํ๋กํ ์ฝ
์ด๋ค. ์๋ฅผ ๋ค๋ฉด, ํด๋ผ์ด์ธํธ์ธ ์น ๋ธ๋ผ์ฐ์ ๊ฐ HTTP๋ฅผ ํตํ์ฌ ์๋ฒ๋ก๋ถํฐ ์นํ์ด์ง(HTML)๋ ๊ทธ๋ฆผ ์ ๋ณด๋ฅผ ์์ฒญํ๋ฉด, ์๋ฒ๋ ์ด ์์ฒญ์ ์๋ตํ์ฌ ํ์ํ ์ ๋ณด๋ฅผ ํด๋น ์ฌ์ฉ์์๊ฒ ์ ๋ฌํ๊ฒ ๋๋ค. ์ด ์ ๋ณด๊ฐ ๋ชจ๋ํฐ์ ๊ฐ์ ์ถ๋ ฅ ์ฅ์น๋ฅผ ํตํด ์ฌ์ฉ์์๊ฒ ๋ํ๋๋ ๊ฒ์ด๋ค.
Request(์์ฒญ)
: Client(์ฌ์ฉ์) --> ServerResponse(์๋ต)
: Server --> Client(์ฌ์ฉ์)
HTML ๋ฌธ์๋ง์ด HTTP ํต์ ์ ์ํ ์ ์ผํ ์ ๋ณด ๋ฌธ์๋ ์๋๋ค.
Plain text๋ก ๋ถํฐ JSON ๋ฐ์ดํฐ ๋ฐ XML๊ณผ ๊ฐ์ ํํ์ ์ ๋ณด๋ ์ฃผ๊ณ ๋ฐ์ ์ ์์ผ๋ฉฐ, ๋ณดํต์ ํด๋ผ์ด์ธํธ๊ฐ ์ด๋ค ์ ๋ณด๋ฅผ HTML ํํ๋ก ๋ฐ๊ณ ์ถ์์ง, JSON ํํ๋ก ๋ฐ๊ณ ์ถ์์ง ๋ช
์ํด์ฃผ๋ ๊ฒฝ์ฐ๊ฐ ๋ง๋ค.
TCP/IP
๋ฅผ ์ด์ฉํ๋ ์์ฉ ํ๋กํ ์ฝ์ด๋ค.ํต์ ๋ง(Network)
์ ํตํด ์ํ๋ ์ ๋ณด(๋ฐ์ดํฐ)๋ฅผ ์ฃผ๊ณ ๋ฐ๋ ๊ธฐ๋ฅ์ ์ด์ฉํ๋ ์์ฉ ํ๋กํ ์ฝ๋น์ฐ๊ฒฐ์ฑ ํ๋กํ ์ฝ
์ด๋ค.Cookie
์ Session
์ด ๋ฑ์ฅํ๋ค.๋น์ฐ๊ฒฐ์ฑ ํ๋กํ ์ฝ
์ด๊ธฐ ๋๋ฌธ์ Request/Response
๋ฐฉ์์ผ๋ก ๋์ํ๋ค.Cookie
, Session
Cookie
: ์ฌ์ดํธ๋ฅผ ์ด์ฉํ๊ฑฐ๋ ๋ฐฉ๋ฌธํ ๋ ๋ธ๋ผ์ฐ์ ์ ์ ์ฅ๋๋ ์ ๋ณด๋ค
- ์ฌ์ฉ์๊ฐ ์ด๋ค ์ฌ์ดํธ๋ฅผ ๋ฐฉ๋ฌธํ์ ๋ ๊ทธ ์ฌ์ดํธ์์ ์ฌ์ฉํ๋ ์๋ฒ๋ฅผ ํตํด
Cookie
๋ฅผ ์ ๊ณต๋ฐ๋๋ค.- ์ด
Cookie
๋ ๋ฐฉ๋ฌธํ ์ฌ์ฉ์์ PC์ ์ ์ฅ๋๊ณ , ์ธํฐ๋ท ์ฌ์ฉ์๊ฐ ๊ฐ์ ์น์ฌ์ดํธ๋ฅผ ๋ฐฉ๋ฌธํ ๋ ๋ง๋ค ์ฝํ๊ณ ์์๋ก ์๋ก์ด ์ ๋ณด๋ก ๋ฐ๋๋ค.
Session
: ์ฟ ํค์ ์ ์ฅํ๊ธฐ ๊ณค๋ํ ์ ๋ณด๋ค์ ์ธ์
์ ์ ์ฅํด์ค๋ค. ๋ฐฉ๋ฌธํ ์ฌ๋์ ์ค์ํ ์ ๋ณด๋ค(ID ๋ฑ)์ ๋ฐฉ๋ฌธํ ์ฌ์ดํธ ์๋ฒ์ ๋ฉ๋ชจ๋ฆฌ๋ DB์ ์ ์ฅ๋๋ค.๋ง์ฝ ๋ค์ด๋ฒ์ ๋ก๊ทธ์ธ์ ํ ๋ค ์ฟ ํค๋ฅผ ์ง์๋ฒ๋ฆฌ๊ณ ์๋ก๊ณ ์นจ์ ํ๊ฒ๋๋ฉด ๋ก๊ทธ์ธ์ด ํ๋ ค๋ฒ๋ฆฐ๋ค.
์๊ทธ๋ด๊น? ์ด๋ฏธ ๋ค์ด๋ฒ์ ๋ก๊ทธ์ธ์ ํ์ผ๋ ์๋ฒ์ ์ธ์ ์์ด๋๋ ์ ์ฅ๋์ด ์์ง๋ง, ๊ทธ ์ธ์ ์์ด๋๊ฐ ์ฟ ํค์์ ์ง์์ก๊ธฐ ๋๋ฌธ์ด๋ค. ์๋ฒ์ ์๋ ์ธ์ ์์ด๋๊ฐ ๋ด๊ฑฐ๋ผ๋ ๊ฑธ PC์์๋ ์ ์ ์๋ค.
Cache
: ์ด๋ฏธ ํ ๋ฒ ๊บผ๋ด์จ ์ด๋ฏธ์ง๊ฐ์ ๋์ฉ๋ ํ์ผ์ ์์ ๋ณด๊ด๊ธฐ๋ณธ์ ์ผ๋ก HTTP ํ๋กํ ์ฝ ํ๊ฒฝ์ Connetcionless
, stateless
ํ ํน์ฑ์ ๊ฐ์ง๊ธฐ ๋๋ฌธ์ ์๋ฒ๋ ํด๋ผ์ด์ธํธ๊ฐ ๋๊ตฌ์ธ์ง ๋งค๋ฒ ํ์ธ์ ํด์ผํ๋ค. ์ด ํน์ฑ์ ๋ณด์ํ๊ธฐ ์ํด์ Cookie
์ Session
์ ์ฌ์ฉํ๊ฒ ๋๋ค.
Connetionless
: ํด๋ผ์ด์ธํธ๊ฐ ์์ฒญ์ ํ ํ ์๋ต์ ๋ฐ์ผ๋ฉด ๊ทธ ์ฐ๊ฒฐ์ ๋์ด๋ฒ๋ฆฌ๋ ํน์งStateless
: ํต์ ์ด ๋๋๋ฉด ์ํ๋ฅผ ์ ์งํ์ง ์๋ ํน์ง, ์ฐ๊ฒฐ์ ๋๋ ์๊ฐ ํด๋ผ์ด์ธํธ์ ์๋ฒ์ ํต์ ์ด ๋๋๋ฉฐ ์ํ ์ ๋ณด๋ ์ ์งํ์ง ์๋ ํน์ฑ์ด ์๋ค.
Session
์ ์๋ฒ์ ์์์ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ ๋ฌด๋ถ๋ณํ๊ฒ ๋ง๋ค๋ค๋ณด๋ฉด ์๋ฒ์ ๋ฉ๋ชจ๋ฆฌ๊ฐ ๊ฐ๋นํ ์ ์์ด์ง ์๊ฐ ์๊ณ ์๋๊ฐ ๋๋ ค์ง ์ ์๊ธฐ ๋๋ฌธ์ Cookie
๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์ ๋ฆฌํ ๊ฒฝ์ฐ๊ฐ ์๋ค.
Cookie
์ Session
์ ์ฌ์ฉํ์ง ์์ผ๋ฉด ์ผํ๋ชฐ์์ ์ท์ ๊ตฌ๋งคํ๋ ค ๊ตฌ๋งคํ๋ ค๊ณ ๋ก๊ทธ์ธ์ ํ์์๋, ํ์ด์ง๋ฅผ ์ด๋ํ ๋ ๋ง๋ค ๊ณ์ ๋ก๊ทธ์ธ์ ํด์ผํ๋ค. ๋ง์ฝ Cookie
์ Session
์ ์ฌ์ฉํ์ ๊ฒฝ์ฐ, ํ ๋ฒ ๋ก๊ทธ์ธ์ ํ๋ฉด ์ด๋ ํ ๋ฐฉ์์ ์ํด์ ๊ทธ ์ฌ์ฉ์์ ๋ํ ์ธ์ฆ์ ์ ์งํ๊ฒ ๋๋ค.
ํด๋ผ์ด์ธํธ๊ฐ ์๋ฒ์๊ฒ ์ฐ๋ฝํ๋ ๊ฒ์ ์์ฒญ์ด๋ผ๊ณ ํ๋ฉฐ ์์ฒญ์ ๋ณด๋ผ๋๋ ์์ฒญ์ ๋ํ ์ ๋ณด๋ฅผ ๋ด์ ์๋ฒ๋ก ๋ณด๋ธ๋ค. ์๋ฅผ ๋ค์ด, ์๋ฒ๊ฐ ์ฃผ๋ฌธ์ ๋ฐ์ ํด๋ผ์ด์ธํธ๊ฐ ์ด๋ค ๊ฒ์ ์ํ๋์ง ํ์ ํ ์ ์๊ฒ ํ๋ค. ์ด์ฒ๋ผ
์์ฒญ์ ์๋น์์ ์ฃผ๋ฌธ์๋ฅผ ์์ฑํ๋ ๊ฒ๊ณผ ๊ฐ๋ค๊ณ ์๊ฐํ๋ฉด ๋๋ค.
GET
: ํด๋ผ์ด์ธํธ๊ฐ ์๋ฒ์์ ์น ๋ฆฌ์์ค๋ฅผ ๋ฐ์์ฌ ๋ ์ฌ์ฉํ๋ค.HEAD
: HEAD๋ฅผ ์ฌ์ฉํ๋ฉด GET์ ํตํด ๋ฐ์์ค๋ Response์ Header๋ฅผ ๋ฐ์์ฌ ์ ์๋ค.POST
: ์น ์๋ฒ์ ๋ฐ์ดํฐ๋ฅผ ๋ณด๋ผ ๋ ์ฌ์ฉํ๋ค.PUT
: ์๋ฒ์ ๋ฐ์ดํฐ ์ ์ฅ์ ์์ฒญํ ๋ ์ฌ์ฉ๋๋ค DELETE
: ์๋ฒ์ ๋ฐ์ดํฐ ์ญ์ ๋ฅผ ์์ฒญํ ๋ ์ฌ์ฉ๋๋ค.TRACE
: ์ํ ์์
์ diagnostic trace๋ฅผ ์์ฒญํ ๋ ์ฌ์ฉ๋๋ค.OPTIONS
: ์ง์ํ๋ Request ๋ชฉ๋ก์ ๋ฐ์์ฌ ๋ ์ฌ์ฉํ๋ค. CONNECT
: ํ๋ก์์๊ฒ ๋ค๋ฅธ ํธ์คํธ์ ์ฐ๊ฒฐํ๊ณ ์ฝํ
์ธ ๋ฅผ ๋ถ์ํ๊ฑฐ๋ ์บ์ ์์ด ์๋ตํ๋๋ก ์ง์ํ๋ ๋ฐ ์ฌ์ฉ๋๋ค. GET https://velog.io/@jaehye0ng2 HTTP/1.1 // ์์์ค
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) ... // ํค๋
Upgrade-Insecure-Requests: 1
์ฒซ ์ค์ ๋ฉ์๋ ๊ตฌ์กฐ ๋ฒ์ ์ผ๋ก ๊ตฌ์ฑ๋์๋ค.
GET
: HTTP Methodhttps://velog.io/@jaehye0ng2
: ์ฌ์ดํธ ์ฃผ์HTTP/1.1
: HTTP ๋ฒ์ ํค๋๋ ์์ฒญ์ ๋ํ ์ ๋ณด๋ฅผ ๋ด๊ณ ์๋ค. User-Agent, Upgrade-Insecure-Requests ๋ฑ๋ฑ์ด ํค๋์ ํด๋น๋๋ฉฐ ํค๋์ ์ข ๋ฅ๋ ๋งค์ฐ ๋ง๋ค.
๋ณธ๋ฌธ์ ์์ฒญ์ ํ ๋ ํจ๊ป ๋ณด๋ผ ๋ฐ์ดํฐ๋ฅผ ๋ด๋ ๋ถ๋ถ์ด๋ค. ํ์ฌ ์์์๋ ๋จ์ํ ์ฃผ์๋ก๋ง ์์ฒญ์ ๋ณด๋ด๊ณ ์๊ณ ๋ฐ๋ก ๋ฐ์ดํฐ๋ฅผ ๋ด์ ๋ณด๋ด์ง ์๊ธฐ ๋๋ฌธ์ ๋ณธ๋ฌธ์ด ๋น์ด์๋ค.
์๋ฒ๊ฐ ์์ฒญ์ ๋ํ ๋ต๋ณ์ ํด๋ผ์ด์ธํธ์๊ฒ ๋ณด๋ด๋ ๊ฒ์ ์๋ต์ด๋ผ๊ณ ํ๋ค.
Status code
๋ 3์๋ฆฌ ์ซ์ ์ฝ๋์ด๋ฉฐ Request
์ ๋ํ ์๋ต์ผ๋ก ์๋ฒ์์ ์์ฑํ๋ค. ์์ ๋จ์์ ์ซ์์ ๋ฐ๋ผ ๋ค์ฏ ๊ทธ๋ฃน์ผ๋ก ๋๋ ์ ์๋ค.
1xx (Informational)
: ์๋ฒ์ ์ํ ์ ๋ณด2xx (Success)
: Request๋ฅผ ์์ ํ์๊ณ , ์๋ฏธ๋ฅผ ์ดํดํ์ผ๋ฉฐ, ์ด๋ฅผ ์ฒ๋ฆฌํ๋ค๋ ๊ฒ์ ์๋ฏธํ๋ค.
โ 200 OK = Request๋ฅผ ์ดํํ๋ค.
3xx (Redirection)
: Request๋ฅผ ์ฒ๋ฆฌํ๊ธฐ ์ํด ๋ค๋ฅธ ์ก์
์ด ํ์๋ก ํจ์ ์๋ฏธํ๋ค.
โ 301 Move Permanently = ์์ฒญ๋ ๋ฆฌ์์ค์ ์์น๊ฐ ์๊ตฌ์ ์ผ๋ก ๋ณ๊ฒฝ๋์์์ ์๋ฏธํ๋ค.
โก 302 Found & Redirect = ์์ฒญ๋ ๋ฆฌ์์ค์ ์์น๊ฐ ์์์ ์ผ๋ก ๋ณ๊ฒฝ๋์์์ ์๋ฏธํ๋ค.
4xx (Client Error)
: Request์ ๋ฌธ๋ฒ ์ค๋ฅ๊ฐ ์๊ฑฐ๋ ์๋ฏธ๋ฅผ ์ดํดํ์ง ๋ชปํจ์ ์๋ฏธํ๋ค.
โ 400 Bad Request = ์๋ฒ์์ Request๋ฅผ ์ดํดํ์ง ๋ชปํจ, ๊ตฌ๋ฌธ์ ์ค๋ฅ๊ฐ ์์ ๊ฐ๋ฅ์ฑ์ด ์์์ ์๋ฏธํ๋ค.
โก 403 Forbidden = ํด๋ผ์ด์ธํธ์ ์ ์์ ์๊ด์์ด ์๋ฒ์์ ๋ฆฌ์์ค ์ ๊ณต์ ๊ฑฐ๋ถํจ์ ์๋ฏธํ๋ค.
โข 404 Not Found = ์์ฒญ๋ ๋ฆฌ์์ค๋ฅผ ์๋ฒ์์ ์ฐพ์ง ๋ชปํจ์ ์๋ฏธํ๋ค.
โฃ 405 Method Not Allowed = ํด๋ผ์ด์ธํธ์์ ์์ฒญํ Request๋ฅผ ์๋ฒ์์ ํ์ฉํ์ง ์์์ ์๋ฏธํ๋ค.
5xx (Server Error)
: ์๋ฒ์์ Request๋ฅผ ์ฒ๋ฆฌํ์ง ๋ชปํ์์ ์๋ฏธํ๋ค.
โ 500 Internal Server Error = ์๋ฒ ๋ด๋ถ ํ๋ก๊ทธ๋จ์ ์ค๋ฅ.
โก 501 Method Not Implemented = Request method๊ฐ ์๋ชป๋์์์ ์๋ฏธํ๋ค.
โข 502 Bad Gateway = ํ๋ก์ ๋๋ ๊ฒ์ดํธ์จ์ด๋ ์
์คํธ๋ฆผ ์๋ฒ์์ ์๋ชป๋ ์๋ต์ ์์ ํ์์ ์๋ฏธํ๋ค.
โฃ 503 Service Unavailable = ๊ณผ๋ถํ๋ ์ ์ง ๋ณด์๋ก ์ธํด ์๋ฒ๊ฐ ์๋ตํ ์ ์์์ ์๋ฏธํ๋ค.
HTTP/1.1 200 OK // ์์์ค
Connection : keep-alive // ํค๋
Content-Encoding : gzip
content-Length : 35653
Content-Type : text/html;
์ฒซ ์ค์ ๋ฒ์ ์ํ์ฝ๋ ์ํ๋ฉ์์ง๋ก ๊ตฌ์ฑ๋์ด ์๋ค. 200์ ์ฑ๊ณต์ ์ธ ์์ฒญ์ด์๋ค๋ ๋ป์ด๋ค.
๋ ๋ฒ์งธ ์ค๋ถํฐ๋ ํค๋๋ก ์๋ต์ ๋ํ ์ ๋ณด๋ฅผ ๋ด๊ณ ์๋ค.
์๋ต์๋ ๋๋ถ๋ถ์ ๊ฒฝ์ฐ ๋ณธ๋ฌธ์ด ์๋ค. ๋ณดํต ๋ฐ์ดํฐ๋ฅผ ์์ฒญํ๊ณ ์๋ต ๋ฉ์์ง์๋ ์์ฒญํ ๋ฐ์ดํฐ๋ฅผ ๋ด์์ ๋ณด๋ด์ฃผ๊ธฐ ๋๋ฌธ์ด๋ค. ์๋ต ๋ฉ์์ง์ HTML์ด ๋ด๊ฒจ ์๋๋ฐ ์ด HTML์ ๋ฐ์ ๋ธ๋ผ์ฐ์ ๊ฐ ํ๋ฉด์ ๋ ๋๋งํ๋ค.