๐Ÿ”ฌComputer Science/๋„คํŠธ์›Œํฌ

TIL) HTTP๋ž€? HTTP Messages, HTTP Requests, HTTP Responses

hellohailie 2022. 6. 9. 14:01

 

HTTP๋ž€?

HyperText Transfer Protocol์˜ ์ค„์ž„๋ง๋กœ, HTML๊ณผ ๊ฐ™์€ ๋ฌธ์„œ๋ฅผ ์ „์†กํ•˜๊ธฐ ์œ„ํ•œ ํ”„๋กœํ† ์ฝœ์ด๋‹ค. 

 

HTTP Messages (ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„ ์‚ฌ์ด์—์„œ ๋ฐ์ดํ„ฐ๊ฐ€ ๊ตํ™˜๋˜๋Š” ๋ฐฉ์‹)

HTTP Messages ์˜ ์œ ํ˜• 2๊ฐ€์ง€

  • ์š”์ฒญ(Requests)
  • ์‘๋‹ต(Responses)

  1. start line : start line์—๋Š” ์š”์ฒญ์ด๋‚˜ ์‘๋‹ต์˜ ์ƒํƒœ๋ฅผ ๋‚˜ํƒ€๋‚ธ๋‹ค. ํ•ญ์ƒ ์ฒซ ๋ฒˆ์งธ ์ค„์— ์œ„์น˜ํ•ฉ๋‹ˆ๋‹ค. ์‘๋‹ต์—์„œ๋Š” status line์ด๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค.
  2. HTTP headers : ์š”์ฒญ์„ ์ง€์ •ํ•˜๊ฑฐ๋‚˜, ๋ฉ”์‹œ์ง€์— ํฌํ•จ๋œ ๋ณธ๋ฌธ์„ ์„ค๋ช…ํ•˜๋Š” ํ—ค๋”์˜ ์ง‘ํ•ฉ์ด๋‹ค.
  3. empty line : ํ—ค๋”์™€ ๋ณธ๋ฌธ์„ ๊ตฌ๋ถ„ํ•˜๋Š” ๋นˆ ์ค„.
  4. body : ์š”์ฒญ๊ณผ ๊ด€๋ จ๋œ ๋ฐ์ดํ„ฐ๋‚˜ ์‘๋‹ต๊ณผ ๊ด€๋ จ๋œ ๋ฐ์ดํ„ฐ ๋˜๋Š” ๋ฌธ์„œ๋ฅผ ํฌํ•จํ•œ๋‹ค. ์š”์ฒญ๊ณผ ์‘๋‹ต์˜ ์œ ํ˜•์— ๋”ฐ๋ผ ์„ ํƒ์ ์œผ๋กœ ์‚ฌ์šฉํ•œ๋‹ค.

 

HTTP์˜ ํฐ ํŠน์ง• : Stateless

HTTP๋กœ ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„๊ฐ€ ํ†ต์‹ ์„ ์ฃผ๊ณ ๋ฐ›๋Š” ๊ณผ์ •์—์„œ, HTTP๊ฐ€ ํด๋ผ์ด์–ธํŠธ๋‚˜ ์„œ๋ฒ„์˜ ์ƒํƒœ๋ฅผ ํ™•์ธํ•˜์ง€ ์•Š๋Š”๋‹ค. 

์ฆ‰, ํด๋ผ์ด์–ธํŠธ์—์„œ ๋ฐœ์ƒํ•œ ์ด๋Ÿฐ ๋ชจ๋“  ์ƒํƒœ๋ฅผ HTTP ํ†ต์‹ ์ด ์ถ”์ ํ•˜์ง€ ์•Š๋Š”๋‹ค.

 

HTTP๋Š” ํ†ต์‹  ๊ทœ์•ฝ์ผ ๋ฟ์ด๋ฏ€๋กœ, ์ƒํƒœ๋ฅผ ์ €์žฅํ•˜์ง€ ์•Š๋Š”๋‹ค.

 


HTTP Requests

Start line

- ์ˆ˜ํ–‰ํ•  ์ž‘์—…(GET, PUT, POST ๋“ฑ)์ด๋‚˜ ๋ฐฉ์‹(HEAD or OPTIONS)์„ ์„ค๋ช…ํ•˜๋Š” HTTP method๋ฅผ ๋‚˜ํƒ€๋‚ธ๋‹ค. 

