[HTTP/Network] HTTP

Hannahhhยท2022๋…„ 8์›” 4์ผ
0

HTTP/Network

๋ชฉ๋ก ๋ณด๊ธฐ
3/12

๐Ÿ” HTTP

HyperText Transfer Protocol์˜ ์ค„์ž„๋ง๋กœ, HTML๊ณผ ๊ฐ™์€ ๋ฌธ์„œ๋ฅผ ์ „์†กํ•˜๊ธฐ ์œ„ํ•œ ํ”„๋กœํ† ์ฝœ์ด๋‹ค.
์›น ๋ธŒ๋ผ์šฐ์ €์™€ ์›น ์„œ๋ฒ„์˜ ์†Œํ†ต์„ ์œ„ํ•ด ๋””์ž์ธ๋˜์—ˆ์œผ๋ฉฐ, ์ „ํ†ต์ ์ธ Client-Server ๋ชจ๋ธ์—์„œ Client๊ฐ€ HTTP Messages ์–‘์‹์— ๋งž์ถฐ ์š”์ฒญ์„ ๋ณด๋‚ด๋ฉด, Server๋„ HTTP Messages ์–‘์‹์— ๋งž์ถฐ ์‘๋‹ตํ•œ๋‹ค.


๐Ÿ‘€ HTTP Messages


HTTP Messages๋Š” ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„ ์‚ฌ์ด์—์„œ ๋ฐ์ดํ„ฐ๊ฐ€ ๊ตํ™˜๋˜๋Š” ๋ฐฉ์‹์œผ๋กœ, ์š”์ฒญ(Request) ๋ฐ ์‘๋‹ต(Responses)์œผ๋กœ ๊ตฌ๋ถ„๋œ๋‹ค.

HTTP Messages๋Š” ๋ช‡ ์ค„์˜ ํ…์ŠคํŠธ ์ •๋ณด๋กœ ๊ตฌ์„ฑ๋˜๋ฉฐ, ๊ตฌ์„ฑํŒŒ์ผ, API, ๊ธฐํƒ€ ์ธํ„ฐํŽ˜์ด์Šค์—์„œ ์ž๋™์œผ๋กœ ์™„์„ฑํ•ด์ค€๋‹ค.


์•„๋ž˜๋Š” HTTP Messages์˜ ๊ตฌ์กฐ์ด๋‹ค.

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

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

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

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

์ด ์ค‘ start line๊ณผ HTTP headers๋ฅผ ๋ฌถ์–ด ์š”์ฒญ์ด๋‚˜ ์‘๋‹ต์˜ ํ—ค๋“œ(head)๋ผ๊ณ  ํ•˜๊ณ , payload๋Š” body๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค.



โœ” Stateless(๋ฌด์ƒํƒœ์„ฑ)


HTTP์˜ ํฐ ํŠน์ง• ์ค‘ ํ•˜๋‚˜์ด๋ฉฐ ๋ง ๊ทธ๋Œ€๋กœ ์ƒํƒœ๋ฅผ ๊ฐ€์ง€์ง€ ์•Š๋Š”๋‹ค๋Š” ๋œป์œผ๋กœ, HTTP๋กœ Client์™€ Server๊ฐ€ ํ†ต์‹ ์„ ์ฃผ๊ณ ๋ฐ›๋Š” ๊ณผ์ •์—์„œ HTTP๊ฐ€ Client๋‚˜ Server์˜ ์ƒํƒœ๋ฅผ ํ™•์ธํ•˜์ง€ ์•Š๋Š”๋‹ค.

์˜ˆ๋ฅผ๋“ค์–ด ์‚ฌ์šฉ์ž๋Š” ์‡ผํ•‘๋ชฐ์— ๋กœ๊ทธ์ธํ•˜๊ฑฐ๋‚˜ ์ƒํ’ˆ์„ ํด๋ฆญํ•ด์„œ ์ƒ์„ธ ํ™”๋ฉด์œผ๋กœ ์ด๋™ํ•˜๊ณ , ์ƒํ’ˆ์„ ์นดํŠธ์— ๋‹ด๊ฑฐ๋‚˜ ๋กœ๊ทธ์•„์›ƒํ•  ์ˆ˜๋„ ์žˆ์ง€๋งŒ, Client์—์„œ ๋ฐœ์ƒํ•œ ์ด๋Ÿฐ ๋ชจ๋“  ์ƒํƒœ๋ฅผ HTTP ํ†ต์‹ ์ด ์ถ”์ ํ•˜์ง€ ์•Š๋Š”๋‹ค.

