Jieunny์˜ ๋ธ”๋กœ๊ทธ

S2) Unit 7. [HTTP/๋„คํŠธ์›Œํฌ] HTTP ๋ณธ๋ฌธ

CodeStates/learning contents

S2) Unit 7. [HTTP/๋„คํŠธ์›Œํฌ] HTTP

Jieunny 2023. 1. 30. 11:00

๐Ÿ“ฃ  HTTP

1๏ธโƒฃ HTTP Message : ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„ ์‚ฌ์ด์—์„œ ๋ฐ์ดํ„ฐ๊ฐ€ ๊ตํ™˜๋˜๋Š” ๋ฐฉ์‹

โžฐ ์š”์ฒญ๊ณผ ์‘๋‹ต์ด ์žˆ๋‹ค.

โžฐ HTTP Message๋Š” ๋ช‡ ์ค„์˜ ํ…์ŠคํŠธ ์ •๋ณด๋กœ ๊ตฌ์„ฑ๋œ๋‹ค.

โžฐ start line : ์š”์ฒญ์ด๋‚˜ ์‘๋‹ต์˜ ์ƒํƒœ๋ฅผ ๋‚˜ํƒ€๋‚ด๋ฉฐ ํ•ญ์ƒ ์ฒซ ๋ฒˆ์งธ ์ค„์— ์œ„์น˜ํ•œ๋‹ค.

     ์‘๋‹ต์—์„œ๋Š” status line ์ด๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค.

โžฐ HTTP headers : ์š”์ฒญ์„ ์ง€์ •ํ•˜๊ฑฐ๋‚˜, ๋ฉ”์‹œ์ง€์— ํฌํ•จ๋œ ๋ณธ๋ฌธ์„ ์„ค๋ช…ํ•˜๋Š” ํ—ค๋”์˜ ์ง‘ํ•ฉ

โžฐ empty line : ํ—ค๋”์™€ ๋ณธ๋ฌธ์„ ๊ตฌ๋ถ„ํ•˜๋Š” ๋นˆ ์ค„

โžฐ body : ์š”์ฒญ๊ณผ ๊ด€๋ จ๋œ ๋ฐ์ดํ„ฐ๋‚˜ ์‘๋‹ต๊ณผ ๊ด€๋ จ๋œ ๋ฐ์ดํ„ฐ ๋˜๋Š” ๋ฌธ์„œ๋ฅผ ํฌํ•จํ•œ๋‹ค.

     ์š”์ฒญ๊ณผ ์‘๋‹ต์˜ ์œ ํ˜•์— ๋”ฐ๋ผ ์„ ํƒ์ ์œผ๋กœ ์‚ฌ์šฉ๋œ๋‹ค.

โžฐ start line + HTTP headers = head

โžฐ Stateless(๋ฌด์ƒํƒœ์„ฑ) : HTTP์˜ ํฐ ํŠน์ง•์œผ๋กœ ์ƒํƒœ๋ฅผ ์ €์žฅํ•˜์ง€ ์•Š๋Š” ๊ฒƒ

 

 

2๏ธโƒฃ HTTP Requests 

โœ”๏ธ Start line : ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์„œ๋ฒ„์—๊ฒŒ ๋ณด๋‚ด๋Š” ๋ฉ”์„ธ์ง€

โžฐ start line์˜ ์„ธ๊ฐ€์ง€ ์š”์†Œ

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

    ์˜ˆ๋ฅผ ๋“ค์–ด GET method๋Š” ๋ฆฌ์†Œ์Šค๋ฅผ ๋ฐ›์•„์•ผํ•˜๊ณ , POST method๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์„œ๋ฒ„๋กœ ์ „์†กํ•œ๋‹ค.

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

     ์ด ์š”์ฒญ ํ˜•์‹์€ HTTP method ๋งˆ๋‹ค ๋‹ค๋ฅด๋‹ค.

origin ํ˜•์‹ absolute ํ˜•์‹ authority ํ˜•์‹ asterisk ํ˜•์‹
๏น’'?'์™€ ์ฟผ๋ฆฌ ๋ฌธ์ž์—ด์ด ๋ถ™๋Š” ์ ˆ๋Œ€๊ฒฝ๋กœ
๏น’GET, POST, HEAD, OPTIONS๋“ฑ์˜ method์™€ ์‚ฌ์šฉ
๏น’HEAD / test.html?query=alibaba HTTP/1.1
๏น’์™„์ „ํ•œ URLํ˜•์‹
๏น’๋Œ€๋ถ€๋ถ„ GET method์™€ ์‚ฌ์šฉ
๏น’GET http://developer.mozilla.org/en-US/docs/Web/HTTP/Messages HTTP/1.1
๏น’๋„๋ฉ”์ธ ์ด๋ฆ„๊ณผ ํฌํŠธ ๋ฒˆํ˜ธ๋กœ ์ด๋ฃจ์–ด์ง„ URL์˜ ์ผ๋ถ€๋ถ„
๏น’CONNECT์™€ ์‚ฌ์šฉ ๊ฐ€๋Šฅ
๏น’CONNECT developer.mozilla.org:80 HTTP/1.1
๏น’OPTIONS์™€ ํ•จ๊ป˜ * ํ•˜๋‚˜๋กœ ์„œ๋ฒ„ ์ „์ฒด๋ฅผ ํ‘œํ˜„ํ•œ๋‹ค.
๏น’OPTIONS * HTTP/1.1

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

 

โœ”๏ธ Headers : ํ—ค๋” ์ด๋ฆ„(๋Œ€์†Œ๋ฌธ์ž ๊ตฌ๋ถ„ ์—†๋Š” ๋ฌธ์ž์—ด), ์ฝœ๋ก , ๊ฐ’ ํ˜•์‹

