Search
Duplicate
๐Ÿ“ƒ

RFC 3875

๋งํฌ
ํ‚ค์›Œ๋“œ
CGI

1.

1.1 ๋ชฉ์ 

CGI(Common Gateway Interface) [22]๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด HTTP [1], [4] ์„œ๋ฒ„ ๋ฐ CGI ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ํด๋ผ์ด์–ธํŠธ ์š”์ฒญ์— ์‘๋‹ตํ•˜๋Š” ์ฑ…์ž„์„ ๊ณต์œ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํด๋ผ์ด์–ธํŠธ ์š”์ฒญ์€ URI(Uniform Resource Identifier) [11], ์š”์ฒญ ๋ฐฉ๋ฒ• ๋ฐ ์ „์†ก ํ”„๋กœํ† ์ฝœ์ด ์ œ๊ณตํ•˜๋Š” ์š”์ฒญ์— ๋Œ€ํ•œ ๋‹ค์–‘ํ•œ ๋ณด์กฐ ์ •๋ณด๋กœ ๊ตฌ์„ฑ๋ฉ๋‹ˆ๋‹ค.
CGI๋Š” ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ์„ ์„ค๋ช…ํ•˜๋Š” ๋ฉ”ํƒ€ ๋ณ€์ˆ˜๋ผ๊ณ  ์•Œ๋ ค์ง„ ์ถ”์ƒ ๋งค๊ฐœ ๋ณ€์ˆ˜๋ฅผ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค. ๊ตฌ์ฒด์ ์ธ ํ”„๋กœ๊ทธ๋ž˜๋จธ ์ธํ„ฐํŽ˜์ด์Šค์™€ ํ•จ๊ป˜ ์ด๊ฒƒ์€ ์Šคํฌ๋ฆฝํŠธ์™€ HTTP ์„œ๋ฒ„ ์‚ฌ์ด์˜ ํ”Œ๋žซํผ ๋…๋ฆฝ์ ์ธ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ง€์ •ํ•œ๋‹ค.
์„œ๋ฒ„๋Š” ํด๋ผ์ด์–ธํŠธ ์š”์ฒญ๊ณผ ๊ด€๋ จ๋œ ์—ฐ๊ฒฐ, ๋ฐ์ดํ„ฐ ์ „์†ก, ์ „์†ก ๋ฐ ๋„คํŠธ์›Œํฌ ๋ฌธ์ œ๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ๋ฐ˜๋ฉด CGI ์Šคํฌ๋ฆฝํŠธ๋Š” ๋ฐ์ดํ„ฐ ์•ก์„ธ์Šค ๋ฐ ๋ฌธ์„œ ์ฒ˜๋ฆฌ์™€ ๊ฐ™์€ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ ๋ฌธ์ œ๋ฅผ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

1.2 ์š”๊ตฌ ์‚ฌํ•ญ

๊ตฌํ˜„์€ ๊ตฌํ˜„๋˜๋Š” ํ”„๋กœํ† ์ฝœ์— ๋Œ€ํ•œ ํ•˜๋‚˜ ์ด์ƒ์˜ 'ํ•„์ˆ˜' ์š”๊ตฌ์‚ฌํ•ญ์„ ์ถฉ์กฑํ•˜์ง€ ๋ชปํ•˜๋ฉด ์ค€์ˆ˜๋˜์ง€ ์•Š๋Š”๋‹ค. ํŠน์ง•์— ๋Œ€ํ•œ ๋ชจ๋“  'ํ•„์ˆ˜' ์š”๊ฑด๊ณผ ๋ชจ๋“  'ํ•„์ˆ˜' ์š”๊ฑด์„ ์ถฉ์กฑํ•˜๋Š” ๊ตฌํ˜„์„ '๋ฌด์กฐ๊ฑด ์ค€์ˆ˜'๋ผ๊ณ  ํ•˜๋ฉฐ, ๋ชจ๋“  'ํ•„์ˆ˜' ์š”๊ฑด์„ ์ถฉ์กฑํ•˜์ง€๋งŒ ๊ทธ๊ฒƒ์˜ ํŠน์ง•์— ๋Œ€ํ•œ ๋ชจ๋“  'ํ•„์ˆ˜' ์š”๊ฑด์„ ์ถฉ์กฑ์‹œํ‚ค์ง€ ๋ชปํ•˜๋Š” ๊ฒƒ์„ '์กฐ๊ฑด ์ค€์ˆ˜'๋ผ๊ณ  ํ•œ๋‹ค.

1.3 ๋ช…์„ธ์„œ

CGI์˜ ๋ชจ๋“  ๊ธฐ๋Šฅ ๋ฐ ๊ธฐ๋Šฅ์ด ์— ์ •์˜๋˜์–ด ์žˆ๋Š” ๊ฒƒ์€ ์•„๋‹™๋‹ˆ๋‹ค.
๋ณธ ๋ช…์„ธ์„œ์˜ ์ฃผ์š” ๋ถ€๋ถ„ ๋‹ค์Œ ๋ฌธ๊ตฌ๋Š” ๋‹ค์Œ์— ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.
์ง€์ •๋˜์ง€ ์•Š์€ ๊ธฐ๋Šฅ์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.
system-defined
์ด ๊ธฐ๋Šฅ์€ ์‹œ์Šคํ…œ๋งˆ๋‹ค ๋‹ค๋ฅผ ์ˆ˜ ์žˆ์ง€๋งŒ ๋™์ผํ•œ ์‹œ์Šคํ…œ์„ ์‚ฌ์šฉํ•˜๋Š” ์—ฌ๋Ÿฌ ๊ตฌํ˜„์—์„œ ๋™์ผํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์‹œ์Šคํ…œ์€ ์ผ๋ฐ˜์ ์œผ๋กœ ์šด์˜ ์ฒด์ œ์˜ ํด๋ž˜์Šค๋ฅผ ์‹๋ณ„ํ•ฉ๋‹ˆ๋‹ค. ์ผ๋ถ€ ์‹œ์Šคํ…œ์€ ๋ณธ ๋ฌธ์„œ์˜ ์„น์…˜ 7์— ์ •์˜๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ƒˆ๋กœ์šด ์‹œ์Šคํ…œ์€ ๋ณธ ๋ฌธ์„œ์˜ ๊ฐœ์ • ์—†์ด ์ƒˆ๋กœ์šด ์‚ฌ์–‘์œผ๋กœ ์ •์˜๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
implementation-defined
๊ธฐ๋Šฅ์˜ ๋™์ž‘์€ ๊ตฌํ˜„๋งˆ๋‹ค ๋‹ค๋ฅผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํŠน์ • ๊ตฌํ˜„์€ ํ•ด๋‹น ๋™์ž‘์„ ๋ฌธ์„œํ™”ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

1.4 ์ˆ ์–ด

์ด ๊ทœ๊ฒฉ์€ HTTP/1.1 ๊ทœ๊ฒฉ[4]์— ์ •์˜๋œ ๋งŽ์€ ์šฉ์–ด๋ฅผ ์‚ฌ์šฉํ•˜์ง€๋งŒ, ๋‹ค์Œ ์šฉ์–ด๋Š” ํ•ด๋‹น ๋ฌธ์„œ์˜ ์ •์˜ ๋˜๋Š” ๊ณตํ†ต์˜ ์˜๋ฏธ์™€ ์ผ์น˜ํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ๋Š” ์˜๋ฏธ๋กœ ์—ฌ๊ธฐ์— ์‚ฌ์šฉ๋œ๋‹ค.
โ€˜๋ฉ”ํƒ€๋ณ€์ˆ˜โ€™
์„œ๋ฒ„์—์„œ ์Šคํฌ๋ฆฝํŠธ๋กœ ์ •๋ณด๋ฅผ ์ „๋‹ฌํ•˜๋Š” ๋ช…๋ช…๋œ ๋งค๊ฐœ ๋ณ€์ˆ˜์ž…๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์ด ๊ฐ€์žฅ ์ผ๋ฐ˜์ ์ธ ๊ตฌํ˜„์ด์ง€๋งŒ ๋ฐ˜๋“œ์‹œ ์šด์˜ ์ฒด์ œ ํ™˜๊ฒฝ์˜ ๋ณ€์ˆ˜์ผ ํ•„์š”๋Š” ์—†๋‹ค.
'์Šคํฌ๋ฆฝํŠธ'
์ด ์ธํ„ฐํŽ˜์ด์Šค์— ๋”ฐ๋ผ ์„œ๋ฒ„์—์„œ ํ˜ธ์ถœ๋˜๋Š” ์†Œํ”„ํŠธ์›จ์–ด์ž…๋‹ˆ๋‹ค. ๋…๋ฆฝํ˜• ํ”„๋กœ๊ทธ๋žจ์ผ ํ•„์š”๋Š” ์—†์ง€๋งŒ ๋™์ ์œผ๋กœ ๋กœ๋“œ๋˜๊ฑฐ๋‚˜ ๊ณต์œ ๋˜๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ผ ์ˆ˜๋„ ์žˆ๊ณ  ์„œ๋ฒ„์˜ ์„œ๋ธŒ๋ฃจํ‹ด์ผ ์ˆ˜๋„ ์žˆ๋‹ค. ์ด๊ฒƒ์€ '์Šคํฌ๋ฆฝํŠธ'๋ผ๋Š” ์šฉ์–ด๊ฐ€ ์ž์ฃผ ์ดํ•ด๋˜๊ธฐ ๋•Œ๋ฌธ์— ์‹คํ–‰ ์‹œ ํ•ด์„๋˜๋Š” ์ง„์ˆ ์˜ ์ง‘ํ•ฉ์ผ ์ˆ˜ ์žˆ์ง€๋งŒ, ๊ทธ๊ฒƒ์€ ์š”๊ฑด์ด ์•„๋‹ˆ๋ฉฐ ์ด ๋ช…์„ธ์„œ์˜ ๋งฅ๋ฝ์—์„œ ์šฉ์–ด๋Š” ๋” ๋„“์€ ์ •์˜๊ฐ€ ๋ช…์‹œ๋˜์–ด ์žˆ๋‹ค.
'์„œ๋ฒ„'
ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ์Šคํฌ๋ฆฝํŠธ๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์ž…๋‹ˆ๋‹ค

2. ํ‘œ๊ธฐ๋ฒ• ๋ฐ ์ผ๋ฐ˜ ๋ฌธ๋ฒ•

2.1 BNF