- ์š”์ฒญ ๋Œ€์ƒ(์ผ๋ฐ˜์ ์œผ๋กœ URL์ด๋‚˜ URI) ๋˜๋Š” ํ”„๋กœํ† ์ฝœ, ํฌํŠธ, ๋„๋ฉ”์ธ์˜ ์ ˆ๋Œ€ ๊ฒฝ๋กœ๋Š” ์š”์ฒญ ์ปจํ…์ŠคํŠธ์— ์ž‘์„ฑ๋œ๋‹ค. ์ด ์š”์ฒญ ํ˜•์‹์€ HTTP method ๋งˆ๋‹ค ๋‹ค๋ฅด๋‹ค.

 

  • origin ํ˜•์‹ : '?'์™€ ์ฟผ๋ฆฌ ๋ฌธ์ž์—ด์ด ๋ถ™๋Š” ์ ˆ๋Œ€ ๊ฒฝ๋กœ. GET, POST, HEAD, OPTIONS ๋“ฑ์˜ method์™€ ํ•จ๊ป˜ ์‚ฌ์šฉํ•œ๋‹ค.

POST / HTTP 1.1

GET /background.png HTTP/1.0

HEAD /test.html?query=alibaba HTTP/1.1

OPTIONS /anypage.html HTTP/1.0

  • absolute ํ˜•์‹ : ์™„์ „ํ•œ URL ํ˜•์‹์œผ๋กœ, ํ”„๋ก์‹œ์— ์—ฐ๊ฒฐํ•˜๋Š” ๊ฒฝ์šฐ ๋Œ€๋ถ€๋ถ„ GET method์™€ ํ•จ๊ป˜ ์‚ฌ์šฉ.

GET http://developer.mozilla.org/en-US/docs/Web/HTTP/Messages HTTP/1.1

  • authority ํ˜•์‹ : ๋„๋ฉ”์ธ ์ด๋ฆ„๊ณผ ํฌํŠธ ๋ฒˆํ˜ธ๋กœ ์ด๋ฃจ์–ด์ง„ URL์˜ ์ผ๋ถ€๋ถ„. HTTP ํ„ฐ๋„์„ ๊ตฌ์ถ•ํ•˜๋Š” ๊ฒฝ์šฐ, CONNECT์™€ ํ•จ๊ป˜ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

CONNECT developer.mozilla.org:80 HTTP/1.1

  • asterisk ํ˜•์‹ : OPTIONS ์™€ ํ•จ๊ป˜ ๋ณ„ํ‘œ(*) ํ•˜๋‚˜๋กœ ์„œ๋ฒ„ ์ „์ฒด๋ฅผ ํ‘œํ˜„.

OPTIONS * HTTP/1.1

 

 

- HTTP ๋ฒ„์ „์— ๋”ฐ๋ผ HTTP message์˜ ๊ตฌ์กฐ๊ฐ€ ๋‹ฌ๋ผ์ง„๋‹ค. ๋”ฐ๋ผ์„œ start line์— HTTP ๋ฒ„์ „์„ ํ•จ๊ป˜ ์ž…๋ ฅํ•œ๋‹ค. 

 

Headers

ํ—ค๋” ์ด๋ฆ„(๋Œ€์†Œ๋ฌธ์ž ๊ตฌ๋ถ„์ด ์—†๋Š” ๋ฌธ์ž์—ด), ์ฝœ๋ก ( : ), ๊ฐ’์„ ์ž…๋ ฅํ•œ๋‹ค. (๊ฐ’์€ ํ—ค๋”์— ๋”ฐ๋ผ ๋‹ค๋ฆ„)

 