๋งŒ์•ฝ ์‡ผํ•‘๋ชฐ์—์„œ ์นดํŠธ์— ๋‹ด๊ธฐ ๋ฒ„ํŠผ์„ ๋ˆŒ๋ €์„ ๋•Œ, ์นดํŠธ์— ๋‹ด๊ธด ์ƒํ’ˆ ์ •๋ณด(์ƒํƒœ)๋ฅผ ์ €์žฅํ•ด๋‘ฌ์•ผ ํ•˜์ง€๋งŒ HTTP๋Š” ํ†ต์‹  ๊ทœ์•ฝ์ผ ๋ฟ์ด๋ฏ€๋กœ, ์ƒํƒœ๋ฅผ ์ €์žฅํ•˜์ง€ ์•Š๋Š”๋‹ค.

๋”ฐ๋ผ์„œ ํ•„์š”์— ๋”ฐ๋ผ ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•(์ฟ ํ‚ค-์„ธ์…˜, API ๋“ฑ)์„ ํ†ตํ•ด ์ƒํƒœ๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

์ฆ‰, ์„œ๋ฒ„๊ฐ€ Client์˜ ์ƒํƒœ๋ฅผ ๋ณด์กดํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— Client๊ฐ€ ์š”์ฒญ์‹œ ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ด๊ณ  ์ „๋ถ€ ๋‹ด๊ณ  ์žˆ์œผ๋ฉฐ ์•„๋ฌด ์„œ๋ฒ„๋‚˜ ํ˜ธ์ถœ์ด ๊ฐ€๋Šฅํ•˜๋ฏ€๋กœ ์„œ๋ฒ„ ํ™•์žฅ์„ฑ(๋ฌดํ•œ)์ด ๋†’์ง€๋งŒ, Client๊ฐ€ ์ถ”๊ฐ€ ๋ฐ์ดํ„ฐ๋ฅผ ์ „์†กํ•ด์•ผํ•˜๋Š” ๋‹จ์ ์ด์žˆ๋‹ค.



โœ” Connectionless(๋น„์—ฐ๊ฒฐ์„ฑ)


TCP/IP์˜ ๊ฒฝ์šฐ ๊ธฐ๋ณธ์ ์œผ๋กœ ์—ฐ๊ฒฐ์„ ์œ ์ง€ํ•˜๋Š”๋ฐ, ์ด ๊ฒฝ์šฐ ์š”์ฒญ์„ ๋ณด๋‚ด์ง€ ์•Š๋”๋ผ๋„ ์„œ๋ฒ„์˜ ์ž์›์ด ์ง€์†์ ์œผ๋กœ ์†Œ๋ชจ๋œ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜, HTTP๋Š” ๋น„์—ฐ๊ฒฐ์„ฑ์„ ๊ฐ€์ง€๊ณ  ์žˆ๊ธฐ๋•Œ๋ฌธ์— ์‹ค์ œ๋กœ ์š”์ฒญ์„ ์ฃผ๊ณ  ๋ฐ›์„ ๋•Œ๋งŒ ์—ฐ๊ฒฐ์„ ์œ ์ง€ํ•˜๊ณ  ์‘๋‹ต์„ ์ฃผ๊ณ ๋‚˜๋ฉด TCP/IP ์—ฐ๊ฒฐ์„ ๋Š์Œ์œผ๋กœ์จ ์ตœ์†Œํ•œ์˜ ์ž์›์œผ๋กœ ์„œ๋ฒ„ ์œ ์ง€๋ฅผ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•œ๋‹ค.


