์ค๋์ ํ์ด ํ๋ก๊ทธ๋๋ฐ ์์ด ํผ์์ ๊ณ์ HTTP์ ๋คํธ์ํฌ ๊ด๋ จ ์ด๋ก ์ ๊ณต๋ถํ๋๋ฐ์. ์์ง ์ด๋ก ๋ง ๋ฐฐ์์ ๊ทธ๋ฐ์ง ๋ด์ฉ๋ค์ด ์ถ์์ ์ผ๋ก ๋ค๊ฐ์ ๋นจ๋ฆฌ ์ค์ต์ ํด๋ณด๊ณ ์ถ์์ต๋๋ค. Urclass์ ์๋ ๋ด์ฉ ๊ณต๋ถ๊ฐ ๋นจ๋ฆฌ ๋๋ ๋ณต์ต ๊ฒธ ์ํ์ฝ๋ฉ์ ์๋ HTTP์ DNS ๋์์์ ๋ณด๋ฉด์ ๋ค์ ํ๋ฒ ๋ด์ฉ๋ค์ ์ ๋ฆฌํ์ต๋๋ค.
HTTP์์์ ์๋ฒ์ ํด๋ผ์ด์ธํธ๋ Section 1 HA๊ฐ ๋๋๊ณ ์ ๋ฆฌํ๋ ์ ์ด ์์ด์ ๊ทธ ๋ถ๋ถ์ ์๋ตํ๊ณ ๋์ด๊ฐ๊ฒ ์ต๋๋ค.
TIL 22 (1): ์น ๊ตฌ๋ ๋ฐฉ์
์ค๋์ Solo Day๋ก ๊ฐ์ธ์ ์ผ๋ก ์ถ๊ฐ ๊ณต๋ถ๋ฅผ ํ๋ ๋ ์ ๋๋ค! ํ์์์ ๊ถ๊ธํ๋ ์น ๊ตฌ๋ ๋ฐฉ์์ด๋ ์ปดํจํฐ ํ๋์จ์ด์ ๋ํด ๊ณต๋ถํด๋ณด๋ ค๊ณ ํฉ๋๋ค. ๋ฌผ๋ก ๊ฐ๋ฐ์๋คํํ ๋ ์ฝ๋ฉ ์ค๋ ฅ์ด ์ ์ผ ์ค์ํ๊ฒ
high-developer.tistory.com
์์ํ ๋ด์ฉ๋ค์ ๋ง์ด ๋ฐฐ์์ ์ ๋ฆฌํ ๊ฒ๋ค์ด ๋ง์ ๊ตฌ์กฐ ์ก๊ธฐ๊ฐ ์ข ์ด๋ ต์ง๋ง ์ค์ํ๊ฑฐ๋ ์ ์๊ฒ ๋ง์ด ๋ฏ์ ๋ถ๋ถ์ ์ค์ ์ ๋์ด ์ ๋ฆฌํด๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค ๐
์น์ ๊ธฐ๋ณธ์ ์ธ 4๊ฐ์ง ๊ตฌ์ฑ์์
HTML: ์นํ์ด์ง๋ฅผ ๋ง๋๋ ์ปดํจํฐ ์ธ์ด
URL, URI: ์ํ๋ ์นํ์ด์ง๋ฅผ ๋ฐฉ๋ฌธํ ์ ์๊ฒ ๋์์ฃผ๋ ์ฃผ์์ฒด๊ณ
Web browser, Web server: ์นํ์ด์ง๋ฅผ ์ฃผ๊ณ ๋ฐ๋ ์ํํธ์จ์ด
HTTP(HyperText Transfer Protocol): Web browser๋ Web server๊ฐ ํต์ ํ ๋ ์ฌ์ฉํ๋ ํต์ ๊ท์น
HTTP Message
Request Message์ Response Message ์ ํ์์ ๋น์ทํฉ๋๋ค.
Request
Start line
Start line์ ์์ฒญ์ด๋ ์๋ต์ ์ํ๋ฅผ ๋ํ๋ ๋๋ค. ์๋ต์์๋ Status line์ด๋ผ๊ณ ๋ถ๋ฆ ๋๋ค.
Startline์๋ ์ธ ๊ฐ์ง ์์๊ฐ ์์ต๋๋ค.
- HTTP method: ์ด๋ ์ํํ ์์ (GET, PUT, POST ๋ฑ)์ด๋ ๋ฐฉ์(HEAD or OPTIONS) ๋ฑ์ ๋งํฉ๋๋ค. ์๋ฅผ ๋ค์ด GET method๋ ๋ฆฌ์์ค๋ฅผ ๋ฐ์์ผ ํ๊ณ , POST method๋ ๋ฐ์ดํฐ๋ฅผ ์๋ฒ๋ก ์ ์กํฉ๋๋ค.
- ์์ฒญ ๋์(์ผ๋ฐ์ ์ผ๋ก URL์ด๋ URI) ๋๋ ํ๋กํ ์ฝ, ํฌํธ, ๋๋ฉ์ธ์ ์ ๋ ๊ฒฝ๋ก์๊ฐ์์ฑ๋ฉ๋๋ค. ํ์์ HTTP method ๋ง๋ค ๋ค๋ฆ
๋๋ค. ์ด ๋ถ๋ถ์ ์ค์ ์์ ์ฌ์ฉํ๋ฉด์ ์ตํ๋ด์ผํ ๊ฒ ๊ฐ์ต๋๋ค. ์๊ฐ ๋ ๋ ๊ฐ ํ์์ ํน์ง์ ๋ํด ์์๋ณด๊ณ ์ถ์ต๋๋ค.
- origin ํ์ :
?
์ ์ฟผ๋ฆฌ ๋ฌธ์์ด์ด ๋ถ๋ ์ ๋ ๊ฒฝ๋ก์ ๋๋ค. POST, GET, HEAD, OPTIONS ๋ฑ์ method์ ํจ๊ป ์ฌ์ฉํฉ๋๋ค. —> HTTP Verb, URI(Uniform Research Identifier), HTTP version numberPOST / HTTP 1.1GET /background.png HTTP/1.0HEAD /test.html?query=alibaba HTTP/1.1OPTIONS /anypage.html HTTP/1.0
- absolute ํ์ : ์์ ํ URL ํ์์ผ๋ก, ํ๋ก์์ ์ฐ๊ฒฐํ๋ ๊ฒฝ์ฐ ๋๋ถ๋ถ GET method์ ํจ๊ป ์ฌ์ฉํฉ๋๋ค.
GET <[http://developer.mozilla.org/en-US/docs/Web/HTTP/Messages](http://developer.mozilla.org/en-US/docs/Web/HTTP/Messages)\> HTTP/1.1
- authority ํ์ : ๋๋ฉ์ธ ์ด๋ฆ๊ณผ ํฌํธ ๋ฒํธ๋ก ์ด๋ฃจ์ด์ง URL์ authority component ์
๋๋ค. HTTP ํฐ๋์ ๊ตฌ์ถํ๋ ๊ฒฝ์ฐ,
CONNECT
์ ํจ๊ป ์ฌ์ฉํ ์ ์์ต๋๋ค.CONNECT developer.mozilla.org:80 HTTP/1.1
- asterisk ํ์ :
OPTIONS
์ ํจ๊ป ๋ณํ(``) ํ๋๋ก ์๋ฒ ์ ์ฒด๋ฅผ ํํํฉ๋๋ค.OPTIONS \* HTTP/1.1
- origin ํ์ :
- HTTP ๋ฒ์ ์ ๋ฉ์์ง์ ๋ค๋ฅธ ๊ตฌ์กฐ๋ฅผ ๊ฒฐ์ ํฉ๋๋ค. ์ด๋ฅผ ์ํด HTTP ๋ฒ์ ์ ํจ๊ป ์ ๋ ฅํฉ๋๋ค.
Headers
์์ฒญ์ Headers๋ Name:Value ํ์์ผ๋ก ๋์๋ฌธ์ ๊ตฌ๋ถ ์๋ ๋ฌธ์์ด๊ณผ ์ฝ๋ก (:), ๊ฐ์ ์ ๋ ฅํฉ๋๋ค. ๊ฐ์ ํค๋์ ๋ฐ๋ผ ๋ค๋ฆ ๋๋ค.
๋ค์๊ณผ ๊ฐ์ ์ข ๋ฅ์ ํค๋๋ค์ด ์์ต๋๋ค.
- General headers : ๋ฉ์์ง ์ ์ฒด์ ์ ์ฉ๋ฉ๋๋ค.
- Request headers : User-Agent, Accept-Type, Accept-Language๊ณผ ๊ฐ์ ํค๋๋ ์์ฒญ์ ๋ณด๋ค ๊ตฌ์ฒดํํฉ๋๋ค. Referer์ฒ๋ผ ์ปจํ ์คํธ๋ฅผ ์ ๊ณตํ๊ฑฐ๋ If-None๊ณผ ๊ฐ์ด ์กฐ๊ฑด์ ๋ฐ๋ผ ์ ์ฝ์ ์ถ๊ฐํ ์ ์์ต๋๋ค.
- Entity headers : Content-Length(Byte ๋จ์)์ ๊ฐ์ ํค๋๋ body์ ์ ์ฉ๋ฉ๋๋ค. body๊ฐ ๋น์ด์๋ ๊ฒฝ์ฐ, entity headers๋ ์ ์ก๋์ง ์์ต๋๋ค.
User-Agent, Accept-Type, Accept-Language, Content-Length ๋ฑ์ ์ ํํ ์๋ฏธ ๋ฐ ์ญํ ์ ๋ ๊ณต๋ถํด๋ด์ผํ ๊ฒ ๊ฐ์ต๋๋ค.
empty line
๋น์ค๋ก ํค๋์ ๋ณธ๋ฌธ์ ๊ตฌ๋ถํฉ๋๋ค.
Body
Body๋ HTTP messages ๊ตฌ์กฐ์ ๋ง์ง๋ง์ ์์นํด ์์ผ๋ฉฐ, ๋ชจ๋ ์์ฒญ์ body๊ฐ ํ์ํ์ง๋ ์์ต๋๋ค. GET, HEAD, DELETE, OPTIONS์ฒ๋ผ ์๋ฒ์ ๋ฆฌ์์ค๋ฅผ ์์ฒญํ๋ ๊ฒฝ์ฐ์๋ body๊ฐ ํ์ํ์ง ์์ต๋๋ค. POST๋ PUT๊ณผ ๊ฐ์ ์ผ๋ถ ์์ฒญ์ ์น๋ธ๋ผ์ฐ์ ๊ฐ ์น์๋ฒ์๊ฒ ๋ฐ์ดํฐ๋ฅผ '์ ์ก'ํด์ ์ ๋ฐ์ดํธํด์ผ ํ๊ธฐ ๋๋ฌธ์ body๋ฅผ ์ฌ์ฉํฉ๋๋ค. b ody๋ ๋ ์ข ๋ฅ๋ก ๋๋์ด์ง๋๋ค.
- Single-resource bodies(๋จ์ผ-๋ฆฌ์์ค ๋ณธ๋ฌธ) : ํค๋ ๋ ๊ฐ(Content-Type๊ณผ Content-Length)๋ก ์ ์๋ ๋จ์ผ ํ์ผ๋ก ๊ตฌ์ฑ๋ฉ๋๋ค.
- Multiple-resource bodies(๋ค์ค-๋ฆฌ์์ค ๋ณธ๋ฌธ) : ์ฌ๋ฌ ํํธ๋ก ๊ตฌ์ฑ๋ ๋ณธ๋ฌธ์์๋ ๊ฐ ํํธ๋ง๋ค ๋ค๋ฅธ ์ ๋ณด๋ฅผ ์ง๋๋๋ค. ๋ณดํตHTML form๊ณผ ๊ด๋ จ์ด ์์ต๋๋ค.
Response
Status Line
์๋ต์ ์ฒซ ์ค์ Status line์ด๋ผ๊ณ ๋ถ๋ฅด๋ฉฐ, ๋ค์์ ์ ๋ณด๋ฅผ ํฌํจํฉ๋๋ค. (HTTP/1.1 404 Not Found โก๏ธ HTTP version, Status Code, Reason Phrase)
- ํ์ฌ ํ๋กํ ์ฝ์ ๋ฒ์ (HTTP/1.1)
- ์ํ ์ฝ๋ - ์์ฒญ์ ๊ฒฐ๊ณผ๋ฅผ ๋ํ๋ ๋๋ค. (200, 302, 404 ๋ฑ)
- ์ํ ํ ์คํธ - ์ํ ์ฝ๋์ ๋ํ ์ค๋ช
์ํ ์ฝ๋์ ์๋ฏธ
2XX: Sucess (ex. 200 OK)
3XX: Redirection
4XX: Client Error (ex. 404 Not Found, 403 Forbidden(๊ด๊ณ์ ์ธ ์ถ์ ๊ธ์ง์ ๊ฐ์ ์๋ฏธ))
5XX: Server Error (ex. 500 Internal Server Error)
Headers
์๋ต์ ๋ค์ด๊ฐ๋ HTTP headers๋ ์์ฒญ ํค๋์ ๋์ผํ ๊ตฌ์กฐ๋ฅผ ๊ฐ์ง๊ณ ์์ต๋๋ค. ๋์๋ฌธ์ ๊ตฌ๋ถ ์๋ ๋ฌธ์์ด๊ณผ ์ฝ๋ก (:), ๊ฐ์ ์ ๋ ฅํฉ๋๋ค. ๊ฐ์ ํค๋์ ๋ฐ๋ผ ๋ค๋ฆ ๋๋ค. ์์ฒญ์ ํค๋์ ๋ง์ฐฌ๊ฐ์ง๋ก ๋ช ๊ทธ๋ฃน์ผ๋ก ๋๋ ์ ์์ต๋๋ค. (Name: Value)
- General headers : ๋ฉ์์ง ์ ์ฒด์ ์ ์ฉ๋ฉ๋๋ค.
- Response headers : Vary, Accept-Ranges์ ๊ฐ์ด ์ํ ์ค์ ๋ฃ๊ธฐ์๋ ๊ณต๊ฐ์ด ๋ถ์กฑํ๋ ์ถ๊ฐ ์ ๋ณด๋ฅผ ์ ๊ณตํฉ๋๋ค.
- Entity headers : Content-Length์ ๊ฐ์ ํค๋๋ body์ ์ ์ฉ๋ฉ๋๋ค. body๊ฐ ๋น์ด์๋ ๊ฒฝ์ฐ, entity headers๋ ์ ์ก๋์ง ์์ต๋๋ค.
Blank Line
Header์ Body ์ฌ์ด์ ๊ตฌ๋ถ์ ์ด๋ผ๊ณ ํ ์ ์์ต๋๋ค.
Body
์๋ต์ ๋ณธ๋ฌธ์ HTTP messages ๊ตฌ์กฐ์ ๋ง์ง๋ง์ ์์นํฉ๋๋ค. ๋ชจ๋ ์๋ต์ body๊ฐ ํ์ํ์ง๋ ์์ต๋๋ค. 201, 204์ ๊ฐ์ ์ํ ์ฝ๋๋ฅผ ๊ฐ์ง๋ ์๋ต์๋ ๋ณธ๋ฌธ์ด ํ์ํ์ง ์์ต๋๋ค. ์๋ต์ body๋ ๋ค์๊ณผ ๊ฐ์ด ๋ ์ข ๋ฅ๋ก ๋๋ ์ ์์ต๋๋ค.
- Single-resource bodies(๋จ์ผ-๋ฆฌ์์ค ๋ณธ๋ฌธ) :
- ๊ธธ์ด๊ฐ ์๋ ค์ง ๋จ์ผ-๋ฆฌ์์ค ๋ณธ๋ฌธ์ ๋ ๊ฐ์ ํค๋(Content-Type, Content-Length)๋ก ์ ์ํฉ๋๋ค.
- ๊ธธ์ด๋ฅผ ๋ชจ๋ฅด๋ ๋จ์ผ ํ์ผ๋ก ๊ตฌ์ฑ๋ ๋จ์ผ-๋ฆฌ์์ค ๋ณธ๋ฌธ์ Transfer-Encoding์ด chunked ๋ก ์ค์ ๋์ด ์์ผ๋ฉฐ, ํ์ผ์ chunk๋ก ๋๋์ด ์ธ์ฝ๋ฉ๋์ด ์์ต๋๋ค.
- Multiple-resource bodies(๋ค์ค-๋ฆฌ์์ค ๋ณธ๋ฌธ) : ์๋ก ๋ค๋ฅธ ์ ๋ณด๋ฅผ ๋ด๊ณ ์๋ body์ ๋๋ค.
Stateless
Stateless๋ ๋ง ๊ทธ๋๋ก ์ํ๋ฅผ ๊ฐ์ง์ง ์๋๋ค๋ ๋ป์ ๋๋ค. HTTP๋ ํต์ ๊ท์ฝ์ผ ๋ฟ์ด๋ฏ๋ก, ์ํ๋ฅผ ์ ์ฅํ์ง ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, ์ฌ์ฉ์์ ์ฅ๋ฐ๊ตฌ๋์ ๊ฐ์ ์ํ๋ฅผ ์ ์ฅํ ์ ์์ต๋๋ค. ๋ฐ๋ผ์, ํ์์ ๋ฐ๋ผ ๋ค๋ฅธ ๋ฐฉ๋ฒ(์ฟ ํค-์ธ์ , API, Web Storage ๋ฑ)์ ํตํด ์ํ๋ฅผ ํ์ธํ ์ ์์ต๋๋ค.
'TIL > CS' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
TIL 32: [HTTP/๋คํธ์ํฌ] ์ค์ต (0) | 2021.09.04 |
---|---|
TIL 31: [HTTP/๋คํธ์ํฌ] ๊ธฐ์ด(2) (0) | 2021.09.02 |