์ „ํ˜•์ ์ธ HTTP ์„ธ์…˜

ํด๋ผ์ด์–ธํŠธ-์„œ๋ฒ„ ํ”„๋กœํ† ์ฝœ์˜ HTTP์˜ ์„ธ์…˜์€ ์„ธ ๊ฐ€์ง€ ๊ณผ์ •์„ ๊ฑฐ์นœ๋‹ค.

  1. ํด๋ผ์ด์–ธํŠธ๊ฐ€ TCP ์—ฐ๊ฒฐ ์ˆ˜๋ฆฝ(TCP๊ฐ€ ์•„๋‹ˆ์–ด๋„ ๋‹ค๋ฅธ ์—ฐ๊ฒฐ ํ•„์š”)
  2. ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์š”์ฒญ ์ „์†ก ํ›„ ์‘๋‹ต ๋Œ€๊ธฐ
  3. ์„œ๋ฒ„๊ฐ€ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๊ณ  ์‘๋‹ต์„ ์ƒํƒœ ์ฝ”๋“œ, ์š”์ฒญ์— ๋ถ€ํ•ฉํ•˜๋Š” ๋ฐ์ดํ„ฐ์™€ ํ•จ๊ป˜ ๋Œ๋ ค๋ณด๋ƒ„

HTTP/1.1๋ถ€ํ„ฐ๋Š” ์„ธ ๋ฒˆ์งธ ๊ณผ์ • ์ดํ›„ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ํ•ด๋‹น ์‹œ์ ์— ๋˜ ๋‹ค๋ฅธ ์š”์ฒญ์„ ๋ณด๋‚ผ ์ˆ˜ ์žˆ๋„๋ก ์—ฐ๊ฒฐ์„ ๋‹ซ์ง€ ์•Š์•„ ๊ณ„์†ํ•ด์„œ ์š”์ฒญ์„ ๋ฐ›์„ ์ˆ˜ ์žˆ๋‹ค.

์—ฐ๊ฒฐ

ํด๋ผ์ด์–ธํŠธ๋Š” ์—ฐ๊ฒฐ์„ ์ˆ˜๋ฆฝํ•œ๋‹ค. HTTP์—์„œ ์—ฐ๊ฒฐ์„ ์—ฐ๋‹ค๋Š” ๊ฒƒ์€ TCP์ธ ๊ธฐ๋ณธ์ ์ธ ์ „์†ก ๊ณ„์ธต ๋‚ด์—์„œ ์—ฐ๊ฒฐํ•˜๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค.

TCP ์—ฐ๊ฒฐ์˜ ๊ฒฝ์šฐ HTTP ์„œ๋ฒ„๋ฅผ ์œ„ํ•œ ๊ธฐ๋ณธ ํฌํŠธ๋Š” 80์ด๋‹ค. (AWS์—์„œ ๋ฐฐํฌํ•  ๋•Œ๋„ ๊ธฐ๋ณธ ํฌํŠธ๋ฅผ 80์œผ๋กœ ํ•ด๋†”์•ผ ๋‚˜์ค‘์— ๋„๋ฉ”์ธ์„ Route53์„ ํ†ตํ•ด์„œ ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ๋‹ค). 8000๋“ฑ์˜ ํฌํŠธ๋“ค๋„ ์“ฐ์ด๊ธด ํ•˜์ง€๋งŒ 80์˜ ๊ฒฝ์šฐ์—๋Š” URL์—์„œ ํฌํŠธ ๋ฒˆํ˜ธ๋ฅผ ์ƒ๋žต ๊ฐ€๋Šฅํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ข‹๋‹ค.

ํด๋ผ์ด์–ธํŠธ ์š”์ฒญ ์ „์†ก

