๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
  • Dev Blog
CS/Network

[HTTP] - HTTP ํ—ค๋”

by ์œ ์ง„์˜ 2022. 8. 9.
์ธํ”„๋Ÿฐ ๊ฐ•์˜ ์ค‘ ๋ชจ๋“  ๊ฐœ๋ฐœ์ž๋ฅผ ์œ„ํ•œ HTTP ์›น ๊ธฐ๋ณธ ์ง€์‹์ด๋ผ๋Š” ๊ฐ•์˜์— ๋Œ€ํ•œ TIL์ž…๋‹ˆ๋‹ค.

 

HTTP ํ—ค๋” 1 - ์ผ๋ฐ˜ ํ—ค๋”

 

RFC 7230~7235์˜ HTTP ๋ฉ”์‹œ์ง€

 

์ถœ์ฒ˜) https://www.inflearn.com/course/http-์›น-๋„คํŠธ์›Œํฌ ๊ฐ•์˜์ž๋ฃŒ

 

ํ‘œํ˜„์ด๋ž€ ์š”์ฒญ์ด๋‚˜ ์‘๋‹ต์—์„œ ์‹ค์ œ ๋ฐ์ดํ„ฐ๋ฅผ ์˜๋ฏธํ•œ๋‹ค. ์ด๋Ÿฌํ•œ ํ‘œํ˜„ ๋ฐ์ดํ„ฐ๋Š” ํŽ˜์ด๋กœ๋“œ, ์ฆ‰ ๋ฉ”์‹œ์ง€ ๋ณธ๋ฌธ(Body)์„ ํ†ตํ•ด ์ „๋‹ฌ๋œ๋‹ค. ์ด๋•Œ, ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„๋Š” ๊ฐ๊ฐ์˜ ์ˆ˜์‹ ๋œ HTTP ๋ฉ”์‹œ์ง€์—์„œ ํ‘œํ˜„ ๋ฐ์ดํ„ฐ๋“ค์„ ํ•ด์„ํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•˜๋Š”๋ฐ ์ด๋Ÿฌํ•œ ์ •๋ณด๋“ค์€ ํ‘œํ˜„ ํ—ค๋”์—์„œ ์ œ๊ณตํ•œ๋‹ค. ๋‹ค์Œ์€ HTTP ๋ฉ”์‹œ์ง€์˜ ํ‘œํ˜„ ํ—ค๋”์˜ ์˜ˆ์‹œ๋“ค์ด๋‹ค.

 

Content-Type

ํ‘œํ˜„ ๋ฐ์ดํ„ฐ์˜ ํ˜•์‹์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ๋‹ด๊ณ  ์žˆ๋Š” ํ—ค๋”์ด๋‹ค. ๋‹ค์Œ์€ ์‚ฌ์šฉ ์˜ˆ์‹œ์ด๋‹ค.

1. Content-Type: text/html;charset=UTF-8
=> ํ‘œํ˜„ ๋ฐ์ดํ„ฐ์˜ ํ˜•์‹์ด HTML ํŒŒ์ผ์ด๋ผ๋Š” ๊ฒƒ์„ ์ œ๊ณตํ•œ๋‹ค.
2. Content-Type: application/json
=> ํ‘œํ˜„ ๋ฐ์ดํ„ฐ์˜ ํ˜•์‹์ด json์ด๋ผ๋Š” ๊ฒƒ์„ ์ œ๊ณตํ•œ๋‹ค.
3. Content-Type: image/png
=> ํ‘œํ˜„ ๋ฐ์ดํ„ฐ์˜ ํ˜•์‹์ด png ํŒŒ์ผ์ด๋ผ๋Š” ๊ฒƒ์„ ์ œ๊ณตํ•œ๋‹ค.

 

Content-Encoding

ํ‘œํ˜„ ๋ฐ์ดํ„ฐ์˜ ์ธ์ฝ”๋”ฉ ์ •๋ณด, ์ฆ‰ ์••์ถ• ์ •๋ณด๋ฅผ ๋‹ด๊ณ  ์žˆ๋Š” ํ—ค๋”์ด๋‹ค. ํฌ๊ธฐ๊ฐ€ ํฐ ํ‘œํ˜„ ๋ฐ์ดํ„ฐ๋ฅผ ์••์ถ•ํ•ด์„œ ์ „๋‹ฌํ•  ๋•Œ ์••์ถ• ํ›„ ์ธ์ฝ”๋”ฉ ํ—ค๋”๋ฅผ ์ถ”๊ฐ€ํ•˜๋ฉด ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ๋Š” ์ชฝ์—์„œ ์ธ์ฝ”๋”ฉ ํ—ค๋”์˜ ์ •๋ณด๋กœ ์••์ถ•์„ ํ•ด์ œํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค. ์ข…๋ฅ˜๋กœ๋Š” gzip, deflate, identity(์ธ์ฝ”๋”ฉ X)๋“ฑ์ด ์žˆ๋‹ค.

 