ํŠธ๋ž˜ํ”ฝ์ด ๋งŽ์ง€ ์•Š๊ณ  ๋น ๋ฅธ ์‘๋‹ต์„ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ, ๋น„์—ฐ๊ฒฐ์„ฑ์€ ํšจ์œจ์ ์ง€๋งŒ ๊ทธ ๋ฐ˜๋Œ€์˜ ๊ฒฝ์šฐ ํ•œ๊ณ„๋ฅผ ๋ณด์ธ๋‹ค.

์ž์„ธํ•˜๊ฒŒ, ์›น ๋ธŒ๋ผ์šฐ์ €๋กœ ์‚ฌ์ดํŠธ๋ฅผ ์š”์ฒญํ•  ์‹œ, HTML, JavaScript, CSS, ์ถ”๊ฐ€ ์ด๋ฏธ์ง€ ๋“ฑ ๋งŽ์€ ์ž์›์ด ํ•จ๊ป˜ ๋‹ค์šด๋กœ๋“œ ๋˜๋ฉฐ ํ•ด๋‹น ์ž์›๋“ค์„ ๊ฐ๊ฐ ์ „์†กํ•  ๋•Œ ๋งˆ๋‹ค ์—ฐ๊ฒฐ ๋ฐ ๋Š์Œ์„ ๋ฐ˜๋ณตํ•œ๋‹ค.

๋”ฐ๋ผ์„œ, ํ˜„์žฌ๋Š” ํšจ์œจ์„ ์œ„ํ•ด HTTP ์ง€์† ์—ฐ๊ฒฐ์„ ํ†ตํ•ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ณ  ์žˆ๋‹ค.

โญ HTTP ์ง€์† ์—ฐ๊ฒฐ?
์—ฐ๊ฒฐ์ด ์ด๋ฃจ์–ด์ง„ ํ›„, ๊ฐ๊ฐ์˜ ์ž์›๋“ค์„ ์š”์ฒญํ•˜๊ณ  ๋ชจ๋“  ์ž์›์— ๋Œ€ํ•œ ์‘๋‹ต์ด ๋Œ์•„์˜จ ํ›„์— ์—ฐ๊ฒฐ์„ ์ข…๋ฃŒํ•œ๋‹ค.




๐Ÿ‘€ HTTP Request


Client๊ฐ€ Server์—๊ฒŒ ๋ณด๋‚ด๋Š” ๋ฉ”์‹œ์ง€์ด๋‹ค. (Client -> Server)


โœ” start line

์•„๋ž˜์™€ ๊ฐ™์€ 3๊ฐ€์ง€ ์š”์†Œ๊ฐ€ ์žˆ๋‹ค.

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

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

2) ์š”์ฒญ ๋Œ€์ƒ(์ผ๋ฐ˜์ ์œผ๋กœ URL or URI) ๋˜๋Š” ํ”„๋กœํ† ์ฝœ, PORT, Domain์˜ ์ ˆ๋Œ€ ๊ฒฝ๋กœ๋Š” ์š”์ฒญ ์ปจํ…์ŠคํŠธ์— ์ž‘์„ฑ๋˜๋ฉฐ ์ด ์š”์ฒญ ํ˜•์‹์€ 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 ํ˜•์‹ : Domain ์ด๋ฆ„๊ณผ PORT ๋ฒˆํ˜ธ๋กœ ์ด๋ฃจ์–ด์ง„ URL์˜ ์ผ๋ถ€๋ถ„์œผ๋กœ, HTTP ํ„ฐ๋„์„ ๊ตฌ์ถ•ํ•˜๋Š” ๊ฒฝ์šฐ, CONNECT์™€ ํ•จ๊ป˜ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
    CONNECT developer.mozilla.org:80 HTTP/1.1

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


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



โœ” Headers

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