์—ฐ๊ฒฐ์ด ๋œ ํ›„์—๋Š” user-agent(์›น ๋ธŒ๋ผ์šฐ์ €, ํฌ๋กค๋Ÿฌ ๋“ฑ)๋Š” ์š”์ฒญ์„ ๋ณด๋‚ผ ์ˆ˜ ์žˆ๋‹ค. ํด๋ผ์ด์–ธํŠธ ์š”์ฒญ์€ ์„ธ ๊ฐ€์ง€ ๋ธ”๋ก์œผ๋กœ ๋‚˜๋ˆ„์–ด์ง„ CRLF(Carriage return, followed by line feed)๋กœ ๊ตฌ๋ถ„๋œ ํ…์ŠคํŠธ ์ง€์‹œ์ž๋“ค๋กœ ์ด๋ฃจ์–ด์ง„๋‹ค.

GET / HTTP/1.1
Host: developer.mozilla.org
Accept-Language: fr
  1. ์ฒซ๋ฒˆ์งธ ์ค„ โ†’ Parameter๊ฐ€ ๋”ฐ๋ฅธ๋Š” ์š”์ฒญ ๋ฉ”์„œ๋“œ
    • ๋ฌธ์„œ์˜ ๊ฒฝ๋กœ, ํ”„๋กœํ† ์ฝœ๊ณผ ๋„๋ฉ”์ธ ์ด๋ฆ„์„ ์ œ์™ธํ•œ ์ ˆ๋Œ€๊ฒฝ๋กœ URL
    • ์‚ฌ์šฉ์ค‘์ธ HTTP ํ”„๋กœํ† ์ฝœ ๋ฒ„์ „
  2. ๋‹ค์Œ ์ค„๋“ค์€ ๊ฐ๊ฐ ํŠน์ • ํ—ค๋”๋ฅผ ๋‚˜ํƒ€๋‚ธ๋‹ค. ๋ฐ์ดํ„ฐ์˜ ์ ํ•ฉ์„ฑ, ์„œ๋ฒ„์˜ ๋™์žฅ ์ˆ˜์ • ๋ฐ์ดํ„ฐ ๋“ฑ์— ๊ด€ํ•œ ๋ช‡ ๊ฐ€์ง€ ์ •๋ณด๋ฅผ ์„œ๋ฒ„์— ์ œ๊ณตํ•œ๋‹ค. ์ด๋Ÿฐ ํ—ค๋”๋Š” ๋นˆ ์ค„๋กœ ๋๋‚˜๋Š” ๋ธ”๋ก์„ ํ˜•์„ฑํ•œ๋‹ค.
  3. ๋งˆ์ง€๋ง‰ ๋ธ”๋ก์€ ๋ถ€๊ฐ€์ ์ธ ๋ฐ์ดํ„ฐ ๋ธ”๋ก์œผ๋กœ POST ๋ฉ”์„œ๋“œ์— ์˜ํ•ด ์‚ฌ์šฉ๋œ๋‹ค
POST /contact_form.php HTTP/1.1
Host: developer.mozilla.org
Content-Length: 64
Content-Type: application/x-www-form-urlencoded
 
name=Joe%20User&request=Send%20me%20one%20of%20your%20catalogue

๊ฒฐ๊ณผ๋Š” ์ด๋Ÿฐ ์‹์œผ๋กœ ์ „์†กํ•œ๋‹ค.

์š”์ฒญ ๋ฉ”์„œ๋“œ

์ฃผ์–ด์ง„ ์ž์›์— ๋Œ€ํ•ด ์‹คํ–‰๋˜๊ธธ ๋ฐ”๋ผ๋Š” ๋™์ž‘์„ ๊ฐ€๋ฆฌํ‚ค๋Š” ์š”์ฒญ ๋ฉ”์„œ๋“œ๊ฐ€ ์ •์˜๋˜์–ด ์žˆ๋‹ค.