[ํ—ค๋”์˜ ์ข…๋ฅ˜]

  • General headers : ๋ฉ”์‹œ์ง€ ์ „์ฒด์— ์ ์šฉ๋˜๋Š” ํ—ค๋”๋กœ, body๋ฅผ ํ†ตํ•ด ์ „์†ก๋˜๋Š” ๋ฐ์ดํ„ฐ์™€๋Š” ๊ด€๋ จ์ด ์—†๋Š” ํ—ค๋”
  • Request headers : fetch๋ฅผ ํ†ตํ•ด ๊ฐ€์ ธ์˜ฌ ๋ฆฌ์†Œ์Šค๋‚˜ ํด๋ผ์ด์–ธํŠธ ์ž์ฒด์— ๋Œ€ํ•œ ์ž์„ธํ•œ ์ •๋ณด๋ฅผ ํฌํ•จํ•˜๋Š” ํ—ค๋” // User-Agent, Accept-Type, Accept-Language์™€ ๊ฐ™์€ ํ—ค๋”๋Š” ์š”์ฒญ์„ ๋ณด๋‹ค ๊ตฌ์ฒดํ™”ํ•˜๊ณ , Referer์ฒ˜๋Ÿผ ์ปจํ…์ŠคํŠธ๋ฅผ ์ œ๊ณตํ•˜๊ฑฐ๋‚˜ If-None๊ณผ ๊ฐ™์ด ์กฐ๊ฑด์— ๋”ฐ๋ผ ์ œ์•ฝ์„ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • Representation headers : ์ด์ „์—๋Š” Entity headers๋กœ ๋ถˆ๋ €์œผ๋ฉฐ, body์— ๋‹ด๊ธด ๋ฆฌ์†Œ์Šค์˜ ์ •๋ณด(์ฝ˜ํ…์ธ  ๊ธธ์ด, MIME ํƒ€์ž… ๋“ฑ)๋ฅผ ํฌํ•จํ•˜๋Š” ํ—ค๋”

 

Body (๋ณธ๋ฌธ)

HTTP messages ๊ตฌ์กฐ์˜ ๋งˆ์ง€๋ง‰์— ์œ„์น˜ํ•œ๋‹ค.

๋ชจ๋“  ์š”์ฒญ์— body๊ฐ€ ํ•„์š”ํ•˜์ง€ ์•Š๋Š”๋‹ค. (GET, HEAD, DELETE, OPTIONS์ฒ˜๋Ÿผ ์„œ๋ฒ„์— ๋ฆฌ์†Œ์Šค๋ฅผ ์š”์ฒญํ•˜๋Š” ๊ฒฝ์šฐ์—๋Š” ๋ณธ๋ฌธ์ด ํ•„์š”X) POST๋‚˜ PUT๊ณผ ๊ฐ™์€ ์ผ๋ถ€ ์š”์ฒญ์€ ๋ฐ์ดํ„ฐ๋ฅผ ์—…๋ฐ์ดํŠธํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ

 

[๋ณธ๋ฌธ์˜ ์ข…๋ฅ˜]

  • Single-resource bodies(๋‹จ์ผ-๋ฆฌ์†Œ์Šค ๋ณธ๋ฌธ) : ํ—ค๋” ๋‘ ๊ฐœ(Content-Type๊ณผ Content-Length)๋กœ ์ •์˜๋œ ๋‹จ์ผ ํŒŒ์ผ๋กœ ๊ตฌ์„ฑ๋œ๋‹ค.
  • Multiple-resource bodies(๋‹ค์ค‘-๋ฆฌ์†Œ์Šค ๋ณธ๋ฌธ) : ์—ฌ๋Ÿฌ ํŒŒํŠธ๋กœ ๊ตฌ์„ฑ๋œ ๋ณธ๋ฌธ์—์„œ๋Š” ๊ฐ ํŒŒํŠธ๋งˆ๋‹ค ๋‹ค๋ฅธ ์ •๋ณด๋ฅผ ์ง€๋‹Œ๋‹ค. ๋ณดํ†ต HTML form๊ณผ ๊ด€๋ จ์ด ์žˆ๋‹ค.

 


HTTP Responses

Status line

HTTP Responses๋Š” ์„œ๋ฒ„๊ฐ€ ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ๋ณด๋‚ด๋Š” ๋ฉ”์‹œ์ง€์ด๋‹ค.

์‘๋‹ต์˜ ์ฒซ ์ค„์„ Status line์ด๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค.

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

Status line์˜ ์˜ˆ์‹œ :  HTTP/1.1 404 Not Found

Headers

์‘๋‹ต์— ๋“ค์–ด๊ฐ€๋Š” HTTP headers๋Š” ์š”์ฒญ ํ—ค๋”์™€ ๋™์ผํ•œ ๊ตฌ์กฐ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค.

๋Œ€์†Œ๋ฌธ์ž ๊ตฌ๋ถ„ ์—†๋Š” ๋ฌธ์ž์—ด, ์ฝœ๋ก (:), ๊ฐ’์„ ์ž…๋ ฅํ•˜๊ณ , ๊ฐ’์€ ํ—ค๋”์— ๋”ฐ๋ผ ๋‹ค๋ฅด๋‹ค.