๊ฐ’์€ ํ—ค๋”์— ๋”ฐ๋ผ ๋‹ค๋ฅด๋ฉฐ, ์—ฌ๋Ÿฌ ์ข…๋ฅ˜์˜ ํ—ค๋”๊ฐ€ ์žˆ๊ณ , ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๊ทธ๋ฃน์„ ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ๋‹ค.

  • General headers : ๋ฉ”์‹œ์ง€ ์ „์ฒด์— ์ ์šฉ๋˜๋Š” ํ—ค๋”๋กœ, body๋ฅผ ํ†ตํ•ด ์ „์†ก๋˜๋Š” ๋ฐ์ดํ„ฐ์™€๋Š” ๊ด€๋ จ์ด ์—†๋‹ค.

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

์š”์ฒญ ํ—ค๋” ๋ช…์„ค๋ช…๋น„๊ณ 
From์œ ์ € ์—์ด์ „ํŠธ์˜ ์ด๋ฉ”์ผ ์ •๋ณด์ž˜ ์‚ฌ์šฉX, ๊ฒ€์ƒ‰์—”์ง„์—์„œ ์ฃผ๋กœ ์‚ฌ์šฉ
Referer์ด์ „ ์›น ํŽ˜์ด์ง€ ์ฃผ์†ŒA->B ์ด๋™ ์‹œ, A๋ฅผ ํฌํ•จํ•ด์„œ ์š”์ฒญ, ์‚ฌ์šฉ ์‹œ ์œ ์ž…๊ฒฝ๋กœ ์ˆ˜์ง‘ ๊ฐ€๋Šฅ
User-Agentํด๋ผ์ด์–ธํŠธ์˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ •๋ณด, ํ†ต๊ณ„ ์ •๋ณดuser-agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7)...Safari/537.36
Host์š”์ฒญํ•œ ํ˜ธ์ŠคํŠธ ์ •๋ณด(๋„๋ฉ”์ธ), ํ•„์ˆ˜ํ—ค๋”ํ•˜๋‚˜์˜ ์„œ๋ฒ„๊ฐ€ ์—ฌ๋Ÿฌ ๋„๋ฉ”์ธ์„ ์ฒ˜๋ฆฌํ•  ๋•Œ, ๋˜๋Š” ํ•˜๋‚˜์˜ IP ์ฃผ์†Œ์— ์—ฌ๋Ÿฌ ๋„๋ฉ”์ธ์ด ์ ์šฉ๋˜์–ด ์žˆ์„ ๋•Œ ํ˜ธ์ŠคํŠธ ์ •๋ณด๋ฅผ ๋ช…์‹œํ•˜๊ธฐ ์œ„ํ•จ
Origin์„œ๋ฒ„๋กœ POST ์š”์ฒญ์„ ๋ณด๋‚ผ ๋•Œ, ์š”์ฒญ์„ ์‹œ์ž‘ํ•œ ์ฃผ์†Œ์†ก์ˆ˜์‹  ์ฃผ์†Œ๊ฐ€ ๋‹ค๋ฅด๋ฉด CORS ์—๋Ÿฌ ๋ฐœ์ƒ, ์‘๋‹ต ํ—ค๋”์˜ Access-Control-Allow-Origin๊ณผ ๊ด€๋ จ
Authorization์ธ์ฆ ํ† ํฐ์„ ์„œ๋ฒ„๋กœ ๋ณด๋‚ผ ๋•Œ ์‚ฌ์šฉ, ํ† ํฐ์˜ ์ข…๋ฅ˜+์‹ค์ œ ํ† ํฐ ๋ฌธ์ž๋ฅผ ์ „์†กAuthorization: Basic YWxhZGRpbjpvcGVuc2VzYW1l

  • Representation headers(์š”์ฒญ ๋ฐ ์‘๋‹ต ๋‘˜ ๋‹ค ์‚ฌ์šฉ) : ์ด์ „์—๋Š” Entity headers๋กœ ๋ถˆ๋ €์œผ๋ฉฐ, HTTP ์ „์†ก์— ํ•„์š”ํ•œ ๋ชจ๋“  ๋ถ€๊ฐ€์ •๋ณด๋ฅผ ๋‹ด๊ธฐ์œ„ํ•ด ์‚ฌ์šฉํ•œ๋‹ค. body์— ๋‹ด๊ธด ๋ฆฌ์†Œ์Šค์˜ ์ •๋ณด(์ฝ˜ํ…์ธ  ๊ธธ์ด, MIME ํƒ€์ž… ๋“ฑ)๋ฅผ ํฌํ•จํ•œ๋‹ค.