Content-Language

ํ‘œํ˜„ ๋ฐ์ดํ„ฐ์˜ ์ž์—ฐ ์–ธ์–ด์˜ ์ •๋ณด๋ฅผ ๋‹ด๊ณ  ์žˆ๋Š” ํ—ค๋”์ด๋‹ค. ์ž์—ฐ ์–ธ์–ด๋ž€ ์‹ค์ œ ์‚ฌ๋žŒ์ด ์“ฐ๋Š” ์–ธ์–ด๋ฅผ ๋งํ•œ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ko๋Š” ํ•œ๊ตญ์–ด, en์€ ์˜์–ด, en-US๋Š” ๋ฏธ๊ตญ์‹ ์˜์–ด๋ฅผ ์˜๋ฏธํ•œ๋‹ค.


Content-Length

ํ‘œํ˜„ ๋ฐ์ดํ„ฐ์˜ ๊ธธ์ด๋ฅผ ๋ฐ”์ดํŠธ ๋‹จ์œ„๋กœ ๋‚˜ํƒ€๋‚ธ ์ •๋ณด๋ฅผ ๋‹ด๊ณ  ์žˆ๋Š” ํ—ค๋”์ด๋‹ค.

 

Host

HTTP ์š”์ฒญ ๋ฉ”์‹œ์ง€์—์„œ ํ•„์ˆ˜์ ์œผ๋กœ ์‚ฌ์šฉ๋˜๋Š” ํ—ค๋”์ด๋‹ค. ์š”์ฒญํ•œ ํ˜ธ์ŠคํŠธ ์ •๋ณด(๋„๋ฉ”์ธ)์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ๋‹ด๊ณ  ์žˆ๋‹ค. ํ•ด๋‹น ํ—ค๋”๊ฐ€ ํ•„์ˆ˜์ ์œผ๋กœ ์‚ฌ์šฉ๋˜์–ด์•ผํ•˜๋Š” ์ด์œ ๋Š” ํ•˜๋‚˜์˜ ์„œ๋ฒ„๊ฐ€ ์—ฌ๋Ÿฌ ๋„๋ฉ”์ธ์„ ์ฒ˜๋ฆฌํ•ด์•ผํ•  ๋•Œ, ํ•˜๋‚˜์˜ IP ์ฃผ์†Œ์— ์—ฌ๋Ÿฌ ๋„๋ฉ”์ธ์ด ์ ์šฉ๋˜์–ด ์žˆ์„ ๋•Œ์š”์ฒญ์„ ๋ฐ›๋Š” ํ˜ธ์ŠคํŠธ๊ฐ€ ์ •ํ™•ํ•˜๊ฒŒ ๋ช…์‹œ๊ฐ€ ๋˜์–ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ์•„๋ž˜ ๊ฐ•์˜์ž๋ฃŒ๋ฅผ ๋ณด์ž.

 

์ถœ์ฒ˜) https://www.inflearn.com/course/http-์›น-๋„คํŠธ์›Œํฌ ๊ฐ•์˜์ž๋ฃŒ

 

์ถœ์ฒ˜) https://www.inflearn.com/course/http-์›น-๋„คํŠธ์›Œํฌ ๊ฐ•์˜์ž๋ฃŒ

 

ํ˜‘์ƒ(Contents Negotiation)

ํ˜‘์ƒ์ด๋ž€, ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์„ ํ˜ธํ•˜๋Š” ํ‘œํ˜„์„ ์š”์ฒญํ•˜๋Š” ๊ฒƒ์„ ๋งํ•œ๋‹ค. ๋”ฐ๋ผ์„œ, ํ˜‘์ƒ ํ—ค๋”๋Š” ์š”์ฒญ ์‹œ์—๋งŒ ์‚ฌ์šฉํ•œ๋‹ค.

 

๋‹ค์Œ์€ ํ˜‘์ƒ ํ—ค๋”์˜ ์˜ˆ์‹œ๋“ค์ด๋‹ค.

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

 

ํ˜‘์ƒ ํ—ค๋”๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์š”์ฒญํ•  ๋•Œ ํด๋ผ์ด์–ธํŠธ์˜ ์„ ํ˜ธ ํ‘œํ˜„์— ๋Œ€ํ•œ ์šฐ์„ ์ˆœ์œ„์— ๋Œ€ํ•œ ์ •๋ณด๋„ ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ๋‹ค. ์šฐ์„ ์ˆœ์œ„๋ฅผ ์ „๋‹ฌํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๋‘ ๊ฐ€์ง€์ด๋‹ค.

 

