TIL 31: [HTTP/๋„คํŠธ์›Œํฌ] ๊ธฐ์ดˆ(1)

์˜ค๋Š˜์€ ํŽ˜์–ด ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์—†์ด ํ˜ผ์ž์„œ ๊ณ„์† HTTP์™€ ๋„คํŠธ์›Œํฌ ๊ด€๋ จ ์ด๋ก ์„ ๊ณต๋ถ€ํ–ˆ๋Š”๋ฐ์š”. ์•„์ง ์ด๋ก ๋งŒ ๋ฐฐ์›Œ์„œ ๊ทธ๋Ÿฐ์ง€ ๋‚ด์šฉ๋“ค์ด ์ถ”์ƒ์ ์œผ๋กœ ๋‹ค๊ฐ€์™€ ๋นจ๋ฆฌ ์‹ค์Šต์„ ํ•ด๋ณด๊ณ  ์‹ถ์—ˆ์Šต๋‹ˆ๋‹ค. Urclass์— ์žˆ๋Š” ๋‚ด์šฉ ๊ณต๋ถ€๊ฐ€ ๋นจ๋ฆฌ ๋๋‚˜ ๋ณต์Šต ๊ฒธ ์ƒํ™œ์ฝ”๋”ฉ์— ์žˆ๋Š” HTTP์™€ DNS ๋™์˜์ƒ์„ ๋ณด๋ฉด์„œ ๋‹ค์‹œ ํ•œ๋ฒˆ ๋‚ด์šฉ๋“ค์„ ์ •๋ฆฌํ–ˆ์Šต๋‹ˆ๋‹ค.

HTTP์—์„œ์˜ ์„œ๋ฒ„์™€ ํด๋ผ์ด์–ธํŠธ๋Š” Section 1 HA๊ฐ€ ๋๋‚˜๊ณ  ์ •๋ฆฌํ–ˆ๋˜ ์ ์ด ์žˆ์–ด์„œ ๊ทธ ๋ถ€๋ถ„์€ ์ƒ๋žตํ•˜๊ณ  ๋„˜์–ด๊ฐ€๊ฒ ์Šต๋‹ˆ๋‹ค.

TIL 22: ์›น ๊ตฌ๋™ ๋ฐฉ์‹

 

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์—๋Š” ์„ธ ๊ฐ€์ง€ ์š”์†Œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

  1. HTTP method: ์ด๋Š” ์ˆ˜ํ–‰ํ•  ์ž‘์—…(GET, PUT, POST ๋“ฑ)์ด๋‚˜ ๋ฐฉ์‹(HEAD or OPTIONS) ๋“ฑ์„ ๋งํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด GET method๋Š” ๋ฆฌ์†Œ์Šค๋ฅผ ๋ฐ›์•„์•ผ ํ•˜๊ณ , POST method๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์„œ๋ฒ„๋กœ ์ „์†กํ•ฉ๋‹ˆ๋‹ค.
  2. ์š”์ฒญ ๋Œ€์ƒ(์ผ๋ฐ˜์ ์œผ๋กœ URL์ด๋‚˜ URI) ๋˜๋Š” ํ”„๋กœํ† ์ฝœ, ํฌํŠธ, ๋„๋ฉ”์ธ์˜ ์ ˆ๋Œ€ ๊ฒฝ๋กœ์—๊ฐ€์ž‘์„ฑ๋ฉ๋‹ˆ๋‹ค. ํ˜•์‹์€ HTTP method ๋งˆ๋‹ค ๋‹ค๋ฆ…๋‹ˆ๋‹ค. ์ด ๋ถ€๋ถ„์€ ์‹ค์ „์—์„œ ์‚ฌ์šฉํ•˜๋ฉด์„œ ์ตํ˜€๋ด์•ผํ•  ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์‹œ๊ฐ„ ๋‚  ๋•Œ ๊ฐ ํ˜•์‹์˜ ํŠน์ง•์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.
    • origin ํ˜•์‹ :?์™€ ์ฟผ๋ฆฌ ๋ฌธ์ž์—ด์ด ๋ถ™๋Š” ์ ˆ๋Œ€ ๊ฒฝ๋กœ์ž…๋‹ˆ๋‹ค. POST, GET, HEAD, OPTIONS ๋“ฑ์˜ method์™€ ํ•จ๊ป˜ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. —> HTTP Verb, URI(Uniform Research Identifier), HTTP version number
      POST / 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
  3. 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)

  1. ํ˜„์žฌ ํ”„๋กœํ† ์ฝœ์˜ ๋ฒ„์ „(HTTP/1.1)
  2. ์ƒํƒœ ์ฝ”๋“œ - ์š”์ฒญ์˜ ๊ฒฐ๊ณผ๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค. (200, 302, 404 ๋“ฑ)
  3. ์ƒํƒœ ํ…์ŠคํŠธ - ์ƒํƒœ ์ฝ”๋“œ์— ๋Œ€ํ•œ ์„ค๋ช…

์ƒํƒœ ์ฝ”๋“œ์˜ ์˜๋ฏธ

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