ํ‘œํ˜„ ํ—ค๋” ๋ช…์„ค๋ช…์˜ˆ์‹œ
Content-Typeํ‘œํ˜„ ๋ฐ์ดํ„ฐ์˜ ํ˜•์‹
๋ฏธ๋””์–ด ํƒ€์ž…, ๋ฌธ์ž ์ธ์ฝ”๋”ฉ
Text/html; charset=utf-8
application/json
Image/png
Content-Encodingํ‘œํ˜„ ๋ฐ์ดํ„ฐ์˜ ์••์ถ• ๋ฐฉ์‹qzip
deflate
identity
Content-Languageํ‘œํ˜„ ๋ฐ์ดํ„ฐ์˜ ์ž์—ฐ ์–ธ์–ดko
en
en-US
Content-Lengthํ‘œํ˜„ ๋ฐ์ดํ„ฐ์˜ ๊ธธ์ด
byte๋‹จ์œ„
์ˆซ์ž(1,2,3...) Transfer-Encoding(Chunked ๋ฐฉ์‹) ์‚ฌ์šฉ ์‹œ ์ „์ฒด ๋ฐ์ดํ„ฐ์˜ ํฌ๊ธฐ๋ฅผ ์•Œ ์ˆ˜ ์—†์œผ๋ฏ€๋กœ Content-Length ์‚ฌ์šฉ ๋ถˆ๊ฐ€



โœ” Body

์š”์ฒญ์˜ ๋ณธ๋ฌธ(Body)์€ HTTP messages ๊ตฌ์กฐ์˜ ๋งˆ์ง€๋ง‰์— ์œ„์น˜ํ•˜๋ฉฐ, ๋ชจ๋“  ์š”์ฒญ์— body๊ฐ€ ํ•„์š”ํ•˜์ง€๋Š” ์•Š๋‹ค.

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


body๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋‘ ์ข…๋ฅ˜๋กœ ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ๋‹ค.

  • Single-resource bodies(๋‹จ์ผ-๋ฆฌ์†Œ์Šค ๋ณธ๋ฌธ) : ํ—ค๋” ๋‘ ๊ฐœ(Content-Type, Content-Length)๋กœ ์ •์˜๋œ ๋‹จ์ผ ํŒŒ์ผ๋กœ ๊ตฌ์„ฑ๋œ๋‹ค.

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




๐Ÿ‘€ HTTP Responses


Server๊ฐ€ Client์—๊ฒŒ ๋ณด๋‚ด๋Š” ๋ฉ”์‹œ์ง€์ด๋‹ค. (Server -> Client)

โœ” Status line

์•„๋ž˜์˜ ์ •๋ณด๋ฅผ ๋‚˜ํƒ€๋‚ธ๋‹ค.

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

ex) HTTP/1.1 404 Not Found



โœ” Headers

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


๊ฐ’์€ ํ—ค๋”์— ๋”ฐ๋ผ ๋‹ค๋ฅด๋ฉฐ, ์—ฌ๋Ÿฌ ์ข…๋ฅ˜์˜ ํ—ค๋”๊ฐ€ ์žˆ๊ณ , ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๊ทธ๋ฃน์„ ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ๋‹ค.

  • General headers : ๋ฉ”์‹œ์ง€ ์ „์ฒด์— ์ ์šฉ๋˜๋Š” ํ—ค๋”๋กœ, body๋ฅผ ํ†ตํ•ด ์ „์†ก๋˜๋Š” ๋ฐ์ดํ„ฐ์™€๋Š” ๊ด€๋ จ์ด ์—†๋‹ค.

  • Response headers : ์œ„์น˜ ๋˜๋Š” ์„œ๋ฒ„ ์ž์ฒด์— ๋Œ€ํ•œ ์ •๋ณด(์ด๋ฆ„, ๋ฒ„์ „ ๋“ฑ)์™€ ๊ฐ™์ด ์‘๋‹ต์— ๋Œ€ํ•œ ๋ถ€๊ฐ€์ ์ธ ์ •๋ณด๋ฅผ ๊ฐ–๋Š” ํ—ค๋”๋กœ, Vary, Accept-Ranges์™€ ๊ฐ™์ด ์ƒํƒœ ์ค„์— ๋„ฃ๊ธฐ์—๋Š” ๊ณต๊ฐ„์ด ๋ถ€์กฑํ–ˆ๋˜ ์ถ”๊ฐ€ ์ •๋ณด๋ฅผ ์ œ๊ณตํ•œ๋‹ค.