Quality Values(q)

q๋ผ๋Š” ๊ฐ’์„ ์‚ฌ์šฉํ•ด์„œ ์šฐ์„ ์ˆœ์œ„๋ฅผ ํ‘œํ˜„ํ•œ๋‹ค. 0~1์˜ ์‹ค์ˆ˜๋กœ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ ํด์ˆ˜๋ก ๋†’์€ ์šฐ์„ ์ˆœ์œ„๋ฅผ ์˜๋ฏธํ•œ๋‹ค. 1์ธ ๊ฒฝ์šฐ๋Š” ์ƒ๋žตํ•  ์ˆ˜ ์žˆ๋‹ค.

 

๋‹ค์Œ์€ ์‚ฌ์šฉ ์˜ˆ์‹œ์ด๋‹ค.

Accept-Language: ko-KR,ko;q=0.9,en-US;q=0.8,en;q=0.7

 

ko-KR, ์ฆ‰ ๋Œ€ํ•œ๋ฏผ๊ตญ์‹ ํ•œ๊ตญ์–ด๋Š” q๊ฐ’์ด ์ƒ๋žต๋˜์—ˆ์œผ๋‹ˆ 1์ด๋‹ค. ko, ์ฆ‰ ๊ณตํ†ต ํ•œ๊ตญ์–ด๋Š” q๊ฐ’์ด 0.9๋กœ ๋‘ ๋ฒˆ์งธ๋กœ ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋†’๋‹ค. ์ฐจ๋ก€๋กœ, en-US๋Š” 0.8, en์€ 0.7๋กœ ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋‚˜ํƒ€๋‚˜์ ธ ์žˆ๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

 

 

๊ตฌ์ฒด์ ์ธ ์ •๋ณด

ํ˜‘์ƒ ํ—ค๋”์— ๋‹ด๊ฒจ์žˆ๋Š” ์ •๋ณด๊ฐ€ ๊ตฌ์ฒด์ ์ธ ๊ฒƒ์ผ์ˆ˜๋ก ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋†’๋‹ค. ๋‹ค์Œ ์‚ฌ์šฉ ์˜ˆ์‹œ๋ฅผ ๋ณด์ž

Accept: text/*, text/plain, text/plain;format=flowed, */*

 

ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์„ ํ˜ธํ•˜๋Š” ๋ฏธ๋””์–ด ํƒ€์ž…์— ๋Œ€ํ•œ ํ˜‘์ƒ ํ—ค๋”์— ๋Œ€ํ•œ ์ •๋ณด๊ฐ€ ๋‹ด๊ฒจ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค. ์ด๋•Œ, text/plain;format=flowed๊ฐ€ ์ œ์ผ ๊ตฌ์ฒด์ ์ธ ์ •๋ณด์ด๋‹ค. ๋”ฐ๋ผ์„œ ํ•ด๋‹น ๋ฏธ๋””์–ด ํƒ€์ž…์ด ์ œ์ผ ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋†’๋‹ค. ์ฐจ๋ก€๋กœ, text/plain, text/*, */* ์ˆœ์œผ๋กœ ์šฐ์„ ์ˆœ์œ„๊ฐ€ ์ •ํ•ด์ง„๋‹ค.

 

 

Quality Values(q) & ๊ตฌ์ฒด์ ์ธ ์ •๋ณด

q๊ฐ’๊ณผ ๊ตฌ์ฒด์ ์ธ ์ •๋ณด๋ฅผ ํ˜ผํ•ฉํ•˜์—ฌ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ๋‹ค์Œ ์‚ฌ์šฉ ์˜ˆ์‹œ๋ฅผ ๋ณด์ž.

Accept: text/*;q=0.3, text/html;q=0.7, text/html;level=1, text/html;level=2;q=0.4, */*;q=0.5

 

ํ˜‘์ƒ ํ—ค๋”๊ฐ€ ์œ„์™€ ๊ฐ™์ด ๋˜์–ด์žˆ์„ ๋•Œ ์„œ๋ฒ„์—์„œ๋Š” ์•„๋ž˜ ํ‘œ์™€ ๊ฐ™์€ ์šฐ์„ ์ˆœ์œ„์— ๋”ฐ๋ผ ์‘๋‹ตํ•ด์ค€๋‹ค.

 

Media Type Quality
text/html;level=1 1
text/html 0.7
text/html;level=3 0.7
image/jpeg 0.5
text/html;level=2 0.4
text/plain 0.3

 

๋Œ“๊ธ€