์š”์ฒญ ๋ฉ”์„œ๋“œ๋™์ž‘
GET๋ฐ์ดํ„ฐ ๋ฐ›๊ธฐ
HEADGET๊ณผ ๋™์ผํ•œ ์‘๋‹ต(๋Œ€์‹  ์‘๋‹ต ๋ณธ๋ฌธ์ด ์—†์Œ)
POSTํŠน์ • ๋ฆฌ์†Œ์Šค์— ์—”ํ‹ฐํ‹ฐ ์ œ์ถœ
PUT์š”์ฒญ payload๋ฅผ ์‚ฌ์šฉํ•ด ์ƒˆ๋กœ์šด ๋ฆฌ์†Œ์Šค ์ƒ์„ฑ or ๋Œ€์ƒ ๋ฆฌ์†Œ์Šค๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๋ฐ์ดํ„ฐ ๋Œ€์ฒด.
๋ฉฑ๋“ฑ์„ฑ(๋™์ผํ•œ ์š”์ฒญ์„ ํ•œ ๋ฒˆ ๋ณด๋‚ด๋Š” ๊ฒƒ๊ณผ ์—ฌ๋Ÿฌ๋ฒˆ ๋ณด๋ƒˆ์„ ๋•Œ ๊ฐ™์€ ํšจ๊ณผ, ์„œ๋ฒ„์˜ ์ƒํƒœ๋„ ๋™์ผํ•˜๊ฒŒ ๋‚จ์Œ)
DELETEํŠน์ • ๋ฆฌ์†Œ์Šค ์‚ญ์ œ
CONNECT๋ชฉ์  ๋ฆฌ์†Œ์Šค๋กœ ์„œ๋ฒ„๋กœ์˜ ํ„ฐ๋„(์–‘๋ฐฉํ–ฅ ์—ฐ๊ฒฐ) ๋งบ๊ธฐ
OPTIONS๋ชฉ์  ๋ฆฌ์†Œ์Šค์˜ ํ†ต์‹  ์„ค์ •
PATCH๋ฆฌ์†Œ์Šค์˜ ๋ถ€๋ถ„ ์ˆ˜์ •

์„œ๋ฒ„ ์‘๋‹ต ๊ตฌ์กฐ

์›น ์„œ๋ฒ„๊ฐ€ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๊ณ  ์‘๋‹ต์„ ๋ณด๋‚ธ๋‹ค. ์ด ๋˜ํ•œ ์„ธ ๊ฐœ์˜ ๋‹ค๋ฅธ ๋ธ”๋ก์œผ๋กœ ๋‚˜๋ˆ„์–ด์ง„ CRLF๋กœ ๊ตฌ๋ถ„๋œ ํ…์ŠคํŠธ ์ง€์‹œ์ž๋“ค๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ๋‹ค.

HTTP/1.1 200 OK
Date: Sat, 09 Oct 2010 14:28:02 GMT
Server: Apache
Last-Modified: Tue, 01 Dec 2009 20:18:22 GMT
ETag: "51142bc1-7449-479b075b2891b"
Accept-Ranges: bytes
Content-Length: 29769
Content-Type: text/html
 
<!DOCTYPE html... (here comes the 29769 bytes of the requested web page)
  1. ์ฒซ๋ฒˆ์งธ ์ค„(์ƒํƒœ์ค„) โ†’ HTTP ๋ฒ„์ „์˜ acknowledgment
  2. ํŠน์ • HTTPํ—ค๋”. ๋ฐ์ดํ„ฐ์— ๊ด€ํ•œ ์ •๋ณด๋ฅผ ์ œ๊ณตํ•˜๊ณ  ์ดํ›„ ๋นˆ ์ค„๋กœ ๋๋‚˜๋Š” ๋ธ”๋ก ํ˜•์„ฑ
  3. ๋งˆ์ง€๋ง‰ ๋ธ”๋ก โ†’ ๋ฐ์ดํ„ฐ๊ฐ€ ์žˆ๋‹ค๋ฉด ๋ฐ์ดํ„ฐ ๋ธ”๋ก

์„ฑ๊ณต ์‘๋‹ต

๋Œ€๋ถ€๋ถ„ ๋ณด์ด๋Š” ๊ฒƒ๋“ค๋งŒ ๋ณด์ธ๋‹ค