์‘๋‹ต ํ—ค๋” ๋ช…์„ค๋ช…๋น„๊ณ 
Server์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๋Š” Origin ์„œ๋ฒ„์˜ ์†Œํ”„ํŠธ์›จ์–ด ์ •๋ณดServer: Apache/2.2.22 (Debian)
Server: nginx
Date๋ฉ”์‹œ์ง€๊ฐ€ ๋ฐœ์ƒํ•œ ๋‚ ์งœ,์‹œ๊ฐ„Date: Tue, 15 Nov 1994 08:12:31 GMT
LocationํŽ˜์ด์ง€ ๋ฆฌ๋””๋ ‰์…˜, ์›น ๋ธŒ๋ผ์šฐ์ €๋Š” 3xx ์‘๋‹ต์˜ ๊ฒฐ๊ณผ์— Location ํ—ค๋”๊ฐ€ ์žˆ์œผ๋ฉด, Location ์œ„์น˜๋กœ ๋ฆฌ๋‹ค์ด๋ ‰ํŠธ(์ž๋™ ์ด๋™)โ—พ 201(Created): Location ๊ฐ’์€ ์š”์ฒญ์— ์˜ํ•ด ์ƒ์„ฑ๋œ ๋ฆฌ์†Œ์Šค URI
โ—พ 3xx(Redirection): Location ๊ฐ’์€ ์š”์ฒญ์„ ์ž๋™์œผ๋กœ ๋ฆฌ๋””๋ ‰์…˜ํ•˜๊ธฐ ์œ„ํ•œ ๋Œ€์ƒ ๋ฆฌ์†Œ์Šค๋ฅผ ๊ฐ€๋ฆฌํ‚ด
Allowํ—ˆ์šฉ ๊ฐ€๋Šฅํ•œ HTTP ๋ฉ”์„œ๋“œAllow: GET, HEAD, PUT
Retry-AfterClient๊ฐ€ ๋‹ค์Œ ์š”์ฒญ์„ ํ•˜๊ธฐ๊นŒ์ง€ ๊ธฐ๋‹ค๋ ค์•ผ ํ•˜๋Š” ์‹œ๊ฐ„โ—พ 503(Service Unavailable): ์„œ๋น„์Šค๊ฐ€ ์–ธ์ œ๊นŒ์ง€ ๋ถˆ๋Šฅ์ธ์ง€ ์•Œ๋ ค์ค„ ์ˆ˜ ์žˆ์Œ
โ—พ Retry-After: Fri, 31 Dec 2020 23:59:59 GMT(๋‚ ์งœ ํ‘œ๊ธฐ)
โ—พ Retry-After: 120(์ดˆ ๋‹จ์œ„ ํ‘œ๊ธฐ)

  • Representation headers : ์ด์ „์—๋Š” Entity headers๋กœ ๋ถˆ๋ €์œผ๋ฉฐ, body์— ๋‹ด๊ธด ๋ฆฌ์†Œ์Šค์˜ ์ •๋ณด(์ฝ˜ํ…์ธ  ๊ธธ์ด, MIME ํƒ€์ž… ๋“ฑ)๋ฅผ ํฌํ•จํ•œ๋‹ค.



โœ” Body