์ด ๋ฌธ์„œ์— ๋ช…์‹œํ•œ ๋ชจ๋“  ๋ฉ”์ปค๋‹ˆ์ฆ˜์€ RFC 822์—์„œ ์‚ฌ์šฉํ•œ ๊ฒƒ๊ณผ ์œ ์‚ฌํ•œ ์‚ฐ๋ฌธ๊ณผ ์ฆ๊ฐ• BNF์œผ๋กœ ์„ค๋ช…๋œ๋‹ค[13]. ๋‹ฌ๋ฆฌ ๋ช…์‹œ๋˜์ง€ ์•Š๋Š” ํ•œ, ์š”์†Œ๋Š” ๋Œ€์†Œ๋ฌธ์ž๋ฅผ ๊ตฌ๋ถ„ํ•ฉ๋‹ˆ๋‹ค. ์ด ์ฆ๊ฐ•๋œ BNF๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ตฌ์„ฑ์„ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค.
์ด๋ฆ„ = ์ •์˜
๊ทœ์น™์˜ ์ด๋ฆ„๊ณผ ์ •์˜๋Š” ๋“ฑํ˜ธ ๋ฌธ์ž('=')๋กœ ๊ตฌ๋ถ„๋ฉ๋‹ˆ๋‹ค. ๊ณต๋ฐฑ์€ ์ •์˜์˜ ์—ฐ์†์„ ์ด ๋“ค์—ฌ์“ฐ๊ธฐ๋œ๋‹ค๋Š” ์ ์—์„œ๋งŒ ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค.
"literal"
์ด์ค‘ ๋”ฐ์˜ดํ‘œ(")๋Š” ๋ฆฌํ„ฐ๋Ÿด ํ…์ŠคํŠธ๋ฅผ ๋‘˜๋Ÿฌ์‹ธ์ง€๋งŒ, ๋ฆฌํ„ฐ๋Ÿด ๋”ฐ์˜ดํ‘œ('<' ๋ฐ '>')๋Š” ๋ฆฌํ„ฐ๋Ÿด ๋”ฐ์˜ดํ‘œ(๋‹จ, ๋ฆฌํ„ฐ๋Ÿด ๋”ฐ์˜ดํ‘œ๋Š” ์ œ์™ธ).
rule1 | rule2
๋Œ€์ฒด ๊ทœ์น™์€ ์„ธ๋กœ ๋ง‰๋Œ€('|')๋กœ ๊ตฌ๋ถ„๋ฉ๋‹ˆ๋‹ค.
(rule1 rule2 rule3)
๊ด„ํ˜ธ๋กœ ๋ฌถ์ธ ์š”์†Œ๋Š” ๋‹จ์ผ ์š”์†Œ๋กœ ์ฒ˜๋ฆฌ๋ฉ๋‹ˆ๋‹ค.
*rule
๋ณ„ํ‘œ('*') ์•ž์— ์˜ค๋Š” ๊ทœ์น™์—๋Š” 0๊ฐœ ์ด์ƒ์˜ ํ•ญ๋ชฉ์ด ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ „์ฒด ํ˜•์‹์€ 'n*m rule'๋กœ ์ตœ์†Œ n๊ฐœ ๋ฐ ์ตœ๋Œ€ m๊ฐœ์˜ ๊ทœ์น™ ๋ฐœ์ƒ์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค. n๊ณผ m์€ ๊ฐ๊ฐ ๊ธฐ๋ณธ๊ฐ’ 0๊ณผ ๋ฌดํ•œ๋Œ€์˜ ์„ ํƒ์  ์†Œ์ˆ˜ ๊ฐ’์ž…๋‹ˆ๋‹ค.
[rule]
๋Œ€๊ด„ํ˜ธ('[' ๋ฐ ']')๋กœ ๋‘˜๋Ÿฌ์‹ธ์ธ ์š”์†Œ๋Š” ์„ ํƒ ์‚ฌํ•ญ์ด๋ฉฐ '*1 ๊ทœ์น™'๊ณผ ๋™์ผํ•ฉ๋‹ˆ๋‹ค.
N ๊ทœ์น™
์‹ญ์ง„์ˆ˜ ์•ž์— ์˜ค๋Š” ๊ทœ์น™์€ ์ •ํ™•ํžˆ N๊ฐœ์˜ ๊ทœ์น™ ๋ฐœ์ƒ์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ 'N*N ๊ทœ์น™'๊ณผ ๊ฐ™๋‹ค.

2.2 ๊ธฐ๋ณธ ๊ทœ์น™

์ด ๊ทœ๊ฒฉ์€ ๋ฌธ์ž์˜ ๊ด€์ ์—์„œ ์ •์˜๋œ BNF์™€ ์œ ์‚ฌํ•œ ๋ฌธ๋ฒ•์„ ์‚ฌ์šฉํ•œ๋‹ค. ํ”„๋กœํ† ์ฝœ์— ์˜ํ•ด ํ—ˆ์šฉ๋˜๋Š” ๋ฐ”์ดํŠธ๋ฅผ ์ •์˜ํ•˜๋Š” ๋งŽ์€ ์‚ฌ์–‘๊ณผ๋Š” ๋‹ฌ๋ฆฌ, ์—ฌ๊ธฐ์„œ ๋ฌธ๋ฒ•์˜ ๊ฐ ๋ฆฌํ„ฐ๋Ÿด์€ ๊ทธ๊ฒƒ์ด ๋‚˜ํƒ€๋‚ด๋Š” ๋ฌธ์ž์— ๋Œ€์‘ํ•œ๋‹ค. ์ด๋Ÿฌํ•œ ๋ฌธ์ž๊ฐ€ ์‹œ์Šคํ…œ ๋‚ด์—์„œ ๋น„ํŠธ ๋ฐ ๋ฐ”์ดํŠธ ๋‹จ์œ„๋กœ ํ‘œํ˜„๋˜๋Š” ๋ฐฉ๋ฒ•์€ ์‹œ์Šคํ…œ ์ •์˜๋˜๊ฑฐ๋‚˜ ํŠน์ • ์ปจํ…์ŠคํŠธ์—์„œ ์ง€์ •๋ฉ๋‹ˆ๋‹ค. ๋‹จ ํ•˜๋‚˜์˜ ์˜ˆ์™ธ๋Š” ์•„๋ž˜์— ์ •์˜๋œ ๊ทœ์น™ 'OCTET'์ž…๋‹ˆ๋‹ค.
๋ณธ ๋ช…์„ธ์„œ์—์„œ ๊ธฐ๋ณธ์ ์ธ ๊ตฌ๋ฌธ ๋ถ„์„ ๊ตฌ์กฐ๋ฅผ ์„ค๋ช…ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋˜๋Š” ๊ทœ์น™์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.
์ค„ ๋ฐ”๊ฟˆ(NL)์€ single control char ๊ฐ€ ์•„๋‹ˆ๋ผ sequence of control char ์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์‹œ์Šคํ…œ์€ ํ…์ŠคํŠธ๋ฅผ <CTL์„ ์ œ์™ธํ•˜๊ณ  LWSP๋ฅผ ํฌํ•จํ•˜๋Š” ์ž„์˜์˜ ๋ฌธ์ž ์ง‘ํ•ฉ๋ณด๋‹ค ๋” ํฐ ๋ฌธ์ž ์ง‘ํ•ฉ์œผ๋กœ ์ •์˜ํ•  ์ˆ˜ ์žˆ๋‹ค.

2.3 URL ์ธ์ฝ”๋”ฉ

์—ฌ๊ธฐ์„œ ์‚ฌ์šฉ๋˜๋Š” ์ผ๋ถ€ ๋ณ€์ˆ˜์™€ ๊ตฌ์กฐ๋Š” 'URL ์ธ์ฝ”๋”ฉ'์œผ๋กœ ์„ค๋ช…๋œ๋‹ค. ์ด ์ธ์ฝ”๋”ฉ์€ RFC 2396 [2]์˜ ์„น์…˜ 2์— ์„ค๋ช…๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. URL ์ธ์ฝ”๋”ฉ ๋ฌธ์ž์—ด์—์„œ ์ด์Šค์ผ€์ดํ”„ ์‹œํ€€์Šค๋Š” ๋ฐฑ๋ถ„์œจ ๋ฌธ์ž("%")์™€ ๋‘ ๊ฐœ์˜ 16์ง„์ˆ˜ ์ž๋ฆฌ(์—ฌ๊ธฐ์„œ ๋‘ ๊ฐœ์˜ 16์ง„์ˆ˜ ์ž๋ฆฌ)๋กœ ๊ตฌ์„ฑ๋ฉ๋‹ˆ๋‹ค. ์ด์Šค์ผ€์ดํ”„ ์‹œํ€€์Šค๋Š” US-ASCII [9] ์ฝ”๋“œํ™”๋œ ๋ฌธ์ž ์ง‘ํ•ฉ(์žˆ๋Š” ๊ฒฝ์šฐ) ๋‚ด์˜ ์ฝ”๋“œ๋กœ ์˜ฅํ…Ÿ์ด ์žˆ๋Š” ๊ทธ๋ž˜ํ”ฝ ๋ฌธ์ž๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค. ํ˜„์žฌ URI ๊ตฌ๋ฌธ์—๋Š” ASCII๊ฐ€ ์•„๋‹Œ ๋ฌธ์ž ์ง‘ํ•ฉ์„ ์‹๋ณ„ํ•  ์ˆ˜ ์žˆ๋Š” ์กฐํ•ญ์ด ์—†์Šต๋‹ˆ๋‹ค. ์ฝ”๋“œ๋Š” ์ด๋ฅผ ๋‚˜ํƒ€๋‚ด๋ฏ€๋กœ CGI๋Š” ์ด ๋ฌธ์ œ๋ฅผ ์ž„์‹œ๋ฐฉํŽธ์œผ๋กœ ์ฒ˜๋ฆฌํ•œ๋‹ค.
์ผ๋ถ€ ์•ˆ์ „ํ•˜์ง€ ์•Š์€(์˜ˆ์•ฝ๋œ) ๋ฌธ์ž๋Š” ์ธ์ฝ”๋”ฉ๋  ๋•Œ ๋‹ค๋ฅธ ์˜๋ฏธ๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์•ˆ์ „ํ•˜์ง€ ์•Š์€ ๋ฌธ์ž์˜ ์ •์˜๋Š” ์ƒํ™ฉ์— ๋”ฐ๋ผ ๋‹ฌ๋ผ์ง„๋‹ค. ๊ถŒ์œ„ ์žˆ๋Š” ์ทจ๊ธ‰์— ๋Œ€ํ•ด์„œ๋Š” RFC 2732[7]์— ์˜ํ•ด ์—…๋ฐ์ดํŠธ๋œ RFC 2396[2]์˜ ์„น์…˜ 2๋ฅผ ์ฐธ์กฐํ•œ๋‹ค. ์ด๋Ÿฌํ•œ ์˜ˆ์•ฝ๋œ ๋ฌธ์ž๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ๋ฌธ์ž์—ด์— ๊ตฌ๋ฌธ ๊ตฌ์กฐ๋ฅผ ์ œ๊ณตํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค(์˜ˆ: ํ•„๋“œ ๊ตฌ๋ถ„ ๊ธฐํ˜ธ). ๋ชจ๋“  ๊ฒฝ์šฐ์—, ๋ฌธ์ž์—ด์€ ๋จผ์ € ์กด์žฌํ•˜๋Š” ์˜ˆ์•ฝ๋œ ๋ฌธ์ž์™€ ๊ด€๋ จํ•˜์—ฌ ์ฒ˜๋ฆฌ๋œ ๋‹ค์Œ, "%" ์ด์Šค์ผ€์ดํ”„ ์‹œํ€€์Šค๋ฅผ ๋ฌธ์ž ๊ฐ’์œผ๋กœ ๋Œ€์ฒดํ•˜์—ฌ ๊ฒฐ๊ณผ ๋ฐ์ดํ„ฐ๋ฅผ URL ๋””์ฝ”๋”ฉํ•  ์ˆ˜ ์žˆ๋‹ค.
๋ฌธ์ž์—ด์„ ์ธ์ฝ”๋”ฉํ•˜๊ธฐ ์œ„ํ•ด ์˜ˆ์•ฝ๋œ ๋ชจ๋“  ๋ฌธ์ž ๋ฐ ๊ธˆ์ง€๋œ ๋ฌธ์ž๊ฐ€ ํ•ด๋‹น "%" ์ด์Šค์ผ€์ดํ”„ ์‹œํ€€์Šค๋กœ ๋Œ€์ฒด๋ฉ๋‹ˆ๋‹ค. ์ด ๋ฌธ์ž์—ด์€ URI๋ฅผ ์กฐ๋ฆฝํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ๋‹ค. ์˜ˆ์•ฝ๋œ ๋ฌธ์ž๋Š” ์ปจํ…์ŠคํŠธ์— ๋”ฐ๋ผ ๋‹ค๋ฅด์ง€๋งŒ ํ•ญ์ƒ ๋‹ค์Œ ์ง‘ํ•ฉ์—์„œ ๊ทธ๋ฆฝ๋‹ˆ๋‹ค.
๋งˆ์ง€๋ง‰ ๋‘ ๋ฌธ์ž๋Š” RFC 2732 [7]์— ์˜ํ•ด ์ถ”๊ฐ€๋˜์—ˆ๋‹ค. ํŠน์ • ์ปจํ…์ŠคํŠธ์—์„œ ์ด๋Ÿฌํ•œ ๋ฌธ์ž์˜ ํ•˜์œ„ ์ง‘ํ•ฉ์€ ์˜ˆ์•ฝ๋ฉ๋‹ˆ๋‹ค. ์ด ์ง‘ํ•ฉ์˜ ๋‹ค๋ฅธ ๋ฌธ์ž๋Š” ๋ฌธ์ž์—ด์ด ํ•ด๋‹น ์ปจํ…์ŠคํŠธ์—์„œ URL ์ธ์ฝ”๋”ฉ๋  ๋•Œ ์ธ์ฝ”๋”ฉ๋˜์ง€ ์•Š์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค. URI ๊ตฌ๋ฌธ์„ ์„ค๋ช…ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋Š” ๋‹ค๋ฅธ ๊ธฐ๋ณธ ๊ทœ์น™์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

3. ์Šคํฌ๋ฆฝํŠธ ํ˜ธ์ถœ

3.1 ์„œ๋ฒ„ ์ฑ…์ž„

์„œ๋ฒ„๋Š” ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ ๊ฒŒ์ดํŠธ์›จ์ด ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค. ํด๋ผ์ด์–ธํŠธ๋กœ๋ถ€ํ„ฐ ์š”์ฒญ์„ ์ˆ˜์‹ ํ•˜๊ณ , ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•  CGI ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์„ ํƒํ•˜๊ณ , ํด๋ผ์ด์–ธํŠธ ์š”์ฒญ์„ CGI ์š”์ฒญ์œผ๋กœ ๋ณ€ํ™˜ํ•˜๊ณ , ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‹คํ–‰ํ•˜๊ณ  CGI ์‘๋‹ต์„ ํด๋ผ์ด์–ธํŠธ์— ๋Œ€ํ•œ ์‘๋‹ต์œผ๋กœ ๋ณ€ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ํด๋ผ์ด์–ธํŠธ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•  ๋•Œ ํ”„๋กœํ† ์ฝœ ๋˜๋Š” ์ „์†ก ์ˆ˜์ค€ ์ธ์ฆ ๋ฐ ๋ณด์•ˆ์„ ๊ตฌํ˜„ํ•  ์ฑ…์ž„์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์„œ๋ฒ„๋Š” ๋˜ํ•œ ๋ฏธ๋””์–ด ์œ ํ˜• ๋ณ€ํ™˜ ๋˜๋Š” ํ”„๋กœํ† ์ฝœ ๊ฐ์†Œ์™€ ๊ฐ™์€ ์ผ๋ถ€ ์ถ”๊ฐ€ ์„œ๋น„์Šค๋ฅผ ์ œ๊ณตํ•˜๊ธฐ ์œ„ํ•ด ์š”์ฒญ ๋˜๋Š” ์‘๋‹ต์„ ์ˆ˜์ •ํ•˜๋Š” 'non-transparent' ๋ฐฉ์‹์œผ๋กœ ์ž‘๋™ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
์„œ๋ฒ„๋Š” ์ด ์‚ฌ์–‘์— ํ•„์š”ํ•œ ํด๋ผ์ด์–ธํŠธ ์š”์ฒญ ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•ด ๋ณ€ํ™˜ ๋ฐ ํ”„๋กœํ† ์ฝœ ๋ณ€ํ™˜์„ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.๋”์šฑ์ด, ์„œ๋ฒ„๋Š” CGI ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์ด ๊ทœ๊ฒฉ์„ ์ค€์ˆ˜ํ•˜์ง€ ๋ชปํ•˜๋”๋ผ๋„ ๊ด€๋ จ ๋„คํŠธ์›Œํฌ ํ”„๋กœํ† ์ฝœ์„ ์ค€์ˆ˜ํ•˜๋„๋ก ํด๋ผ์ด์–ธํŠธ์— ๋Œ€ํ•œ ์ฑ…์ž„์„ ์œ ์ง€ํ•œ๋‹ค.
์„œ๋ฒ„๊ฐ€ ์š”์ฒญ์— ์ธ์ฆ์„ ์ ์šฉํ•˜๋Š” ๊ฒฝ์šฐ, ์š”์ฒญ์ด ์ •์˜๋œ ๋ชจ๋“  ์ ‘๊ทผ ์ œ์–ด๋ฅผ ํ†ต๊ณผํ•˜์ง€ ์•Š๋Š” ํ•œ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‹คํ–‰ํ•ด์„œ๋Š” ์•ˆ ๋ฉ๋‹ˆ๋‹ค.

3.2 ์Šคํฌ๋ฆฝํŠธ ์„ ํƒ

์„œ๋ฒ„๋Š” ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ œ๊ณตํ•œ ์ œ๋„ค๋ฆญ ์–‘์‹ URI๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์‹คํ–‰ํ•  CGI๋ฅผ ๊ฒฐ์ •ํ•ฉ๋‹ˆ๋‹ค. ์ด URI์—๋Š” "/"๋กœ ๊ตฌ๋ถ„๋œ ๊ตฌ์„ฑ ์š”์†Œ๊ฐ€ ์žˆ๋Š” ๊ณ„์ธต ๊ฒฝ๋กœ๊ฐ€ ํฌํ•จ๋ฉ๋‹ˆ๋‹ค. ํŠน์ • ์š”์ฒญ์˜ ๊ฒฝ์šฐ, ์„œ๋ฒ„๋Š” ์ด ๊ฒฝ๋กœ์˜ ์ „๋ถ€ ๋˜๋Š” ์„ ํ–‰ ๋ถ€๋ถ„์„ ๊ฐœ๋ณ„ ์Šคํฌ๋ฆฝํŠธ๋กœ ์‹๋ณ„ํ•˜์—ฌ ๊ฒฝ๋กœ ๊ณ„์ธต์˜ ํŠน์ • ์ง€์ ์— ์Šคํฌ๋ฆฝํŠธ๋ฅผ ๋ฐฐ์น˜ํ•ฉ๋‹ˆ๋‹ค. ๊ฒฝ๋กœ์˜ ๋‚˜๋จธ์ง€(์žˆ๋Š” ๊ฒฝ์šฐ)๋Š” ์Šคํฌ๋ฆฝํŠธ์—์„œ ํ•ด์„ํ•  ๋ฆฌ์†Œ์Šค ๋˜๋Š” ํ•˜์œ„ ๋ฆฌ์†Œ์Šค ์‹๋ณ„์ž์ž…๋‹ˆ๋‹ค.
์ด ๊ฒฝ๋กœ ๋ถ„ํ• ์— ๋Œ€ํ•œ ์ •๋ณด๋Š” ์•„๋ž˜์— ์„ค๋ช…๋œ ๋ฉ”ํƒ€ ๋ณ€์ˆ˜์˜ ์Šคํฌ๋ฆฝํŠธ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋น„๊ณ„์ธต์  URI ์ฒด๊ณ„์— ๋Œ€ํ•œ ์ง€์›์€ ๋ณธ ๋ช…์„ธ์„œ์˜ ๋ฒ”์œ„๋ฅผ ๋ฒ—์–ด๋‚œ๋‹ค.

3.3 ์Šคํฌ๋ฆฝํŠธ URI

ํด๋ผ์ด์–ธํŠธ ์š”์ฒญ URI์—์„œ ์Šคํฌ๋ฆฝํŠธ ์„ ํƒ์œผ๋กœ์˜ ๋งคํ•‘์€ ํŠน์ • ์„œ๋ฒ„ ๊ตฌํ˜„ ๋ฐ ๊ตฌ์„ฑ์— ์˜ํ•ด ์ •์˜๋ฉ๋‹ˆ๋‹ค. ์„œ๋ฒ„๋Š” ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๋‹ค๋ฅธ URI ๊ฒฝ๋กœ ๊ณ„์ธต ์ง‘ํ•ฉ์œผ๋กœ ์‹๋ณ„ํ•˜๋„๋ก ํ—ˆ์šฉํ•˜๋ฏ€๋กœ ๋ฉ”ํƒ€ ๋ณ€์ˆ˜๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ณ  ์ƒ์„ฑํ•˜๋Š” ๋™์•ˆ ์ด ์ง‘ํ•ฉ์˜ ๋‹ค๋ฅธ ๋ฉค๋ฒ„์— ์˜ํ•ด URI๋ฅผ ๋Œ€์ฒดํ•  ์ˆ˜ ์žˆ๋‹ค.
์„œ๋ฒ„๋Š”
1. ํŠน์ • ํด๋ผ์ด์–ธํŠธ ์š”์ฒญ์— URI๋ฅผ ๋ณด์กดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜๋Š”
2. ๊ฐ ์Šคํฌ๋ฆฝํŠธ์— ๋Œ€ํ•ด ๊ฐ€๋Šฅํ•œ ๊ฐ’ ์ง‘ํ•ฉ์—์„œ ํ‘œ์ค€ URI๋ฅผ ์„ ํƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜๋Š”
3. ์„ธํŠธ์—์„œ URI์˜ ๋‹ค๋ฅธ ์„ ํƒ์„ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.
์ด๋ ‡๊ฒŒ ์ƒ์„ฑ๋œ ๋ฉ”ํƒ€ ๋ณ€์ˆ˜๋กœ๋ถ€ํ„ฐ URI, ์ฆ‰ 'Script-URI'๋ฅผ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค. ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋Œ€์‹  ์ด URI์— ์•ก์„ธ์Šคํ–ˆ๋‹ค๋ฉด ์Šคํฌ๋ฆฝํŠธ๊ฐ€ SCRIPT_NAME, PATH_INFO ๋ฐ QUERY_STRING ๋ฉ”ํƒ€ ๋ณ€์ˆ˜์— ๋Œ€ํ•ด ๋™์ผํ•œ ๊ฐ’์œผ๋กœ ์‹คํ–‰๋˜์—ˆ์„ ๊ฒƒ์ด๋ผ๋Š” ์†์„ฑ์ด ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. Script-URI๋Š” RFC 2396[2]์˜ ์„น์…˜ 3์— ์ •์˜๋œ ์ผ๋ฐ˜ URI์˜ ๊ตฌ์กฐ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค. ์Šคํฌ๋ฆฝํŠธ-URI์˜ ๋‹ค์–‘ํ•œ ๊ตฌ์„ฑ ์š”์†Œ๋Š” ์ผ๋ถ€ ๋ฉ”ํƒ€ ๋ณ€์ˆ˜์— ์˜ํ•ด ์ •์˜๋ฉ๋‹ˆ๋‹ค(์•„๋ž˜ ์ฐธ์กฐ).
์—ฌ๊ธฐ์„œ sheme from SERVER_PROTOCOL, <server-name>, <server-port> ๋ฐ <query-string>์€ ๊ฐ ๋ฉ”ํƒ€ ๋ณ€์ˆ˜์˜ ๊ฐ’์ž…๋‹ˆ๋‹ค. ";", "=" ๋ฐ "?"๋กœ URL ์ธ์ฝ”๋”ฉ๋œ SCRIPT_NAME ๋ฐ PATH_INFO ๊ฐ’์€ ์˜ˆ์•ฝ๋จ์œผ๋กœ, <script-path> ๋ฐ <path-path>๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.
PATH_INFO ๋ฉ”ํƒ€ ๋ณ€์ˆ˜์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ ์„น์…˜ 4.1.5๋ฅผ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค.
์Šคํ‚ค๋งˆ์™€ ํ”„๋กœํ† ์ฝœ์€ ์Šคํ‚ค๋งˆ๊ฐ€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ํ”„๋กœํ† ์ฝœ ์™ธ์— ์•ก์„ธ์Šค ๋ฐฉ๋ฒ•์„ ์‹๋ณ„ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋™์ผํ•˜์ง€ ์•Š๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ์ „์†ก ๊ณ„์ธต ๋ณด์•ˆ(TLS)์„ ์‚ฌ์šฉํ•˜์—ฌ ์•ก์„ธ์Šค๋œ ๋ฆฌ์†Œ์Šค[14]๋Š” HTTP ํ”„๋กœํ† ์ฝœ์„ ์‚ฌ์šฉํ•  ๋•Œ https ์ฒด๊ณ„๊ฐ€ ์žˆ๋Š” ์š”์ฒญ URI๋ฅผ ๊ฐ€์ง‘๋‹ˆ๋‹ค [19]. CGI/1.1์€ ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์ด๋ฅผ ์žฌ๊ตฌ์„ฑํ•˜๋Š” ์ผ๋ฐ˜์ ์ธ ๋ฐฉ๋ฒ•์„ ์ œ๊ณตํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ ์ •์˜๋œ ๋Œ€๋กœ Script-URI์—๋Š” ์‚ฌ์šฉ๋˜๋Š” ๊ธฐ๋ณธ ํ”„๋กœํ† ์ฝœ์ด ํฌํ•จ๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์Šคํฌ๋ฆฝํŠธ๋Š” URI ์ฒด๊ณ„๋ฅผ ๋” ์ž˜ ์ถ”๋ก ํ•˜๊ธฐ ์œ„ํ•ด ์ฒด๊ณ„๋ณ„ ๋ฉ”ํƒ€ ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
๋˜ํ•œ ์ด ์ •์˜๋Š” ์ ์ ˆํ•œ ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ์ˆ˜์ •ํ•˜์—ฌ path-info ๋˜๋Š” query-string์— ๋Œ€ํ•ด ํ—ˆ์šฉ๋œ ๊ฐ’์œผ๋กœ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ํ˜ธ์ถœํ•˜๋Š” URI๋ฅผ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

3.4 ์‹คํ–‰

์Šคํฌ๋ฆฝํŠธ๋Š” ์‹œ์Šคํ…œ ์ •์˜ ๋ฐฉ์‹์œผ๋กœ ํ˜ธ์ถœ๋ฉ๋‹ˆ๋‹ค. ๋‹ฌ๋ฆฌ ์ง€์ •ํ•˜์ง€ ์•Š์œผ๋ฉด ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ํฌํ•จ๋œ ํŒŒ์ผ์ด ์‹คํ–‰ ํ”„๋กœ๊ทธ๋žจ์œผ๋กœ ํ˜ธ์ถœ๋ฉ๋‹ˆ๋‹ค. ์„œ๋ฒ„๋Š” ์„น์…˜ 4์— ์„ค๋ช…๋œ ๋Œ€๋กœ CGI ์š”์ฒญ์„ ์ค€๋น„ํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ์š”์ฒญ ๋ฉ”ํƒ€ ๋ณ€์ˆ˜(์‹คํ–‰ ์‹œ ์Šคํฌ๋ฆฝํŠธ์— ์ฆ‰์‹œ ์‚ฌ์šฉ ๊ฐ€๋Šฅ)์™€ ์š”์ฒญ ๋ฉ”์‹œ์ง€ ๋ฐ์ดํ„ฐ๋กœ ๊ตฌ์„ฑ๋ฉ๋‹ˆ๋‹ค. ์Šคํฌ๋ฆฝํŠธ์—์„œ ์š”์ฒญ ๋ฐ์ดํ„ฐ๋ฅผ ์ฆ‰์‹œ ์‚ฌ์šฉํ•  ํ•„์š”๋Š” ์—†์Šต๋‹ˆ๋‹ค. ์Šคํฌ๋ฆฝํŠธ๋Š” ์„œ๋ฒ„์—์„œ ํด๋ผ์ด์–ธํŠธ๋กœ๋ถ€ํ„ฐ ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜์‹ ํ•˜๊ธฐ ์ „์— ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์„น์…˜ 5 ๋ฐ 6์— ์„ค๋ช…๋œ ๋Œ€๋กœ ์Šคํฌ๋ฆฝํŠธ์˜ ์‘๋‹ต์ด ์„œ๋ฒ„๋กœ ๋ฐ˜ํ™˜๋ฉ๋‹ˆ๋‹ค.
์˜ค๋ฅ˜ ์กฐ๊ฑด์ด ๋ฐœ์ƒํ•  ๊ฒฝ์šฐ ์„œ๋ฒ„๋Š” ์–ธ์ œ๋“ ์ง€ ๊ฒฝ๊ณ  ์—†์ด ์Šคํฌ๋ฆฝํŠธ ์‹คํ–‰์„ ์ค‘๋‹จํ•˜๊ฑฐ๋‚˜ ์ข…๋ฃŒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ์„œ๋ฒ„์™€ ํด๋ผ์ด์–ธํŠธ ๊ฐ„์˜ ์ „์†ก ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•  ๊ฒฝ์šฐ ์ด๋Ÿฌํ•œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์Šคํฌ๋ฆฝํŠธ๋Š” ๋น„์ •์ƒ์ ์ธ ์ข…๋ฃŒ๋ฅผ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋„๋ก ์ค€๋น„ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

4. CGI request

์š”์ฒญ์— ๋Œ€ํ•œ ์ •๋ณด๋Š” ์š”์ฒญ ๋ฉ”ํƒ€ ๋ณ€์ˆ˜์™€ ๊ด€๋ จ๋œ ๋ฉ”์‹œ์ง€ ๋ณธ๋ฌธ์˜ ๋‘ ๊ฐ€์ง€ ์†Œ์Šค๋กœ๋ถ€ํ„ฐ ๋‚˜์˜ต๋‹ˆ๋‹ค.

4.1 Request ๋ฉ”ํƒ€ ๋ณ€์ˆ˜

๋ฉ”ํƒ€ ๋ณ€์ˆ˜๋Š” ์„œ๋ฒ„์—์„œ ์Šคํฌ๋ฆฝํŠธ๋กœ ์ „๋‹ฌ๋œ ์š”์ฒญ์— ๋Œ€ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ํฌํ•จํ•˜๋ฉฐ, ์‹œ์Šคํ…œ ์ •์˜ ๋ฐฉ์‹์œผ๋กœ ์Šคํฌ๋ฆฝํŠธ์— ์˜ํ•ด ์•ก์„ธ์Šค๋ฉ๋‹ˆ๋‹ค. ๋ฉ”ํƒ€ ๋ณ€์ˆ˜๋Š” ๋Œ€/์†Œ๋ฌธ์ž๋ฅผ ๊ตฌ๋ถ„ํ•˜์ง€ ์•Š๋Š” ์ด๋ฆ„์œผ๋กœ ์‹๋ณ„๋ฉ๋‹ˆ๋‹ค. ๋Œ€/์†Œ๋ฌธ์ž๋ฅผ ๊ตฌ๋ถ„ํ•˜์ง€ ์•Š๋Š” ์ด๋ฆ„์„ ๊ฐ€์ง„ ๋‘ ๊ฐœ์˜ ๋‹ค๋ฅธ ๋ณ€์ˆ˜๋Š” ์žˆ์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์—์„œ๋Š” ๋Œ€๋ฌธ์ž ๋ฐ ๋ฐ‘์ค„("_")์˜ ์ •๊ทœ ํ‘œํ˜„์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ณด์—ฌ์ค€๋‹ค. ํŠน์ • ์‹œ์Šคํ…œ์€ ๋‹ค๋ฅธ ํ‘œํ˜„์„ ์ •์˜ํ•  ์ˆ˜ ์žˆ๋‹ค.
๊ตฌ์„ฑํ‘œ์™€ ์ด๋ฆ„์ด ๊ฐ™์€ ๋ฉ”ํƒ€ ๋ณ€์ˆ˜, ํ”„๋กœํ† ์ฝœ ๋˜๋Š” ๊ตฌ์„ฑํ‘œ์˜ ์ด๋ฆ„์œผ๋กœ ์‹œ์ž‘ํ•˜๋Š” ์ด๋ฆ„(์˜ˆ: HTTP_ACCEPT)๋„ ์ •์˜๋ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๋ณ€์ˆ˜์˜ ์ˆ˜์™€ ์˜๋ฏธ๋Š” ๋ณธ ๋ช…์„ธ์„œ์™€ ๋…๋ฆฝ์ ์œผ๋กœ ๋ณ€๊ฒฝ๋  ์ˆ˜ ์žˆ๋‹ค. (์„น์…˜ 4.1.18๋„ ์ฐธ์กฐ).
์„œ๋ฒ„๋Š” ์ถ”๊ฐ€ ๊ตฌํ˜„ ์ •์˜ ํ™•์žฅ ๋ฉ”ํƒ€ ๋ณ€์ˆ˜๋ฅผ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๋ฉ”ํƒ€ ๋ณ€์ˆ˜์˜ ์ด๋ฆ„์€ "X_"๋กœ ์ ‘๋‘์‚ฌ๊ฐ€ ๋ถ™์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
์ด ๊ทœ๊ฒฉ์—์„œ๋Š” 0 ๊ธธ์ด(NULL) ๊ฐ’๊ณผ ๊ฒฐ์ธก๊ฐ’์„ ๊ตฌ๋ถ„ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ์Šคํฌ๋ฆฝํŠธ๋Š” ๋‘ ์š”์ฒญ http://host/script์™€ http://host/script?๋ฅผ ๊ตฌ๋ถ„ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๋‘ ๊ฒฝ์šฐ ๋ชจ๋‘ QUERY_STRING ๋ฉ”ํƒ€ ๋ณ€์ˆ˜๊ฐ€ NULL์ด ๋˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.
meta-meta-value = " | 1*<๊ฐ’์˜ TEXT, CHAR ๋˜๋Š” ํ† ํฐ>
์„ ํƒ์  ๋ฉ”ํƒ€ ๋ณ€์ˆ˜๋Š” ๊ฐ’์ด NULL์ธ ๊ฒฝ์šฐ ์ƒ๋žต(์„ค์ •๋˜์ง€ ์•Š์€ ์ƒํƒœ๋กœ)๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฉ”ํƒ€ ๋ณ€์ˆ˜ ๊ฐ’์€ ๋ณ„๋„์˜ ์–ธ๊ธ‰์ด ์—†๋Š” ํ•œ ๋Œ€์†Œ๋ฌธ์ž๋ฅผ ๊ตฌ๋ถ„ํ•˜๋Š” ๊ฒƒ์œผ๋กœ ๊ฐ„์ฃผํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋ฉ”ํƒ€ ๋ณ€์ˆ˜์— ์žˆ๋Š” ๋ฌธ์ž์˜ ํ‘œํ˜„์€ ์‹œ์Šคํ…œ ์ •์˜์ด๋ฉฐ, ์„œ๋ฒ„๋Š” ๊ฐ’์„ ํ•ด๋‹น ํ‘œํ˜„์œผ๋กœ ๋ณ€ํ™˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

4.1.1 AUTH_TYPE

AUTH_TYPE ๋ณ€์ˆ˜๋Š” ์„œ๋ฒ„๊ฐ€ ์‚ฌ์šฉ์ž๋ฅผ ์ธ์ฆํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•˜๋Š” ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ์‹๋ณ„ํ•ฉ๋‹ˆ๋‹ค. ํด๋ผ์ด์–ธํŠธ ํ”„๋กœํ† ์ฝœ ๋˜๋Š” ์„œ๋ฒ„ ๊ตฌํ˜„์— ์˜ํ•ด ์ •์˜๋œ ๋Œ€์†Œ๋ฌธ์ž๋ฅผ ๊ตฌ๋ถ„ํ•˜์ง€ ์•Š๋Š” ๊ฐ’์„ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค.
HTTP์˜ ๊ฒฝ์šฐ, ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์™ธ๋ถ€ ์•ก์„ธ์Šค๋ฅผ ์œ„ํ•ด ์ธ์ฆ์„ ์š”๊ตฌํ•˜๋Š” ๊ฒฝ์šฐ, ์„œ๋ฒ„๋Š” ์š”์ฒญ ๊ถŒํ•œ ๋ถ€์—ฌ ํ—ค๋” ํ•„๋“œ์˜ 'auth-scheme' ํ† ํฐ์—์„œ ์ด ๋ณ€์ˆ˜์˜ ๊ฐ’์„ ์„ค์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
HTTP ์•ก์„ธ์Šค ์ธ์ฆ ์ฒด๊ณ„๋Š” RFC 2617[5]์— ์„ค๋ช…๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

4.1.2 CONTENT_LENGTH

CONTENT_LENGTH ๋ณ€์ˆ˜์—๋Š” ์š”์ฒญ์— ์ฒจ๋ถ€๋œ ๋ฉ”์‹œ์ง€ ๋ณธ๋ฌธ์˜ ํฌ๊ธฐ๊ฐ€ 10์ง„์ˆ˜ ์˜ฅํ…Ÿ์œผ๋กœ ํฌํ•จ๋ฉ๋‹ˆ๋‹ค. ์—ฐ๊ฒฐ๋œ ๋ฐ์ดํ„ฐ๊ฐ€ ์—†์œผ๋ฉด NULL(๋˜๋Š” unset)์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.
์„œ๋ฒ„๋Š” ์š”์ฒญ์ด ๋ฉ”์‹œ์ง€ ๋ณธ๋ฌธ ์—”ํ‹ฐํ‹ฐ์— ์ˆ˜๋ฐ˜๋˜๋Š” ๊ฒฝ์šฐ์—๋งŒ ์ด ๋ฉ”ํƒ€ ๋ณ€์ˆ˜๋ฅผ ์„ค์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. CONTENT_LENGTH ๊ฐ’์€ ์„œ๋ฒ„๊ฐ€ transfer-codings or content-codings์„ ์ œ๊ฑฐํ•œ ํ›„ ๋ฉ”์‹œ์ง€ ๋ณธ๋ฌธ์˜ ๊ธธ์ด๋ฅผ ๋ฐ˜์˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

4.1.3 CONTENT_TYPE

์š”์ฒญ์— ๋ฉ”์‹œ์ง€ ๋ณธ๋ฌธ์ด ํฌํ•จ๋œ ๊ฒฝ์šฐ CONTENT_TYPE ๋ณ€์ˆ˜๋Š” ๋ฉ”์‹œ์ง€ ๋ณธ๋ฌธ์˜ ์ธํ„ฐ๋„ท ๋ฏธ๋””์–ด ์œ ํ˜•[6]์œผ๋กœ ์„ค์ •๋ฉ๋‹ˆ๋‹ค.
์œ ํ˜•, ํ•˜์œ„ ์œ ํ˜• ๋ฐ ๋งค๊ฐœ ๋ณ€์ˆ˜ ํŠน์„ฑ ์ด๋ฆ„์€ ๋Œ€์†Œ๋ฌธ์ž๋ฅผ ๊ตฌ๋ถ„ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋งค๊ฐœ ๋ณ€์ˆ˜ ๊ฐ’์€ ๋Œ€์†Œ๋ฌธ์ž๋ฅผ ๊ตฌ๋ถ„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฏธ๋””์–ด ์œ ํ˜•๊ณผ HTTP์—์„œ์˜ ๋ฏธ๋””์–ด ์‚ฌ์šฉ์€ HTTP/1.1 ๊ทœ๊ฒฉ์˜ ์„น์…˜ 3.7์— ์„ค๋ช…๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค [4].
์ด ๋ณ€์ˆ˜์—๋Š” ๊ธฐ๋ณธ๊ฐ’์ด ์—†์Šต๋‹ˆ๋‹ค. ์„ค์ • ํ•ด์ œ๋œ ๊ฒฝ์šฐ์—๋งŒ ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์ˆ˜์‹ ๋œ ๋ฐ์ดํ„ฐ์—์„œ ๋ฏธ๋””์–ด ์œ ํ˜•์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์œ ํ˜•์ด ์•Œ๋ ค์ง€์ง€ ์•Š์€ ๊ฒฝ์šฐ ์Šคํฌ๋ฆฝํŠธ๋Š” ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ/์˜ฅํ…Ÿ ์ŠคํŠธ๋ฆผ ์œ ํ˜•์„ ๊ฐ€์ •ํ•˜๊ฑฐ๋‚˜ ์˜ค๋ฅ˜์™€ ํ•จ๊ป˜ ์š”์ฒญ์„ ๊ฑฐ๋ถ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(์„น์…˜ 6.3.3 ์ฐธ์กฐ).
๊ฐ ๋ฏธ๋””์–ด ์œ ํ˜•์€ ์„ ํƒ์  ๋งค๊ฐœ ๋ณ€์ˆ˜ ๋ฐ ํ•„์ˆ˜ ๋งค๊ฐœ ๋ณ€์ˆ˜ ์ง‘ํ•ฉ์„ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์—๋Š” ๋ฉ”์‹œ์ง€ ๋ณธ๋ฌธ์— ๋Œ€ํ•œ ์ฝ”๋“œํ™”๋œ ๋ฌธ์ž ์ง‘ํ•ฉ์„ ์ •์˜ํ•˜๋Š” ๋Œ€์†Œ๋ฌธ์ž๋ฅผ ๊ตฌ๋ถ„ํ•˜์ง€ ์•Š๋Š” ๊ฐ’์„ ๊ฐ–๋Š” ๋ฌธ์ž ์ง‘ํ•ฉ ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ ํฌํ•จ๋  ์ˆ˜ ์žˆ๋‹ค. charset ๋งค๊ฐœ ๋ณ€์ˆ˜๊ฐ€ ์ƒ๋žต๋œ ๊ฒฝ์šฐ ๊ธฐ๋ณธ๊ฐ’์„ ๊ฐ€์žฅ ๋จผ์ € ์ ์šฉํ•  ๋‹ค์Œ ๊ทœ์น™ ์ค‘ ํ•˜๋‚˜์— ๋”ฐ๋ผ ํŒŒ์ƒํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
1. ์ผ๋ถ€ ๋ฏธ๋””์–ด ์œ ํ˜•์—๋Š” ์‹œ์Šคํ…œ ์ •์˜ ๊ธฐ๋ณธ ๋ฌธ์ž ์ง‘ํ•ฉ์ด ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
2. "ํ…์ŠคํŠธ" ์œ ํ˜•์˜ ๋ฏธ๋””์–ด ์œ ํ˜•์˜ ๊ธฐ๋ณธ๊ฐ’์€ ISO-8859-1 [4]์ž…๋‹ˆ๋‹ค.
3. ๋ฏธ๋””์–ด ์œ ํ˜• ๊ทœ๊ฒฉ์— ์ •์˜๋œ ๊ธฐ๋ณธ๊ฐ’์ž…๋‹ˆ๋‹ค.
4. ๊ธฐ๋ณธ๊ฐ’์€ US-ASCII์ž…๋‹ˆ๋‹ค.
HTTP Content-Type ํ•„๋“œ๊ฐ€ ํด๋ผ์ด์–ธํŠธ ์š”์ฒญ ํ—ค๋”์— ์žˆ๋Š” ๊ฒฝ์šฐ ์„œ๋ฒ„๋Š” ์ด ๋ฉ”ํƒ€ ๋ณ€์ˆ˜๋ฅผ ์„ค์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์„œ๋ฒ„๊ฐ€ ์ฒจ๋ถ€๋œ ์—”ํ‹ฐํ‹ฐ๊ฐ€ ์žˆ์ง€๋งŒ ๋‚ด์šฉ ์œ ํ˜• ๋จธ๋ฆฌ๊ธ€ ํ•„๋“œ๊ฐ€ ์—†๋Š” ์š”์ฒญ์„ ์ˆ˜์‹ ํ•˜๋Š” ๊ฒฝ์šฐ, ์˜ฌ๋ฐ”๋ฅธ ๋‚ด์šฉ ์œ ํ˜•์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๊ทธ๋ ‡์ง€ ์•Š์€ ๊ฒฝ์šฐ ์ด ๋ฉ”ํƒ€ ๋ณ€์ˆ˜๋ฅผ ์ƒ๋žตํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

4.1.4 GATEWAY_INTERFACE

Gateway_Interface ๋ณ€์ˆ˜๋Š” ์„œ๋ฒ„๊ฐ€ ์Šคํฌ๋ฆฝํŠธ์™€ ํ†ต์‹ ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•˜๋Š” CGI์˜ ๋ฐฉ์–ธ์œผ๋กœ ์„ค์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
์ฃผ์ˆ˜์™€ ๋ถ€์ˆ˜๋Š” ๋ณ„๋„์˜ ์ •์ˆ˜๋กœ ์ฒ˜๋ฆฌ๋˜๋ฏ€๋กœ ๊ฐ๊ฐ ํ•œ ์ž๋ฆฌ ์ˆ˜๋ณด๋‹ค ๋” ๋†’๊ฒŒ ์ฆ๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ CGI/2.4๋Š” CGI/2.13๋ณด๋‹ค ๋‚ฎ์€ ๋ฒ„์ „์ด๋‹ค. ์„ ํ–‰ 0์€ ์Šคํฌ๋ฆฝํŠธ์—์„œ ๋ฌด์‹œํ•ด์•ผ ํ•˜๋ฉฐ ์„œ๋ฒ„์—์„œ ์ƒ์„ฑํ•ด์„œ๋Š” ์•ˆ ๋ฉ๋‹ˆ๋‹ค.
์ด ๋ฌธ์„œ๋Š” CGI ์ธํ„ฐํŽ˜์ด์Šค์˜ 1.1 ๋ฒ„์ „์„ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค.

4.1.5 PATH_INFO

PATH_INFO ๋ณ€์ˆ˜๋Š” CGI ์Šคํฌ๋ฆฝํŠธ์—์„œ ํ•ด์„ํ•  ๊ฒฝ๋กœ๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค. CGI ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ๋ฐ˜ํ™˜ํ•  ๋ฆฌ์†Œ์Šค ๋˜๋Š” ํ•˜์œ„ ๋ฆฌ์†Œ์Šค๋ฅผ ์‹๋ณ„ํ•˜๊ณ  ์Šคํฌ๋ฆฝํŠธ ์ž์ฒด๋ฅผ ์‹๋ณ„ํ•˜๋Š” ๋ถ€๋ถ„ ๋’ค์— ์ด์–ด์ง€๋Š” URI ๊ฒฝ๋กœ ๊ณ„์ธต์—์„œ ํŒŒ์ƒ๋ฉ๋‹ˆ๋‹ค. URI ๊ฒฝ๋กœ์™€ ๋‹ฌ๋ฆฌ PATH_INFO๋Š” URL ์ธ์ฝ”๋”ฉ์ด ์•„๋‹ˆ๋ฏ€๋กœ ๊ฒฝ๋กœ ์„ธ๊ทธ๋จผํŠธ ๋งค๊ฐœ ๋ณ€์ˆ˜๋ฅผ ํฌํ•จํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. "/"์˜ PATH_INFO๋Š” ๋‹จ์ผ ๋ณด์ด๋“œ ๊ฒฝ๋กœ ์„ธ๊ทธ๋จผํŠธ๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.
์ด ๊ฐ’์€ ๋Œ€์†Œ๋ฌธ์ž๋ฅผ ๊ตฌ๋ถ„ํ•˜๋Š” ๊ฒƒ์œผ๋กœ ๊ฐ„์ฃผ๋˜๋ฉฐ ์„œ๋ฒ„๋Š” ์š”์ฒญ URI์— ํ‘œ์‹œ๋œ ๊ฒฝ๋กœ์˜ ๋Œ€์†Œ๋ฌธ์ž๋ฅผ ๋ณด์กดํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์„œ๋ฒ„๋Š” PATH_INFO์— ๋Œ€ํ•ด ํ—ˆ์šฉํ•˜๋Š” ๊ฐ’์— ์ œํ•œ ๋ฐ ์ œํ•œ์„ ๊ฐ€ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๋ถ€์ ํ•ฉํ•œ ๊ฐ’์ด ๋ฐœ๊ฒฌ๋˜๋ฉด ์˜ค๋ฅ˜์™€ ํ•จ๊ป˜ ์š”์ฒญ์„ ๊ฑฐ๋ถ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ธ์ฝ”๋”ฉ๋œ "/"๊ฐ€ PATH_INFO๋กœ ๋””์ฝ”๋”ฉ๋˜๋Š” ๋ชจ๋“  ์š”์ฒญ์„ ํฌํ•จํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ, ์ด๋Š” ์Šคํฌ๋ฆฝํŠธ์— ๋Œ€ํ•œ ์ •๋ณด ์†์‹ค์„ ๋‚˜ํƒ€๋‚ผ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ๊ฒฝ๋กœ์—์„œ US-ASCII๊ฐ€ ์•„๋‹Œ ๋ฌธ์ž์— ๋Œ€ํ•œ ์ฒ˜๋ฆฌ๋„ ์‹œ์Šคํ…œ ์ •์˜๋ฉ๋‹ˆ๋‹ค.
URL ์ธ์ฝ”๋”ฉ๋œ PATH_INFO ๋ฌธ์ž์—ด์€ ํ•ด๋‹น ๊ฒฝ๋กœ์˜ SCRIPT_NAME ๋ถ€๋ถ„์„ ๋”ฐ๋ฅด๋Š” Script-URI์˜ ์ถ”๊ฐ€ ๊ฒฝ๋กœ ๊ตฌ์„ฑ ์š”์†Œ(์„น์…˜ 3.3 ์ฐธ์กฐ)๋ฅผ ํ˜•์„ฑํ•ฉ๋‹ˆ๋‹ค.

4.1.6 PATH_TRANSLATED

4.1.7 QUERY_STRING

4.1.8 REMOTE_ADDR

4.1.9 REMOTE_HOST

4.1.10 REMOTE_IDENT

4.1.11 REMOTE_USER

4.1.12 REQUEST_METHOD

REQUEST_METHOD ๋ฉ”ํƒ€ ๋ณ€์ˆ˜๋Š” ์„น์…˜ 4.3์—์„œ ์„ค๋ช…ํ•œ ๋Œ€๋กœ ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•  ๋ฉ”์„œ๋“œ๋กœ ์„ค์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
์ด ๋ฉ”์„œ๋“œ๋Š” ๋Œ€์†Œ๋ฌธ์ž๋ฅผ ๊ตฌ๋ถ„ํ•ฉ๋‹ˆ๋‹ค. HTTP ๋ฐฉ๋ฒ•์€ HTTP/1.0 ๊ทœ๊ฒฉ[1]์˜ ์„น์…˜ 5.1.1๊ณผ HTTP/1.1 ๊ทœ๊ฒฉ[4]์˜ ์„น์…˜ 5.1.1์— ์„ค๋ช…๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

4.1.13 SCRIPT_NAME

4.1.14 SERVER_NAME

4.1.15 SERVER_PORT

4.1.16 SERVER_PROTOCOL

SERVER_PROTOCOL ๋ณ€์ˆ˜๋Š” ์ด CGI ์š”์ฒญ์— ์‚ฌ์šฉ ๋˜๋Š” ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ ํ”„๋กœํ† ์ฝœ์˜ ์ด๋ฆ„๊ณผ ๋ฒ„์ „์œผ๋กœ ์„ค์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ์„œ๋ฒ„๊ฐ€ ํด๋ผ์ด์–ธํŠธ์™€์˜ ํ†ต์‹ ์—์„œ ์‚ฌ์šฉํ•˜๋Š” ํ”„๋กœํ† ์ฝœ ๋ฒ„์ „๊ณผ ๋‹ค๋ฅผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
์—ฌ๊ธฐ์„œ 'protocol'์€ ์„œ๋ฒ„์™€ ์Šคํฌ๋ฆฝํŠธ('protocol-specific' ๊ธฐ๋Šฅ) ์‚ฌ์ด์— ์ „๋‹ฌ๋˜๋Š” ์ผ๋ถ€ ์ •๋ณด์˜ ๊ตฌ๋ฌธ์„ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค. ๋Œ€/์†Œ๋ฌธ์ž๋ฅผ ๊ตฌ๋ถ„ํ•˜์ง€ ์•Š์œผ๋ฉฐ ์ผ๋ฐ˜์ ์œผ๋กœ ๋Œ€/์†Œ๋ฌธ์ž๋ฅผ ๊ตฌ๋ถ„ํ•ฉ๋‹ˆ๋‹ค. ํ”„๋กœํ† ์ฝœ์€ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์„œ๋ฒ„์™€ ํ†ต์‹ ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•˜๋Š” ์ „์ฒด ์•ก์„ธ์Šค ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ์ •์˜ํ•˜๋Š” ์Šคํฌ๋ฆฝํŠธ URI์˜ ๊ตฌ์„ฑํ‘œ ๋ถ€๋ถ„๊ณผ ๋™์ผํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, "HTTP" ํ”„๋กœํ† ์ฝœ๋กœ ์Šคํฌ๋ฆฝํŠธ์— ๋„๋‹ฌํ•˜๋Š” ์š”์ฒญ์€ "https" ์ฒด๊ณ„๋ฅผ ์‚ฌ์šฉํ–ˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
์„œ๋ฒ„๊ฐ€ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” SERVER_Protocol์˜ ์ž˜ ์•Œ๋ ค์ง„ ๊ฐ’์€ "ํฌํ•จ๋จ"์ด๋ฉฐ, ์ด๋Š” ํ˜„์žฌ ๋ฌธ์„œ๊ฐ€ ํด๋ผ์ด์–ธํŠธ ์š”์ฒญ์˜ ์ง์ ‘์ ์ธ ๋Œ€์ƒ์ด ์•„๋‹Œ ๋ณตํ•ฉ ๋ฌธ์„œ์˜ ์ผ๋ถ€๋กœ ํฌํ•จ๋จ์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค. ์Šคํฌ๋ฆฝํŠธ๋Š” ์ด ์š”์ฒญ์„ HTTP/1.0 ์š”์ฒญ์œผ๋กœ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

4.1.17 SERVER_SOFTWARE

4.1.18 Protocol-Specific Meta-Variable

์„œ๋ฒ„๋Š” ์š”์ฒญ์— ๋Œ€ํ•œ ํ”„๋กœํ† ์ฝœ ๋ฐ ๊ตฌ์„ฑํ‘œ์™€ ๊ด€๋ จ๋œ ๋ฉ”ํƒ€ ๋ณ€์ˆ˜๋ฅผ ์„ค์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ํ”„๋กœํ† ์ฝœ๋ณ„ ๋ณ€์ˆ˜์˜ ํ•ด์„์€ SERVER_PROTOCOL์˜ ํ”„๋กœํ† ์ฝœ ๋ฒ„์ „์— ๋”ฐ๋ผ ๋‹ฌ๋ผ์ง‘๋‹ˆ๋‹ค. ๊ตฌ์„ฑํ‘œ๊ฐ€ ํ”„๋กœํ† ์ฝœ๊ณผ ๋™์ผํ•˜์ง€ ์•Š์€ ๊ฒฝ์šฐ, ์„œ๋ฒ„๋Š” ๊ตฌ์„ฑํ‘œ ์ด๋ฆ„์„ ๊ฐ€์ง„ ๋ฉ”ํƒ€ ๋ณ€์ˆ˜๋ฅผ NULL์ด ์•„๋‹Œ ๊ฐ’์œผ๋กœ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๋ณ€์ˆ˜์˜ ์กด์žฌ๋Š” ์š”์ฒญ์— ์˜ํ•ด ์‚ฌ์šฉ๋˜๋Š” ์ฒด๊ณ„๋ฅผ ์Šคํฌ๋ฆฝํŠธ์— ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.
์ด๋ฆ„์ด "HTTP_"๋กœ ์‹œ์ž‘ํ•˜๋Š” ๋ฉ”ํƒ€ ๋ณ€์ˆ˜์—๋Š” ์‚ฌ์šฉ๋œ ํ”„๋กœํ† ์ฝœ์ด HTTP์ธ ๊ฒฝ์šฐ ํด๋ผ์ด์–ธํŠธ ์š”์ฒญ ํ—ค๋” ํ•„๋“œ์—์„œ ์ฝ์€ ๊ฐ’์ด ํฌํ•จ๋ฉ๋‹ˆ๋‹ค. HTTP ํ—ค๋” ํ•„๋“œ ์ด๋ฆ„์€ ๋Œ€๋ฌธ์ž๋กœ ๋ณ€ํ™˜๋˜๊ณ  "-"๊ฐ€ ๋ชจ๋‘ "_"๋กœ ๋Œ€์ฒด๋˜๋ฉฐ ๋ฉ”ํƒ€ ๋ณ€์ˆ˜ ์ด๋ฆ„์„ ๋ถ€์—ฌํ•˜๊ธฐ ์œ„ํ•ด "HTTP_"๊ฐ€ ์•ž์— ์ถ”๊ฐ€๋ฉ๋‹ˆ๋‹ค. ํ—ค๋” ๋ฐ์ดํ„ฐ๋Š” ํด๋ผ์ด์–ธํŠธ์— ์˜ํ•ด ์ „์†ก๋œ ๋Œ€๋กœ ์ œ์‹œ๋˜๊ฑฐ๋‚˜ ์˜๋ฏธ๋ก ์„ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š๋Š” ๋ฐฉ์‹์œผ๋กœ ๋‹ค์‹œ ์ž‘์„ฑ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋™์ผํ•œ ํ•„๋“œ ์ด๋ฆ„์„ ๊ฐ€์ง„ ์—ฌ๋Ÿฌ ํ—ค๋” ํ•„๋“œ๊ฐ€ ์ˆ˜์‹ ๋œ ๊ฒฝ์šฐ, ์„œ๋ฒ„๋Š” ๋™์ผํ•œ ์˜๋ฏธ๋ฅผ ๊ฐ€์ง„ ๋‹จ์ผ ๊ฐ’์œผ๋กœ ๋‹ค์‹œ ์ž‘์„ฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์—ฌ๋Ÿฌ ์ค„์— ๊ฑธ์ณ ์žˆ๋Š” ํ—ค๋” ํ•„๋“œ๋Š” ํ•œ ์ค„์— ๋ณ‘ํ•ฉ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ํ•„์š”ํ•œ ๊ฒฝ์šฐ ์„œ๋ฒ„๋Š” CGI ๋ฉ”ํƒ€ ๋ณ€์ˆ˜์— ์ ํ•ฉํ•˜๋„๋ก ๋ฐ์ดํ„ฐ์˜ ํ‘œํ˜„(์˜ˆ: ๋ฌธ์ž ์ง‘ํ•ฉ)์„ ๋ณ€๊ฒฝํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
์„œ๋ฒ„๊ฐ€ ์ˆ˜์‹ ํ•˜๋Š” ๋ชจ๋“  ํ—ค๋” ํ•„๋“œ์— ๋Œ€ํ•ด ๋ฉ”ํƒ€ ๋ณ€์ˆ˜๋ฅผ ์ž‘์„ฑํ•  ํ•„์š”๋Š” ์—†์Šต๋‹ˆ๋‹ค. ํŠนํžˆ ์ธ์ฆ ์ •๋ณด๋ฅผ ์ „๋‹ฌํ•˜๋Š” ํ—ค๋” ํ•„๋“œ(์˜ˆ: 'Authorization') ๋˜๋Š” 'Content-Length' ๋ฐ 'Content-Type'๊ณผ ๊ฐ™์€ ๋‹ค๋ฅธ ๋ณ€์ˆ˜์˜ ์Šคํฌ๋ฆฝํŠธ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ํ—ค๋” ํ•„๋“œ๋Š” ๋ชจ๋‘ ์ œ๊ฑฐํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์„œ๋ฒ„๋Š” '์—ฐ๊ฒฐ'๊ณผ ๊ฐ™์€ ํด๋ผ์ด์–ธํŠธ ์ธก ํ†ต์‹  ๋ฌธ์ œ์™€๋งŒ ๊ด€๋ จ๋œ ํ—ค๋” ํ•„๋“œ๋ฅผ ์ œ๊ฑฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

4.2 Request Message-Body

์š”์ฒญ ๋ฐ์ดํ„ฐ๋Š” ์‹œ์Šคํ…œ ์ •์˜ ๋ฐฉ์‹์œผ๋กœ ์Šคํฌ๋ฆฝํŠธ์— ์•ก์„ธ์Šค๋ฉ๋‹ˆ๋‹ค. ๋‹ฌ๋ฆฌ ์ •์˜๋˜์ง€ ์•Š์€ ํ•œ 'ํ‘œ์ค€ ์ž…๋ ฅ' ํŒŒ์ผ ์„ค๋ช…์ž๋‚˜ ํŒŒ์ผ ํ•ธ๋“ค์„ ์ฝ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
CONTENT_LENGTH๊ฐ€ NULL์ด ์•„๋‹Œ ๊ฒฝ์šฐ ์š”์ฒญ ๋ณธ๋ฌธ์ด ์š”์ฒญ๊ณผ ํ•จ๊ป˜ ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค. ์„œ๋ฒ„๋Š” ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์ฝ์„ ์ˆ˜ ์žˆ๋Š” ๋ฐ”์ดํŠธ ์ˆ˜ ์ด์ƒ์„ ์ œ๊ณตํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์„œ๋ฒ„๋Š” CONTENT_LENGTH ๋ฐ”์ดํŠธ๋ฅผ ์ฝ์€ ํ›„ ํŒŒ์ผ ์ข…๋ฃŒ ์กฐ๊ฑด์„ ์‹ ํ˜ธ๋กœ ํ‘œ์‹œํ•˜๊ฑฐ๋‚˜ ํ™•์žฅ์ž ๋ฐ์ดํ„ฐ๋ฅผ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์Šคํฌ๋ฆฝํŠธ๋Š” ๋” ๋งŽ์€ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋”๋ผ๋„ CONTENT_LENGTH ๋ฐ”์ดํŠธ ์ด์ƒ์„ ์ฝ์œผ๋ ค๊ณ  ์‹œ๋„ํ•ด์„œ๋Š” ์•ˆ ๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์„ ์˜๋ฌด๋Š” ์—†์Šต๋‹ˆ๋‹ค.
NPH(Non-parsed Header) ์Šคํฌ๋ฆฝํŠธ(์„น์…˜ 5)์˜ ๊ฒฝ์šฐ ์„œ๋ฒ„๋Š” ์Šคํฌ๋ฆฝํŠธ์— ์ œ๊ณต๋œ ๋ฐ์ดํ„ฐ๊ฐ€ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ œ๊ณตํ•œ ๋Œ€๋กœ ์ •ํ™•ํ•˜๊ฒŒ ์„œ๋ฒ„์— ์˜ํ•ด ๋ณ€๊ฒฝ๋˜์ง€ ์•Š๋„๋ก ์‹œ๋„ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
์ „์†ก ์ธ์ฝ”๋”ฉ์€ ์š”์ฒญ ๋ณธ๋ฌธ์—์„œ ์ง€์›๋˜์ง€ ์•Š์œผ๋ฏ€๋กœ ์„œ๋ฒ„๋Š” ๋ฉ”์‹œ์ง€ ๋ณธ๋ฌธ์—์„œ ์ด๋Ÿฌํ•œ ์ธ์ฝ”๋”ฉ์„ ์ œ๊ฑฐํ•˜๊ณ  content_length๋ฅผ ๋‹ค์‹œ ๊ณ„์‚ฐํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด ์ž‘์—…์ด ๊ฐ€๋Šฅํ•˜์ง€ ์•Š์œผ๋ฉด(์˜ˆ: ๋ฒ„ํผ๋ง์ด ํฌ๊ธฐ ๋•Œ๋ฌธ์—) ์„œ๋ฒ„๋Š” ํด๋ผ์ด์–ธํŠธ ์š”์ฒญ์„ ๊ฑฐ๋ถ€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ ๋ฉ”์‹œ์ง€ ๋ณธ๋ฌธ์—์„œ ๋‚ด์šฉ ์ฝ”๋”ฉ์„ ์ œ๊ฑฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

4.3 Request Method

REQUEST_METHOD ๋ฉ”ํƒ€ ๋ณ€์ˆ˜์— ์ œ๊ณต๋œ Request Method๋Š” ์‘๋‹ต์„ ์ƒ์„ฑํ•  ๋•Œ ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์ ์šฉํ•  ์ฒ˜๋ฆฌ ๋ฐฉ๋ฒ•์„ ์‹๋ณ„ํ•ฉ๋‹ˆ๋‹ค. ์Šคํฌ๋ฆฝํŠธ ์ž‘์„ฑ์ž๋Š” ํŠน์ • ์‘์šฉํ”„๋กœ๊ทธ๋žจ์— ๊ฐ€์žฅ ์ ํ•ฉํ•œ ๋ฐฉ๋ฒ•์„ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ๋ฉ”์„œ๋“œ๊ฐ€ ์ง€์›๋˜์ง€ ์•Š๋Š” ์š”์ฒญ์„ ์ˆ˜์‹ ํ•˜๋Š” ๊ฒฝ์šฐ ์˜ค๋ฅ˜์™€ ํ•จ๊ป˜ ์š”์ฒญ์„ ๊ฑฐ๋ถ€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค(์„น์…˜ 6.3.3 ์ฐธ์กฐ).

4.3.1 GET

GET ๋ฉ”์„œ๋“œ๋Š” ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ๋ฉ”ํƒ€ ๋ณ€์ˆ˜ ๊ฐ’์„ ๊ธฐ๋ฐ˜์œผ๋กœ ๋ฌธ์„œ๋ฅผ ์ƒ์„ฑํ•ด์•ผ ํ•จ์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค. ๊ด€๋ก€์— ๋”ฐ๋ผ GET ๋ฐฉ๋ฒ•์€ '์•ˆ์ „'ํ•˜๊ณ  '๋™๋“ฑ์„ฑ'์ด๋ฉฐ ๋ฌธ์„œ ์ƒ์„ฑ ์ด์™ธ์˜ ์กฐ์น˜๋ฅผ ์ทจํ•ด์„œ๋Š” ์•ˆ ๋œ๋‹ค.
GET ๋ฐฉ๋ฒ•์˜ ์˜๋ฏธ๋Š” ํ”„๋กœํ† ์ฝœ๋ณ„ ๋ฉ”ํƒ€ ๋ณ€์ˆ˜์— ์˜ํ•ด ์ˆ˜์ • ๋ฐ ์ •์ œ๋  ์ˆ˜ ์žˆ๋‹ค.

4.3.2 POST

POST ๋ฉ”์„œ๋“œ๋Š” ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์š”์ฒญํ•˜์—ฌ ์ฒ˜๋ฆฌ๋ฅผ ์ˆ˜ํ–‰ํ•˜๊ณ  ์š”์ฒญ ๋ฉ”์‹œ์ง€ ๋ณธ๋ฌธ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๋ฌธ์„œ๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์ธ ์šฉ๋„๋Š” HTML [18]์˜ ์–‘์‹ ์ œ์ถœ์ด๋ฉฐ, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ๋ณ€๊ฒฝ๊ณผ ๊ฐ™์€ ์˜๊ตฌ์ ์ธ ์˜ํ–ฅ์„ ๋ฏธ์น˜๋Š” ์Šคํฌ๋ฆฝํŠธ์— ์˜ํ•œ ์ฒ˜๋ฆฌ๋ฅผ ์‹œ์ž‘ํ•˜๋ ค๋Š” ์˜๋„์ด๋‹ค.
์Šคํฌ๋ฆฝํŠธ๋Š” ์ฒจ๋ถ€๋œ ๋ฉ”์‹œ์ง€ ๋ณธ๋ฌธ์„ ์ฝ๊ธฐ ์ „์— content_LENGTH ๋ณ€์ˆ˜ ๊ฐ’์„ ํ™•์ธํ•˜๊ณ  content_TYPE ๊ฐ’์„ ํ™•์ธํ•œ ํ›„ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

4.3.3 HEAD

4.3.4 Protocol-Specific Methods

์Šคํฌ๋ฆฝํŠธ๋Š” HTTP/1.1 PUT ๋ฐ Delete์™€ ๊ฐ™์€ ํ”„๋กœํ† ์ฝœ๋ณ„ ๋ฉ”์„œ๋“œ๋ฅผ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
์„œ๋ฒ„๋Š” ์ผ๋ถ€ ๋ฉ”์„œ๋“œ๊ฐ€ ์Šคํฌ๋ฆฝํŠธ์— ์ ํ•ฉํ•˜์ง€ ์•Š๊ฑฐ๋‚˜ ํ—ˆ์šฉ๋˜์ง€ ์•Š๋Š”๋‹ค๊ณ  ํŒ๋‹จํ•˜์—ฌ ๋ฉ”์„œ๋“œ ์ž์ฒด๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ฑฐ๋‚˜ ์˜ค๋ฅ˜๋ฅผ ํด๋ผ์ด์–ธํŠธ์— ๋ฐ˜ํ™˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
The server MAY decide that some methods are not appropriate or permitted for a script, and may handle the methods itself or return an error to the client.

4.4 The Script Command Line

์ผ๋ถ€ ์‹œ์Šคํ…œ์€ CGI ์Šคํฌ๋ฆฝํŠธ์— ๋ฌธ์ž์—ด ๋ฐฐ์—ด์„ ์ œ๊ณตํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.
์ด๊ฒƒ์€ ์ธ์ฝ”๋”ฉ๋˜์ง€ ์•Š์€ "=" ๋ฌธ์ž๋ฅผ ํฌํ•จํ•˜์ง€ ์•Š๋Š” URI ์ฟผ๋ฆฌ ๋ฌธ์ž์—ด๊ณผ ํ•จ๊ป˜ 'GET' ๋˜๋Š” 'HEAD' ์š”์ฒญ์œผ๋กœ ์‹๋ณ„๋˜๋Š” ์ธ๋ฑ์‹ฑ๋œ HTTP ์ฟผ๋ฆฌ์˜ ๊ฒฝ์šฐ์—๋งŒ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.
์ด๋Ÿฌํ•œ ์š”์ฒญ์˜ ๊ฒฝ์šฐ ์„œ๋ฒ„๋Š” ์ฟผ๋ฆฌ ๋ฌธ์ž์—ด์„ ๊ฒ€์ƒ‰ ๋ฌธ์ž์—ด๋กœ ์ฒ˜๋ฆฌํ•˜๊ณ  ์ด๋ž˜์˜ ๊ทœ์น™์„ ์‚ฌ์šฉํ•˜์—ฌ ๋‹จ์–ด๋กœ ๊ตฌ๋ฌธ ๋ถ„์„ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
ํŒŒ์‹ฑ ํ›„ ๊ฐ ๊ฒ€์ƒ‰์–ด๋Š” URL๋กœ ๋””์ฝ”๋”ฉ๋˜๊ณ  ์„ ํƒ์ ์œผ๋กœ ์‹œ์Šคํ…œ ์ •์˜ ๋ฐฉ์‹์œผ๋กœ ์ธ์ฝ”๋”ฉ๋œ ๋‹ค์Œ ๋ช…๋ นํ–‰ ์ธ์ˆ˜ ๋ชฉ๋ก์— ์ถ”๊ฐ€๋ฉ๋‹ˆ๋‹ค.
์„œ๋ฒ„๊ฐ€ ์ธ์ˆ˜ ๋ชฉ๋ก์˜ ์ผ๋ถ€๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ, ์„œ๋ฒ„๋Š” command line info๋ฅผ ์ƒ์„ฑํ•˜์ง€ ์•Š์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ์ธ์ˆ˜์˜ ์ˆ˜๊ฐ€ ์šด์˜ ์ฒด์ œ ๋˜๋Š” ์„œ๋ฒ„ ์ œํ•œ๋ณด๋‹ค ํฌ๊ฑฐ๋‚˜ ๋‹จ์–ด ์ค‘ ํ•˜๋‚˜๊ฐ€ ์ธ์ˆ˜๋กœ ํ‘œํ˜„๋˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
์Šคํฌ๋ฆฝํŠธ๋Š” ์ฟผ๋ฆฌ_STRING ๊ฐ’์— ์ธ์ฝ”๋”ฉ๋˜์ง€ ์•Š์€ "=" ๋ฌธ์ž๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ๋Š”์ง€ ํ™•์ธํ•ด์•ผ ํ•˜๋ฉฐ ์ธ์ฝ”๋”ฉ๋˜์ง€ ์•Š์€ ๊ฒฝ์šฐ ๋ช…๋ น์ค„ ์ธ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์•ˆ ๋ฉ๋‹ˆ๋‹ค.

5. NPH Scripts โ† ์ด๋ถ€๋ถ„์€ ์•ˆํ•ด๋„ ๋ ๊ฒƒ๊ฐ™โ€ฆ?

5.1 ์ •์˜

์„œ๋ฒ„๋Š” NPH(Non-Parsed Header) ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ง€์›ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ์Šคํฌ๋ฆฝํŠธ๋Š” ์„œ๋ฒ„๊ฐ€ ์‘๋‹ต ์ฒ˜๋ฆฌ์— ๋Œ€ํ•œ ๋ชจ๋“  ์ฑ…์ž„์„ ๋– ๋„˜๊ธฐ๋Š” ์Šคํฌ๋ฆฝํŠธ์ž…๋‹ˆ๋‹ค.
์ด ๊ทœ๊ฒฉ์€ ์ถœ๋ ฅ ๋ฐ์ดํ„ฐ๋งŒ์„ ๊ธฐ์ค€์œผ๋กœ NPH ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‹๋ณ„ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ์ œ๊ณตํ•˜์ง€ ์•Š๋Š”๋‹ค. ๋”ฐ๋ผ์„œ ๊ด€๋ก€์ƒ ์–ด๋–ค ์Šคํฌ๋ฆฝํŠธ๋„ ์˜ค์ง ํ•œ ๊ฐ€์ง€ ์œ ํ˜•(NPH ๋˜๋Š” CGI)์˜ ์ถœ๋ ฅ๋งŒ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์Šคํฌ๋ฆฝํŠธ ์ž์ฒด๋Š” 'NPH ์Šคํฌ๋ฆฝํŠธ'๋กœ ์„ค๋ช…๋œ๋‹ค. NPH๋ฅผ ์ง€์›ํ•˜๋Š” ์„œ๋ฒ„๋Š” ์Šคํฌ๋ฆฝํŠธ ์ด๋ฆ„์ด๋‚˜ ์œ„์น˜์— ๋”ฐ๋ผ NPH ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‹๋ณ„ํ•˜๊ธฐ ์œ„ํ•œ ๊ตฌํ˜„ ์ •์˜ ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ์ œ๊ณตํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

5.2 NPH Response

์Šคํฌ๋ฆฝํŠธ์—๋Š” ์„œ๋ฒ„ ๋˜๋Š” ํด๋ผ์ด์–ธํŠธ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค์‹œ ๋ณด๋‚ด๋Š” ์‹œ์Šคํ…œ ์ •์˜ ๋ฐฉ๋ฒ•์ด ์žˆ์–ด์•ผ ํ•˜๋ฉฐ, ์Šคํฌ๋ฆฝํŠธ๋Š” ํ•ญ์ƒ ์ผ๋ถ€ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ˜ํ™˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋‹ฌ๋ฆฌ ์ •์˜๋˜์ง€ ์•Š๋Š” ํ•œ ์ด๋Š” ๊ธฐ์กด์˜ CGI ์Šคํฌ๋ฆฝํŠธ์™€ ๋™์ผํ•ฉ๋‹ˆ๋‹ค.
ํ˜„์žฌ NPH ์Šคํฌ๋ฆฝํŠธ๋Š” HTTP ํด๋ผ์ด์–ธํŠธ ์š”์ฒญ์— ๋Œ€ํ•ด์„œ๋งŒ ์ •์˜๋ฉ๋‹ˆ๋‹ค. (HTTP) NPH ์Šคํฌ๋ฆฝํŠธ๋Š” HTTP ์‚ฌ์–‘ [1], [4]์˜ ์„น์…˜ 6์— ์„ค๋ช…๋œ ์ „์ฒด HTTP ์‘๋‹ต ๋ฉ”์‹œ์ง€๋ฅผ ๋ฐ˜ํ™˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์Šคํฌ๋ฆฝํŠธ๋Š” SERVER_PROTOCOL ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์‘๋‹ต์˜ ์ ์ ˆํ•œ ํ˜•์‹์„ ๊ฒฐ์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ ํŠน์ • ํ”„๋กœํ† ์ฝœ ๋ช…์„ธ์„œ์— ์˜ํ•ด ์š”๊ตฌ๋  ์ˆ˜ ์žˆ๋Š” ์ผ๋ฐ˜์ ์ธ ๋˜๋Š” ํ”„๋กœํ† ์ฝœ ๊ณ ์œ ์˜ ๋ฉ”ํƒ€ ๋ณ€์ˆ˜๋ฅผ ๋ฐ˜๋“œ์‹œ ๊ณ ๋ คํ•ด์•ผ ํ•œ๋‹ค.
์„œ๋ฒ„๋Š” ์Šคํฌ๋ฆฝํŠธ ์ถœ๋ ฅ์ด ์ˆ˜์ •๋˜์ง€ ์•Š์€ ์ƒํƒœ๋กœ ํด๋ผ์ด์–ธํŠธ์— ์ „์†ก๋˜๋„๋ก ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ํ—ค๋” ํ•„๋“œ์— ์˜ฌ๋ฐ”๋ฅธ ๋ฌธ์ž ์ง‘ํ•ฉ(HTTP์˜ ๊ฒฝ์šฐ US-ASCII [9] ๋ฐ ISO 8859-1 [10])์„ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์„œ๋ฒ„๋Š” ์ตœ์†Œํ•œ์˜ ๋‚ด๋ถ€ ๋ฒ„ํผ๋ง๊ณผ ์ „์†ก ๊ฐ€์‹œ์  ๋ฒ„ํผ๋ง ์—†์ด ์Šคํฌ๋ฆฝํŠธ ์ถœ๋ ฅ์ด ํด๋ผ์ด์–ธํŠธ๋กœ ์ง์ ‘ ์ „์†ก๋˜๋„๋ก ์‹œ๋„ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
๊ตฌํ˜„์—์„œ ๋‹ฌ๋ฆฌ ์ •์˜๋˜์ง€ ์•Š๋Š” ํ•œ ์Šคํฌ๋ฆฝํŠธ๋Š” ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋™์ผํ•œ ์—ฐ๊ฒฐ์„ ํ†ตํ•ด ์ถ”๊ฐ€ ์š”์ฒญ์„ ๋ณด๋‚ผ ์ˆ˜ ์žˆ์Œ์„ ์‘๋‹ต์— ๋‚˜ํƒ€๋‚ด์ง€ ์•Š์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค.

6. CGI Response

6.1 Response Handling

์Šคํฌ๋ฆฝํŠธ๋Š” ํ•ญ์ƒ ๋น„์–ด ์žˆ์ง€ ์•Š์€ ์‘๋‹ต์„ ์ œ๊ณตํ•ด์•ผ ํ•˜๋ฏ€๋กœ ์ด ๋ฐ์ดํ„ฐ๋ฅผ ์„œ๋ฒ„๋กœ ๋‹ค์‹œ ๋ณด๋‚ด๋Š” ์‹œ์Šคํ…œ ์ •์˜ ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹ฌ๋ฆฌ ์ •์˜๋˜์ง€ ์•Š๋Š” ํ•œ, ์ด๋Š” 'ํ‘œ์ค€ ์ถœ๋ ฅ' ํŒŒ์ผ ๋””์Šคํฌ๋ฆฝํ„ฐ๋ฅผ ํ†ตํ•ด ์ด๋ฃจ์–ด์ง‘๋‹ˆ๋‹ค.
์Šคํฌ๋ฆฝํŠธ๋Š” ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๊ณ  ํ•ด๋‹น ์‘๋‹ต์„ ์ค€๋น„ํ•  ๋•Œ REQUEST_Method ๋ณ€์ˆ˜๋ฅผ ํ™•์ธํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
์„œ๋ฒ„๋Š” ์Šคํฌ๋ฆฝํŠธ๋กœ๋ถ€ํ„ฐ ๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜์‹ ํ•ด์•ผ ํ•˜๋Š” timeout ๊ธฐ๊ฐ„์„ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค. ์„œ๋ฒ„ ๊ตฌํ˜„์ด timeout๋ฅผ ์ •์˜ํ•˜๊ณ  timeout ๊ธฐ๊ฐ„ ๋‚ด์— ์Šคํฌ๋ฆฝํŠธ๋กœ๋ถ€ํ„ฐ ๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜์‹ ํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ, ์„œ๋ฒ„๋Š” ์Šคํฌ๋ฆฝํŠธ ํ”„๋กœ์„ธ์Šค๋ฅผ ์ข…๋ฃŒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

6.2 Response Type

์‘๋‹ต์€ ๋ฉ”์‹œ์ง€ ํ—ค๋”์™€ ๋ฉ”์‹œ์ง€ ๋ณธ๋ฌธ์œผ๋กœ ๊ตฌ์„ฑ๋˜๋ฉฐ, ๋นˆ ์ค„๋กœ ๊ตฌ๋ถ„๋ฉ๋‹ˆ๋‹ค. ๋ฉ”์‹œ์ง€ ๋จธ๋ฆฌ๊ธ€์— ํ•˜๋‚˜ ์ด์ƒ์˜ ๋จธ๋ฆฌ๊ธ€ ํ•„๋“œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ณธ๋ฌธ์ด NULL์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
์Šคํฌ๋ฆฝํŠธ๋Š” ๋ฌธ์„œ ์‘๋‹ต, ๋กœ์ปฌ ๋ฆฌ๋””๋ ‰์…˜ ์‘๋‹ต ๋˜๋Š” ํด๋ผ์ด์–ธํŠธ ๋ฆฌ๋””๋ ‰์…˜(์„ ํƒ์‚ฌํ•ญ ๋ฌธ์„œ ํฌํ•จ) ์‘๋‹ต ์ค‘ ํ•˜๋‚˜๋ฅผ ๋ฐ˜ํ™˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์•„๋ž˜์˜ ์‘๋‹ต ์ •์˜์—์„œ ์‘๋‹ต์˜ ํ—ค๋” ํ•„๋“œ ์ˆœ์„œ๋Š” ์ค‘์š”ํ•˜์ง€ ์•Š๋‹ค(BNF์—์„œ ๋‚˜ํƒ€๋‚˜์ง€๋งŒ). ํ—ค๋” ํ•„๋“œ๋Š” ์„น์…˜ 6.3์— ์ •์˜๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

6.2.1 Document Response

CGI ์Šคํฌ๋ฆฝํŠธ๋Š” ์‘๋‹ต์˜ ์„ฑ๊ณต ์ƒํƒœ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ์„ ํƒ์  ์˜ค๋ฅ˜ ์ฝ”๋“œ์™€ ํ•จ๊ป˜ ๋ฌธ์„œ ์‘๋‹ต์œผ๋กœ ์‚ฌ์šฉ์ž์—๊ฒŒ ๋ฌธ์„œ๋ฅผ ๋ฐ˜ํ™˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
์Šคํฌ๋ฆฝํŠธ๋Š” Content-Type ํ—ค๋” ํ•„๋“œ๋ฅผ ๋ฐ˜ํ™˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ƒํƒœ ํ—ค๋” ํ•„๋“œ๋Š” ์„ ํƒ ์‚ฌํ•ญ์ด๋ฉฐ, ์ƒ๋žต๋œ ๊ฒฝ์šฐ status 200 'OK'์œผ๋กœ ๊ฐ„์ฃผ๋ฉ๋‹ˆ๋‹ค. ์„œ๋ฒ„๋Š” ํด๋ผ์ด์–ธํŠธ์— ๋Œ€ํ•œ ์‘๋‹ต์ด ์‘๋‹ต ํ”„๋กœํ† ์ฝœ ๋ฒ„์ „์„ ์ค€์ˆ˜ํ•˜๋Š”์ง€ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด ์Šคํฌ๋ฆฝํŠธ์˜ ์ถœ๋ ฅ์„ ์ ์ ˆํ•˜๊ฒŒ ์ˆ˜์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

6.2.2 Local Redirect Response

CGI ์Šคํฌ๋ฆฝํŠธ๋Š” ์œ„์น˜ ํ—ค๋” ํ•„๋“œ์˜ ๋กœ์ปฌ ๋ฆฌ์†Œ์Šค์— ๋Œ€ํ•œ URI ๊ฒฝ๋กœ ๋ฐ ์ฟผ๋ฆฌ ๋ฌธ์ž์—ด('local-pathquery')์„ ๋ฐ˜ํ™˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ง€์ •๋œ ๊ฒฝ๋กœ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์š”์ฒญ์„ ์žฌ์ฒ˜๋ฆฌํ•ด์•ผ ํ•จ์„ ์„œ๋ฒ„์— ์•Œ๋ฆฝ๋‹ˆ๋‹ค.
local-redir-response = local-Location NL
์Šคํฌ๋ฆฝํŠธ๋Š” ๋‹ค๋ฅธ ํ—ค๋” ํ•„๋“œ๋‚˜ ๋ฉ”์‹œ์ง€ ๋ณธ๋ฌธ์„ ๋ฐ˜ํ™˜ํ•ด์„œ๋Š” ์•ˆ ๋˜๋ฉฐ, ์„œ๋ฒ„๋Š” URL์ด ํฌํ•จ๋œ ์š”์ฒญ์— ๋Œ€ํ•œ ์‘๋‹ต์œผ๋กœ ์ƒ์„ฑํ•œ ์‘๋‹ต์„ ์ƒ์„ฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
scheme "://" server-name ":" server-port local-pathquery

6.2.3 Client Redirect Response

CGI ์Šคํฌ๋ฆฝํŠธ๋Š” Location ํ—ค๋” ํ•„๋“œ์— ์ ˆ๋Œ€ URI ๊ฒฝ๋กœ๋ฅผ ๋ฐ˜ํ™˜ํ•˜์—ฌ ์ง€์ •๋œ URI๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์š”์ฒญ์„ ์žฌ์ฒ˜๋ฆฌํ•ด์•ผ ํ•จ์„ ํด๋ผ์ด์–ธํŠธ์— ์•Œ๋ฆด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
client-redir-response = client-Location *extension-field NL
์Šคํฌ๋ฆฝํŠธ๋Š” ์„œ๋ฒ„ ์ •์˜ CGI ํ™•์žฅ ํ•„๋“œ๋ฅผ ์ œ์™ธํ•˜๊ณ  ๋‹ค๋ฅธ ํ—ค๋” ํ•„๋“œ๋ฅผ ์ œ๊ณตํ•ด์„œ๋Š” ์•ˆ ๋ฉ๋‹ˆ๋‹ค. HTTP ํด๋ผ์ด์–ธํŠธ ์š”์ฒญ์˜ ๊ฒฝ์šฐ, ์„œ๋ฒ„๋Š” 302 'Found' HTTP ์‘๋‹ต ๋ฉ”์‹œ์ง€๋ฅผ ์ƒ์„ฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

6.2.4 Client Redirect Response with Document

CGI ์Šคํฌ๋ฆฝํŠธ๋Š” ์ฒจ๋ถ€๋œ ๋ฌธ์„œ์™€ ํ•จ๊ป˜ ์œ„์น˜ ํ—ค๋” ํ•„๋“œ์— ์ ˆ๋Œ€ URI ๊ฒฝ๋กœ๋ฅผ ๋ฐ˜ํ™˜ํ•˜์—ฌ ์ง€์ •๋œ URI๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์š”์ฒญ์„ ์žฌ์ฒ˜๋ฆฌํ•ด์•ผ ํ•จ์„ ํด๋ผ์ด์–ธํŠธ์— ์•Œ๋ฆด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
์ƒํƒœ ํ—ค๋” ํ•„๋“œ๋Š” ๋ฐ˜๋“œ์‹œ ์ œ๊ณต๋˜์–ด์•ผ ํ•˜๋ฉฐ ์ƒํƒœ ๊ฐ’ 302 'Found'๋ฅผ ํฌํ•จํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ํ™•์žฅ ์ฝ”๋“œ, ์ฆ‰ ํด๋ผ์ด์–ธํŠธ ๋ฆฌ๋””๋ ‰์…˜์„ ์˜๋ฏธํ•˜๋Š” ๋‹ค๋ฅธ ์œ ํšจํ•œ ์ƒํƒœ ์ฝ”๋“œ๋ฅผ ํฌํ•จํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์„œ๋ฒ„๋Š” ํด๋ผ์ด์–ธํŠธ์— ๋Œ€ํ•œ ์‘๋‹ต์ด ์‘๋‹ต ํ”„๋กœํ† ์ฝœ ๋ฒ„์ „์„ ์ค€์ˆ˜ํ•˜๋Š”์ง€ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด ์Šคํฌ๋ฆฝํŠธ์˜ ์ถœ๋ ฅ์„ ์ ์ ˆํ•˜๊ฒŒ ์ˆ˜์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

6.3 Response Header Fields

์‘๋‹ต ํ—ค๋” ํ•„๋“œ๋Š” ์„œ๋ฒ„๊ฐ€ ํ•ด์„ํ•  CGI ๋˜๋Š” ํ™•์žฅ ํ—ค๋” ํ•„๋“œ์ด๊ฑฐ๋‚˜ ํด๋ผ์ด์–ธํŠธ์— ๋ฐ˜ํ™˜๋˜๋Š” ์‘๋‹ต์— ํฌํ•จ๋  ํ”„๋กœํ† ์ฝœ๋ณ„ ํ—ค๋” ํ•„๋“œ์ž…๋‹ˆ๋‹ค. ํ•˜๋‚˜ ์ด์ƒ์˜ CGI ํ•„๋“œ๋ฅผ ์ œ๊ณตํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ฐ CGI ํ•„๋“œ๋Š” ์‘๋‹ต์— ๋‘ ๋ฒˆ ์ด์ƒ ๋‚˜ํƒ€๋‚˜์ง€ ์•Š์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์‘๋‹ต ํ—ค๋” ํ•„๋“œ์—๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ตฌ๋ฌธ์ด ์žˆ์Šต๋‹ˆ๋‹ค.
ํ•„๋“œ ์ด๋ฆ„์€ ๋Œ€์†Œ๋ฌธ์ž๋ฅผ ๊ตฌ๋ถ„ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. NULL ํ•„๋“œ ๊ฐ’์€ ์ „์†ก๋˜์ง€ ์•Š๋Š” ํ•„๋“œ์™€ ๋™์ผํ•ฉ๋‹ˆ๋‹ค. CGI-Response์˜ ๊ฐ ํ—ค๋” ํ•„๋“œ๋Š” ํ•œ ์ค„์— ์ง€์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. CGI/1.1์€ ์—ฐ์† ๋ผ์ธ์„ ์ง€์›ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ณต๋ฐฑ์€ ":"์™€ ํ•„๋“œ ๊ฐ’ ์‚ฌ์ด(ํ•„๋“œ ์ด๋ฆ„๊ณผ ":" ์‚ฌ์ด๋Š” ์•„๋‹˜)์™€ ํ•„๋“œ ๊ฐ’์˜ ํ† ํฐ ์‚ฌ์ด์—์„œ๋„ ํ—ˆ์šฉ๋ฉ๋‹ˆ๋‹ค.

6.3.1 Content-Type

๋‚ด์šฉ ์œ ํ˜• ์‘๋‹ต ํ•„๋“œ๋Š” ์—”ํ‹ฐํ‹ฐ ๋ณธ๋ฌธ์˜ ์ธํ„ฐ๋„ท ๋ฏธ๋””์–ด ์œ ํ˜• [6]์„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.
์—”ํ‹ฐํ‹ฐ ๋ณธ๋ฌธ์ด ๋ฐ˜ํ™˜๋˜๋Š” ๊ฒฝ์šฐ ์Šคํฌ๋ฆฝํŠธ๋Š” ์‘๋‹ต์— ๋‚ด์šฉ ์œ ํ˜• ํ•„๋“œ๋ฅผ ์ œ๊ณตํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์€ ๊ฒฝ์šฐ, ์„œ๋ฒ„๋Š” ์˜ฌ๋ฐ”๋ฅธ ๋‚ด์šฉ ์œ ํ˜•์„ ๊ฒฐ์ •ํ•˜๋ ค๊ณ  ์‹œ๋„ํ•˜์ง€ ์•Š์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ฐ’์€ charset ๋งค๊ฐœ ๋ณ€์ˆ˜๊ฐ€ ๋ณ€๊ฒฝ๋œ ๊ฒฝ์šฐ๋ฅผ ์ œ์™ธํ•˜๊ณ  ์ˆ˜์ •๋˜์ง€ ์•Š์€ ์ƒํƒœ๋กœ ํด๋ผ์ด์–ธํŠธ์— ์ „์†ก๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
๋‹ค๋ฅธ ๋ฐฉ์‹์œผ๋กœ ์ •์˜๋˜์ง€ ์•Š๋Š” ํ•œ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ํ…์ŠคํŠธ ๋ฏธ๋””์–ด ์œ ํ˜•์— ๋Œ€ํ•ด ๊ฐ€์ •ํ•œ ๊ธฐ๋ณธ ๋ฌธ์ž ์ง‘ํ•ฉ์€ ํ”„๋กœํ† ์ฝœ์ด HTTP์ด๊ณ  ๋‹ค๋ฅธ ๋ฐฉ์‹์œผ๋กœ US-ASCII์ธ ๊ฒฝ์šฐ ISO-8859-1์ž…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์Šคํฌ๋ฆฝํŠธ์—๋Š” ๋ฌธ์ž ์ง‘ํ•ฉ ๋งค๊ฐœ ๋ณ€์ˆ˜๊ฐ€ ํฌํ•จ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด ๋ฌธ์ œ์— ๋Œ€ํ•œ ์„ค๋ช…์€ HTTP/1.1 ๊ทœ๊ฒฉ[4]์˜ ์„น์…˜ 3.4.1์„ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค.

6.3.2 Location

Location ํ—ค๋” ํ•„๋“œ๋Š” ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์‹ค์ œ ๋ฌธ์„œ๊ฐ€ ์•„๋‹Œ ๋ฌธ์„œ์— ๋Œ€ํ•œ ์ฐธ์กฐ(reference)๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋„๋ก ์„œ๋ฒ„์— ์ง€์ •ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค(์„น์…˜ 6.2.3 ๋ฐ 6.2.4 ์ฐธ์กฐ). ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ฐธ์กฐ๋œ ๋ฌธ์„œ๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” ๊ฒƒ์„ ๋‚˜ํƒ€๋‚ด๋Š” ์ ˆ๋Œ€ URI(์„ ํƒ์ ์œผ๋กœ ์กฐ๊ฐ ์‹๋ณ„์ž๊ฐ€ ์žˆ๋Š” URI) ๋˜๋Š” ์„œ๋ฒ„๊ฐ€ ์ฐธ์กฐ๋œ ๋ฌธ์„œ๋ฅผ ๊ฐ€์ ธ์™€ ํด๋ผ์ด์–ธํŠธ์— ์‘๋‹ต์œผ๋กœ ๋ฐ˜ํ™˜ํ•˜๋Š” ๊ฒƒ์„ ๋‚˜ํƒ€๋‚ด๋Š” ๋กœ์ปฌ URI ๊ฒฝ๋กœ(์„ ํƒ์ ์œผ๋กœ ์ฟผ๋ฆฌ ๋ฌธ์ž์—ด์ด ์žˆ๋Š” URI)์ด๋‹ค.
์ ˆ๋Œ€์–ด์˜ ๊ตฌ๋ฌธURI๋Š” RFC 2396[2] ๋ฐ RFC 2732[7]์— ์ง€์ •๋œ ๋ฌธ์„œ์—์„œ ์ด ๋ฌธ์„œ์— ํ†ตํ•ฉ๋ฉ๋‹ˆ๋‹ค. ์œ ํšจํ•œ ์ ˆ๋Œ€๊ฐ’URI๋Š” ํ•ญ์ƒ ๊ตฌ์„ฑํ‘œ ์ด๋ฆ„ ๋’ค์— ":"๋กœ ์‹œ์ž‘ํ•˜๊ณ  ๊ตฌ์„ฑํ‘œ ์ด๋ฆ„์€ ์˜์ˆซ์ž "+", "-" ๋˜๋Š” ""๋กœ ๊ณ„์†๋ฉ๋‹ˆ๋‹ค. ๋กœ์ปฌ URI ๊ฒฝ๋กœ ๋ฐ ์ฟผ๋ฆฌ๋Š” ์ƒ๋Œ€ ๊ฒฝ๋กœ ๋˜๋Š” NULL์ด ์•„๋‹Œ ์ ˆ๋Œ€ ๊ฒฝ๋กœ์—ฌ์•ผ ํ•˜๋ฏ€๋กœ "/"๋กœ ์‹œ์ž‘ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
์š”์ฒญ์— ์ฒจ๋ถ€๋œ ๋ฉ”์‹œ์ง€ ๋ณธ๋ฌธ(์˜ˆ: POST ์š”์ฒญ)์€ ๋ฆฌ๋””๋ ‰์…˜ ๋Œ€์ƒ์ธ ๋ฆฌ์†Œ์Šค์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

6.3.3 Status

Status ํ—ค๋” ํ•„๋“œ์—๋Š” ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ์Šคํฌ๋ฆฝํŠธ์˜ ์„ฑ๊ณต ์ˆ˜์ค€์„ ๋‚˜ํƒ€๋‚ด๋Š” 3์ž๋ฆฌ ์ •์ˆ˜ ๊ฒฐ๊ณผ ์ฝ”๋“œ๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.
์ƒํƒœ ์ฝ”๋“œ 200 'OK'์€ ์„ฑ๊ณต์„ ๋‚˜ํƒ€๋‚ด๋ฉฐ, ๋ฌธ์„œ ์‘๋‹ต์— ๋Œ€ํ•ด ๊ฐ€์ •๋œ ๊ธฐ๋ณธ๊ฐ’์ž…๋‹ˆ๋‹ค. ์ƒํƒœ ์ฝ”๋“œ 302 'Found'๋Š” ์œ„์น˜ ํ—ค๋” ํ•„๋“œ ๋ฐ ์‘๋‹ต ๋ฉ”์‹œ์ง€ ๋ณธ๋ฌธ๊ณผ ํ•จ๊ป˜ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. CONTENT_TYPE ๋ˆ„๋ฝ๊ณผ ๊ฐ™์€ ์•Œ ์ˆ˜ ์—†๋Š” ์š”์ฒญ ํ˜•์‹์— ์ƒํƒœ ์ฝ”๋“œ 400 'Bad Request'๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ง€์›๋˜์ง€ ์•Š๋Š” REQUEST_Method๋ฅผ ์ˆ˜์‹ ํ•˜๋Š” ๊ฒฝ์šฐ ์Šคํฌ๋ฆฝํŠธ์—์„œ ์ƒํƒœ ์ฝ”๋“œ 501 'Not Implemented'๋ฅผ ๋ฐ˜ํ™˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
๋‹ค๋ฅธ ์œ ํšจํ•œ ์ƒํƒœ ์ฝ”๋“œ๋Š” HTTP ์‚ฌ์–‘ [1], [4]์˜ ์„น์…˜ 6.1.1์— ๋‚˜์—ด๋˜์–ด ์žˆ์œผ๋ฉฐ, IANA HTTP ์ƒํƒœ ์ฝ”๋“œ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ [8] ๋ฐ MAY๋ฅผ ์œ„์— ๋‚˜์—ด๋œ ์ฝ”๋“œ์™€ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋Œ€์‹  ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์Šคํฌ๋ฆฝํŠธ๋Š” HTTP/1.1 ์ƒํƒœ ์ฝ”๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์ „์— SERVER_Protocol์˜ ๊ฐ’์„ ํ™•์ธํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์ง€์›ํ•˜์ง€ ์•Š๋Š” ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•˜์—ฌ ๋งŒ๋“  ์˜ค๋ฅ˜ 405 'Method Not Allowed' HTTP/1.1 ์š”์ฒญ์„ ๊ฑฐ๋ถ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
์˜ค๋ฅ˜ ์ƒํƒœ ์ฝ”๋“œ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ๊ฒƒ์€ ์Šคํฌ๋ฆฝํŠธ ์ž์ฒด์˜ ์˜ค๋ฅ˜ ์ƒํƒœ๋ฅผ ์˜๋ฏธํ•  ํ•„์š”๋Š” ์—†์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ์„œ๋ฒ„์— ์˜ํ•ด ์˜ค๋ฅ˜ ์ฒ˜๋ฆฌ๊ธฐ๋กœ ํ˜ธ์ถœ๋˜๋Š” ์Šคํฌ๋ฆฝํŠธ๋Š” ์„œ๋ฒ„์˜ ์˜ค๋ฅ˜ ์กฐ๊ฑด์— ์ ํ•ฉํ•œ ์ฝ”๋“œ๋ฅผ ๋ฐ˜ํ™˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
reason-phrase์€ ์ธ๊ฐ„์ด ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด ํด๋ผ์ด์–ธํŠธ์— ๋ฐ˜ํ™˜๋˜๋Š” ์˜ค๋ฅ˜์— ๋Œ€ํ•œ ํ…์ŠคํŠธ ์„ค๋ช…์ž…๋‹ˆ๋‹ค.

6.3.4 Protocol-Specific Header Fields

์ด ์Šคํฌ๋ฆฝํŠธ๋Š” SERVER_PROTOCOL(HTTP/1.0 [1] ๋˜๋Š” HTTP/1.1 [4]) ์‚ฌ์–‘์—์„œ ์ •์˜๋œ ์‘๋‹ต ๋ฉ”์‹œ์ง€์™€ ๊ด€๋ จ๋œ ๋‹ค๋ฅธ ํ—ค๋” ํ•„๋“œ๋ฅผ ๋ฐ˜ํ™˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์„œ๋ฒ„๋Š” CGI ํ—ค๋” ๊ตฌ๋ฌธ์˜ ํ—ค๋” ๋ฐ์ดํ„ฐ๋ฅผ HTTP ํ—ค๋” ๊ตฌ๋ฌธ์œผ๋กœ ๋ณ€ํ™˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, CGI ์Šคํฌ๋ฆฝํŠธ์— ์‚ฌ์šฉ๋˜๋Š” ์ค„ ๋ฐ”๊ฟˆ์˜ ๋ฌธ์ž ์ˆœ์„œ(์œ ๋‹‰์Šค์˜ US-ASCII LF ๋“ฑ)๋Š” HTTP(US-ASCII CR ๋’ค์— LF)์—์„œ ์‚ฌ์šฉ๋˜๋Š” ๋ฌธ์ž ์ˆœ์„œ์™€ ๋‹ค๋ฅผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.์ด ์Šคํฌ๋ฆฝํŠธ๋Š” ํด๋ผ์ด์–ธํŠธ ์ธก ํ†ต์‹  ๋ฌธ์ œ์™€ ๊ด€๋ จ๋œ ํ—ค๋” ํ•„๋“œ๋ฅผ ๋ฐ˜ํ™˜ํ•˜์ง€ ์•Š์•„์•ผ ํ•˜๋ฉฐ ํด๋ผ์ด์–ธํŠธ์— ์‘๋‹ต์„ ๋ณด๋‚ด๋Š” ์„œ๋ฒ„์˜ ๊ธฐ๋Šฅ์— ์˜ํ–ฅ์„ ์ค„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์„œ๋ฒ„๋Š” ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋ฐ˜ํ™˜ํ•œ ํ—ค๋” ํ•„๋“œ๋ฅผ ์ œ๊ฑฐํ•  ์ˆ˜ ์žˆ๋‹ค. ์Šคํฌ๋ฆฝํŠธ์—์„œ ๋ฐ˜ํ™˜๋œ ํ—ค๋” ํ•„๋“œ์™€ ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ์ž์ฒด ์ „์†ก๋  ํ—ค๋” ํ•„๋“œ ๊ฐ„์˜ ์ถฉ๋Œ์„ ํ•ด๊ฒฐํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

6.3.5 Extension Header Fields

์ถ”๊ฐ€ ๊ตฌํ˜„ ์ •์˜ CGI ํ—ค๋” ํ•„๋“œ๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ์œผ๋ฉฐ ํ•„๋“œ ์ด๋ฆ„์€ "X-CGI-"๋กœ ์‹œ์ž‘ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์„œ๋ฒ„๋Š” ์Šคํฌ๋ฆฝํŠธ๋กœ๋ถ€ํ„ฐ ์ˆ˜์‹ ๋œ "X-CGI-"๋กœ ์‹œ์ž‘ํ•˜๋Š” ์ด๋ฆ„์„ ๊ฐ€์ง„ ์ธ์‹๋˜์ง€ ์•Š๋Š” ํ—ค๋” ํ•„๋“œ๋ฅผ ๋ฌด์‹œํ•˜๊ฑฐ๋‚˜ ์‚ญ์ œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

6.4 Response Message-Body

์‘๋‹ต ๋ฉ”์‹œ์ง€ ๋ณธ๋ฌธ์€ ์„œ๋ฒ„๊ฐ€ ํด๋ผ์ด์–ธํŠธ์— ๋ฐ˜ํ™˜ํ•  ์ฒจ๋ถ€ document์ž…๋‹ˆ๋‹ค. ์„œ๋ฒ„๋Š” ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ํŒŒ์ผ ์ข…๋ฃŒ ์กฐ๊ฑด์„ ํ†ตํ•ด ๋ฉ”์‹œ์ง€ ๋ณธ๋ฌธ์˜ ๋์„ ์•Œ๋ฆด ๋•Œ๊นŒ์ง€ ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์ œ๊ณตํ•˜๋Š” ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋ฉ”์‹œ์ง€ ๋ณธ๋ฌธ์€ HEAD ์š”์ฒญ์ด๋‚˜ ํ•„์š”ํ•œ ์ „์†ก ์ฝ”๋”ฉ, ์ฝ˜ํ…์ธ  ์ฝ”๋”ฉ ๋˜๋Š” ๋ฌธ์ž ์ง‘ํ•ฉ ๋ณ€ํ™˜์„ ์ œ์™ธํ•˜๊ณ  ์ˆ˜์ • ์—†์ด ํด๋ผ์ด์–ธํŠธ๋กœ ์ „์†ก๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

7. ์‹œ์Šคํ…œ ์‚ฌ์–‘

8. ๊ตฌํ˜„

9. ๋ณด์•ˆ ๊ณ ๋ ค์‚ฌํ•ญ

9.6 ๋ฐ์ดํ„ฐ ๊ธธ์ด ๋ฐ ๋ฒ„ํผ๋ง ๊ณ ๋ ค ์‚ฌํ•ญ

์ด ๊ทœ๊ฒฉ์€ ์Šคํฌ๋ฆฝํŠธ์— ํ‘œ์‹œ๋˜๋Š” ๋ฉ”์‹œ์ง€ ๋ณธ๋ฌธ์˜ ๊ธธ์ด์— ์ œํ•œ์„ ๋‘์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์Šคํฌ๋ฆฝํŠธ๋Š” ๋ชจ๋“  ํฌ๊ธฐ์˜ ์ •์ ์œผ๋กœ ํ• ๋‹น๋œ ๋ฒ„ํผ๊ฐ€ ํ•œ ๋ฒˆ์— ์ „์ฒด ์ œ์ถœ์„ ํฌํ•จํ•˜๊ธฐ์— ์ถฉ๋ถ„ํ•˜๋‹ค๊ณ  ๊ฐ€์ •ํ•ด์„œ๋Š” ์•ˆ ๋ฉ๋‹ˆ๋‹ค. ์‹ ์ค‘ํ•œ ์˜ค๋ฒ„ํ”Œ๋กœ ๊ฒ€์‚ฌ ์—†์ด ๊ณ ์ • ๊ธธ์ด ๋ฒ„ํผ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๊ณต๊ฒฉ์ž๊ฐ€ ์šด์˜ ์ฒด์ œ์˜ '์Šคํƒ ์Šค๋งค์‹ฑ' ๋˜๋Š” '์Šคํƒ ์˜ค๋ฒ„ํ”Œ๋กœ' ์ทจ์•ฝ์„ฑ์„ ์ด์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ์Šคํฌ๋ฆฝํŠธ๋Š” ๋””์Šคํฌ ๋˜๋Š” ๊ธฐํƒ€ ๋ฒ„ํผ๋ง ๋ฏธ๋””์–ด์— ๋Œ€๋Ÿ‰ ์ œ์ถœ์„ ์Šคํ’€ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ๋Œ€๋Ÿ‰ ์ œ์ถœ์ด ๋น ๋ฅด๊ฒŒ ์—ฐ์†๋˜๋ฉด ์„œ๋น„์Šค ๊ฑฐ๋ถ€ ์ƒํƒœ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฉ”์‹œ์ง€ ๋ณธ๋ฌธ์˜ CONTENT_LENGTH๊ฐ€ ๋ฆฌ์†Œ์Šค ๊ณ ๋ ค์‚ฌํ•ญ๋ณด๋‹ค ํด ๊ฒฝ์šฐ ์Šคํฌ๋ฆฝํŠธ๋Š” ํ”„๋กœํ† ์ฝœ ๋ฒ„์ „์— ์ ํ•ฉํ•œ ์˜ค๋ฅ˜ ์ƒํƒœ๋กœ ์‘๋‹ตํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ž ์žฌ์ ์œผ๋กœ ์ ์šฉ ๊ฐ€๋Šฅํ•œ ์ƒํƒœ ์ฝ”๋“œ์—๋Š” 503 'Service Unavailable'(HTTP/1.0 ๋ฐ HTTP/1.1), 413 'Request Entity Too Large'(HTTP/1.1) ๋ฐ 414 'Request-URI Too Large'(HTTP/1.1)๊ฐ€ ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.
์Šคํฌ๋ฆฝํŠธ์—์„œ CGI ์‘๋‹ต์„ ์ฒ˜๋ฆฌํ•˜๋Š” ์„œ๋ฒ„์—๋„ ๋น„์Šทํ•œ ๊ณ ๋ ค ์‚ฌํ•ญ์ด ์ ์šฉ๋ฉ๋‹ˆ๋‹ค. ์Šคํฌ๋ฆฝํŠธ์— ์˜ํ•ด ๋ฐ˜ํ™˜๋˜๋Š” ํ—ค๋” ๋˜๋Š” ๋ฉ”์‹œ์ง€ ๋ณธ๋ฌธ์˜ ๊ธธ์ด์— ์ œํ•œ์ด ์—†์œผ๋ฉฐ, ์„œ๋ฒ„๋Š” ๋ชจ๋“  ํฌ๊ธฐ์˜ ์ •์ ์œผ๋กœ ํ• ๋‹น๋œ ๋ฒ„ํผ๊ฐ€ ์ „์ฒด ์‘๋‹ต์„ ํฌํ•จํ•˜๊ธฐ์— ์ถฉ๋ถ„ํ•˜๋‹ค๊ณ  ๊ฐ€์ •ํ•ด์„œ๋Š” ์•ˆ ๋ฉ๋‹ˆ๋‹ค.