์š”์ฒญ์˜ ํ—ค๋”์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ๋ช‡ ๊ทธ๋ฃน์œผ๋กœ ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ๋‹ค.

  • General headers : ๋ฉ”์‹œ์ง€ ์ „์ฒด์— ์ ์šฉ๋˜๋Š” ํ—ค๋”๋กœ, body๋ฅผ ํ†ตํ•ด ์ „์†ก๋˜๋Š” ๋ฐ์ดํ„ฐ์™€๋Š” ๊ด€๋ จ์ด ์—†๋Š” ํ—ค๋”.
  • Response headers : ์œ„์น˜ ๋˜๋Š” ์„œ๋ฒ„ ์ž์ฒด์— ๋Œ€ํ•œ ์ •๋ณด(์ด๋ฆ„, ๋ฒ„์ „ ๋“ฑ)์™€ ๊ฐ™์ด ์‘๋‹ต์— ๋Œ€ํ•œ ๋ถ€๊ฐ€์ ์ธ ์ •๋ณด๋ฅผ ๊ฐ–๋Š” ํ—ค๋”๋กœ, Vary, Accept-Ranges์™€ ๊ฐ™์ด ์ƒํƒœ ์ค„์— ๋„ฃ๊ธฐ์—๋Š” ๊ณต๊ฐ„์ด ๋ถ€์กฑํ–ˆ๋˜ ์ถ”๊ฐ€ ์ •๋ณด๋ฅผ ์ œ๊ณต.
  • Representation headers : ์ด์ „์—๋Š” Entity headers๋กœ ๋ถˆ๋ €์œผ๋ฉฐ, body์— ๋‹ด๊ธด ๋ฆฌ์†Œ์Šค์˜ ์ •๋ณด(์ฝ˜ํ…์ธ  ๊ธธ์ด, MIME ํƒ€์ž… ๋“ฑ)๋ฅผ ํฌํ•จํ•˜๋Š” ํ—ค๋”.

 

Body

์‘๋‹ต์˜ ๋ณธ๋ฌธ์€ HTTP messages ๊ตฌ์กฐ์˜ ๋งˆ์ง€๋ง‰์— ์œ„์น˜ํ•œ๋‹ค.

๋ชจ๋“  ์‘๋‹ต์— body๊ฐ€ ํ•„์š”ํ•˜์ง€๋Š” ์•Š๋Š”๋‹ค. (201, 204์™€ ๊ฐ™์€ ์ƒํƒœ ์ฝ”๋“œ๋ฅผ ๊ฐ€์ง€๋Š” ์‘๋‹ต์—๋Š” ๋ณธ๋ฌธ์ด ํ•„์š”ํ•˜์ง€ ์•Š๋Š”๋‹ค.)

  • Single-resource bodies(๋‹จ์ผ-๋ฆฌ์†Œ์Šค ๋ณธ๋ฌธ) :
    • ๊ธธ์ด๊ฐ€ ์•Œ๋ ค์ง„ ๋‹จ์ผ-๋ฆฌ์†Œ์Šค ๋ณธ๋ฌธ์€ ๋‘ ๊ฐœ์˜ ํ—ค๋”(Content-Type, Content-Length)๋กœ ์ •์˜ํ•œ๋‹ค.
    • ๊ธธ์ด๋ฅผ ๋ชจ๋ฅด๋Š” ๋‹จ์ผ ํŒŒ์ผ๋กœ ๊ตฌ์„ฑ๋œ ๋‹จ์ผ-๋ฆฌ์†Œ์Šค ๋ณธ๋ฌธ์€ Transfer-Encoding์ด chunked ๋กœ ์„ค์ •๋˜์–ด ์žˆ์œผ๋ฉฐ, ํŒŒ์ผ์€ chunk๋กœ ๋‚˜๋‰˜์–ด ์ธ์ฝ”๋”ฉ๋˜์–ด ์žˆ๋‹ค.
  • Multiple-resource bodies(๋‹ค์ค‘-๋ฆฌ์†Œ์Šค ๋ณธ๋ฌธ) : ์„œ๋กœ ๋‹ค๋ฅธ ์ •๋ณด๋ฅผ ๋‹ด๊ณ  ์žˆ๋Š” body๋‹ค.

 

 

๐Ÿ˜ƒ ์ž˜๋ชป๋œ ๊ฐœ๋… ์ „๋‹ฌ์ด ์žˆ๋‹ค๋ฉด ๋Œ“๊ธ€ ๋ถ€ํƒ๋“œ๋ฆฝ๋‹ˆ๋‹ค. ์ €์˜ ์„ฑ์žฅ์— ํฐ ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค๐Ÿค“