์‘๋‹ต์˜ ๋ณธ๋ฌธ(body)์€ HTTP messages ๊ตฌ์กฐ์˜ ๋งˆ์ง€๋ง‰์— ์œ„์น˜ํ•˜๋ฉฐ, ๋ชจ๋“  ์‘๋‹ต์— body๊ฐ€ ํ•„์š”ํ•˜์ง€๋Š” ์•Š๋‹ค.

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


์‘๋‹ต์˜ body๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋‘ ์ข…๋ฅ˜๋กœ ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ๋‹ค.

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

  • Multiple-resource bodies(๋‹ค์ค‘-๋ฆฌ์†Œ์Šค ๋ณธ๋ฌธ) : ์„œ๋กœ ๋‹ค๋ฅธ ์ •๋ณด๋ฅผ ๋‹ด๊ณ  ์žˆ๋Š” body์ด๋‹ค.



๐Ÿ‘€ ์ฝ˜ํ…์ธ  ํ˜‘์ƒ

ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์„ ํ˜ธํ•˜๋Š” ํ‘œํ˜„ ์š”์ฒญ(์š”์ฒญ์‹œ์—๋งŒ ์‚ฌ์šฉ)


ํ‘œํ˜„ ํ—ค๋” ๋ช…์„ค๋ช…
Acceptํด๋ผ์ด์–ธํŠธ๊ฐ€ ์„ ํ˜ธํ•˜๋Š” ๋ฏธ๋””์–ด ํƒ€์ž… ์ „๋‹ฌ
Accept-Charsetํด๋ผ์ด์–ธํŠธ๊ฐ€ ์„ ํ˜ธํ•˜๋Š” ๋ฌธ์ž ์ธ์ฝ”๋”ฉ
Accept-Encodingํด๋ผ์ด์–ธํŠธ๊ฐ€ ์„ ํ˜ธํ•˜๋Š” ์••์ถ• ์ธ์ฝ”๋”ฉ
Accept-Languageํด๋ผ์ด์–ธํŠธ๊ฐ€ ์„ ํ˜ธํ•˜๋Š” ์ž์—ฐ ์–ธ์–ด

ํ˜‘์ƒ ํ—ค๋”์—์„œ๋Š” ์›ํ•˜๋Š” ์ฝ˜ํ…์ธ ์— ๋Œ€ํ•œ ์šฐ์„ ์ˆœ์œ„๋ฅผ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋‹ค. Quality Values(q)๊ฐ’์„ ์‚ฌ์šฉํ•˜๋ฉฐ, 0~1 ์‚ฌ์ด์˜ ์ˆซ์ž๋กœ, ํด ์ˆ˜๋ก ๋†’์€ ์ˆœ์œ„๋ฅผ ๊ฐ–๋Š”๋‹ค.

ex) Accept-Language: ko-KR;q=1,ko;q=0.9,en-US;q=0.8,en;1=0.7 (q=1 ์€ ์ƒ๋žต ๊ฐ€๋Šฅ)


๋งŒ์•ฝ ๊ธฐ๋ณธ ๋…์ผ์–ด, ์˜์–ด ์ง€์› ๊ฐ€๋Šฅํ•œ ์„œ๋ฒ„์— ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์œ„์™€ ๊ฐ™์ด ์šฐ์„ ์ˆœ์œ„๋ฅผ ์š”์ฒญํ•˜๊ฒŒ ๋˜๋ฉด, 1์ˆœ์œ„์ธ ํ•œ๊ตญ์–ด๋ฅผ ์„œ๋ฒ„์—์„œ ์ง€์›ํ•˜์ง€ ์•Š์ง€๋งŒ, 2์ˆœ์œ„์ธ ์˜์–ด๋ฅผ ๊ธฐ๋ณธ ์ง€์› ์–ธ์–ด์ธ ๋…์ผ์–ด๋ณด๋‹ค ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์„ ํ˜ธํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์˜์–ด๋กœ ์‘๋‹ต์„ ์ฃผ๊ฒŒ๋œ๋‹ค.




Reference: ์ฝ”๋“œ์Šคํ…Œ์ด์ธ 

0๊ฐœ์˜ ๋Œ“๊ธ€