โžฐ ํ—ค๋”์˜ ์ข…๋ฅ˜

General headers Request headers Representation headers
๏น’๋ฉ”์‹œ์ง€ ์ „์ฒด์— ์ ์šฉ๋˜๋Š” ํ—ค๋”
๏น’body๋ฅผ ํ†ตํ•ด ์ „์†ก๋˜๋Š” ๋ฐ์ดํ„ฐ์™€๋Š” ๊ด€๋ จx
๏น’fetch๋ฅผ ํ†ตํ•ด ๊ฐ€์ ธ์˜ฌ ๋ฆฌ์†Œ์Šค๋‚˜ ํด๋ผ์ด์–ธํŠธ ์ž์ฒด์— ๋Œ€ํ•œ ์ž์„ธํ•œ ์ •๋ณด๋ฅผ ํฌํ•จํ•˜๋Š” ํ—ค๋” ๏น’์ด์ „์—๋Š” Entity headers ๋ผ๊ณ  ๋ถˆ๋ฆผ
๏น’body์— ๋‹ด๊ธด ๋ฆฌ์†Œ์Šค์˜ ์ •๋ณด๋ฅผ ํฌํ•จํ•˜๋Š” ํ—ค๋”

 

โœ”๏ธ Body : ์š”์ฒญ์˜ ๋ณธ๋ฌธ์œผ๋กœ HTTP message ๊ตฌ์กฐ์˜ ๋งˆ์ง€๋ง‰์— ์œ„์น˜ํ•œ๋‹ค.

โžฐ ๋ชจ๋“  ์š”์ฒญ์— body๊ฐ€ ํ•„์š”ํ•˜์ง€๋Š” ์•Š๋‹ค.

โžฐ POST, PUT ๊ฐ™์€ ๊ฒฝ์šฐ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์—…๋ฐ์ดํŠธํ•˜๊ธฐ ์œ„ํ•ด body๊ฐ€ ํ•„์š”ํ•˜๋‹ค

โžฐ body์˜ ์ข…๋ฅ˜

Single-resource bodies Multiple-resource bodies
๏น’ํ—ค๋” ๋‘๊ฐœ๋กœ ์ •์˜๋œ ๋‹จ์ผ ํŒŒ์ผ๋กœ ๊ตฌ์„ฑ๋œ๋‹ค. ๏น’ ์—ฌ๋Ÿฌ ํŒŒํŠธ๋กœ ๊ตฌ์„ฑ๋œ ๋ณธ๋ฌธ์—์„œ๋Š” ๊ฐ ํŒŒํŠธ๋งˆ๋‹ค ๋‹ค๋ฅธ ์ •๋ณด๋ฅผ ์ง€๋‹Œ๋‹ค.

 

 

3๏ธโƒฃ HTTP Response

โœ”๏ธ Status line : ์„œ๋ฒ„๊ฐ€ ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ๋ณด๋‚ด๋Š” ๋ฉ”์‹œ์ง€

โžฐ ํ˜„์žฌ ํ”„๋กœํ† ์ฝœ์˜ ๋ฒ„์ „, ์ƒํƒœ ์ฝ”๋“œ(์š”์ฒญ์˜ ๊ฒฐ๊ณผ), ์ƒํƒœ ํ…์ŠคํŠธ(์ƒํƒœ ์ฝ”๋“œ์— ๋Œ€ํ•œ ์„ค๋ช…) ์„ ํฌํ•จํ•œ๋‹ค.

โžฐ ex) HTTP/1.1 404 Not Found

 

โœ”๏ธ Headers : ์š”์ฒญ ํ—ค๋”์™€ ๋™์ผํ•œ ๊ตฌ์กฐ๋ฅผ ๊ฐ€์ง„๋‹ค.

โžฐ ํ—ค๋”์˜ ์ข…๋ฅ˜

General headers Response headers Representation headers
๏น’๋ฉ”์‹œ์ง€ ์ „์ฒด์— ์ ์šฉ๋˜๋Š” ํ—ค๋”
๏น’body๋ฅผ ํ†ตํ•ด ์ „์†ก๋˜๋Š” ๋ฐ์ดํ„ฐ์™€๋Š” ๊ด€๋ จx
๏น’์œ„์น˜ ๋˜๋Š” ์„œ๋ฒ„ ์ž์ฒด์— ๋Œ€ํ•œ ์ •๋ณด์™€ ๊ฐ™์ด ๋ถ€๊ฐ€์ ์ธ ์ •๋ณด๋ฅผ ๊ฐ–๋Š” ํ—ค๋” ๏น’์ด์ „์—๋Š” Entity headers๋ผ๊ณ  ๋ถˆ๋ฆผ
๏น’body์— ๋‹ด๊ธด ๋ฆฌ์†Œ์Šค์˜ ์ •๋ณด๋ฅผ ํฌํ•จํ•˜๋Š” ํ—ค๋”

 

โœ”๏ธ Body : ์‘๋‹ต์˜ ๋ณธ๋ฌธ์œผ๋กœ HTTP message ๊ตฌ์กฐ์˜ ๋งˆ์ง€๋ง‰์— ์œ„์น˜ํ•œ๋‹ค.

โžฐ ๋ชจ๋“  ์‘๋‹ต์— body๊ฐ€ ํ•„์š”ํ•˜์ง€๋Š” ์•Š๋‹ค.

โžฐ 201, 204์™€ ๊ฐ™์€ ์ƒํƒœ ์ฝ”๋“œ๋ฅผ ๊ฐ€์ง€๋Š” ์‘๋‹ต์—๋Š” ํ•„์š”ํ•˜์ง€ ์•Š๋‹ค.

โžฐ body์˜ ์ข…๋ฅ˜

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