# if 0
๋๋ฌ๊ฐ์ ๋ ธ์ ์ผ์์ ์ด์ ์ผ ๋๋๊ณ ,,
๋๋ฌด ์ค๋๋ง์ ๋ค์ฌ๋ค๋ณธ ๋ธ๋ก๊ทธ,,
๊ฐ๋ฐ์๋ก ์ง๋ด๊ณ ์์ง๋ง,, ์ผํ๊ณ ์ถ์ง๋ ์์ ๊ทธ๋ฐ ์ถ,,
๊ฐ์์ค๋ฝ๊ฒ HTTP ํ๋กํ ์ฝ์ ๊ตฌํํด์ผํ ์ผ์ด ์๊ฒจ์,
๊ท๊ฒฉ ์ฐธ๊ณ ํ๊ณ ๊ตฌ๊ธ๋ง ํ๋ฉฐ ๊ณต๋ถํ ์ฃผ์ ๋ก ์ค๋์,, ํด๋ณผ๊น ํฉ๋๋ค,,
#endif
HTTP ๋ผ๋ ๋จ์ด๋ ๋ง์ด ๋ค์ด๋ณด์ จ์๊ฑฐ๋ผ๊ณ ์๊ฐํฉ๋๋ค
๊ทธ ์ค์์, Chunked ๋ผ๋ ๋จ์ด๋ ์กฐ๊ธ ์์ํ ์๋ ์๋๋ฐ
๊ท๊ฒฉ๋๋ก๋ง ์๊ฐํ๋ค๋ฉด ๊ทธ๋ฆฌ ์ด๋ ต์ง ์์ (๊ตฌํ์ ๊น๋ค๋ก์ธ ๊ฒ๋๋ค..)
HTTP Chunked Message๋ฅผ ์์๋ณด๋๋ก ํ ๊ฒ๋๋ค,,
- ์์ฃผ์์ฃผ ๊ฐ๋จํ HTTP Protocol ์ค๋ช
- HTTP Header์ Body๋ฅผ ์ฝ๋ ๋ฐฉ๋ฒ
- HTTP Chunked Message๋ ๋ฌด์์ธ๊ฐ
1. HTTP(HyperText Transfer Protocol) Protocol
Chunked Message(์ฒญํฌ ๋ฉ์์งใ )๋ฅผ ์์๋ณด๊ธฐ ์ ์, ๊ธฐ๋ณธ ๊ฐ๋ ์ธ HTTP๋ฅผ ๋ค๋ค๋ณด๋ ค๊ณ ํ๋ค
์ธํฐ๋ท ์ฐฝ์ ํค๊ณ , ์ด๋ค ์ฌ์ดํธ์ ๋ค์ด๊ฐ ๋ ํํ ๋ณผ ์ ์๋ ํ์์ด ์๋ค
์์) http://www.mutpp.tistory.com
์ฌ๊ธฐ์ ์ฌ์ฉํ๋ http๊ฐ ๊ทธ HTTP ๋ง์ต๋๋ค....
์ฝ์๋ฅผ ํ์ด๋ณด๋ฉด, HyperText๋ผ๋ ๊ฒ์ ์ ์กํ๋ ํ๋กํ ์ฝ์ธ๋ฐ,
Hyper Text๋
๊ทธ๋ฅ Text๋ผ๊ณ ๋ง ์ดํดํ๊ณ ๋์ด๊ฐ์,,
์ฝ๊ฒ ์๊ฐํ๋ฉด, ํ ์คํธ๋ฅผ ์ ์กํ๊ธฐ ์ํ ํ๋กํ ์ฝ์ด๋ค~ ์ด๋ง์ด๋ค
์ํค๋ฐฑ๊ณผ๋ฅผ ์ฐธ๊ณ ํ๋ฉด, (ํ๋ฒ ๋ค ์ฝ์ด๋ณด๋๊ฑธ ์ถ์ฒ)
์ํค๋ฐฑ๊ณผ: HTTP(HyperText Transfer Protocol, ๋ฌธํ์ด: ์ด๋ณธ๋ฌธ์ ์ก๊ท์ฝ, ํ์ดํผ๋ณธ๋ฌธ์ ์ก๊ท์ฝ)๋ W3 ์์์ ์ ๋ณด๋ฅผ ์ฃผ๊ณ ๋ฐ์ ์ ์๋ ํ๋กํ ์ฝ์ด๋ค. ์ฃผ๋ก HTML ๋ฌธ์๋ฅผ ์ฃผ๊ณ ๋ฐ๋ ๋ฐ์ ์ฐ์ธ๋ค. ์ฃผ๋ก TCP๋ฅผ ์ฌ์ฉํ๊ณ HTTP/3 ๋ถํฐ๋ UDP๋ฅผ ์ฌ์ฉํ๋ฉฐ, 80๋ฒ ํฌํธ๋ฅผ ์ฌ์ฉํ๋ค. 1996๋ ๋ฒ์ 1.0, ๊ทธ๋ฆฌ๊ณ 1999๋ 1.1์ด ๊ฐ๊ฐ ๋ฐํ๋์๋ค.
HTTP๋ ํด๋ผ์ด์ธํธ์ ์๋ฒ ์ฌ์ด์ ์ด๋ฃจ์ด์ง๋ ์์ฒญ/์๋ต(request/response) ํ๋กํ ์ฝ์ด๋ค. ์๋ฅผ ๋ค๋ฉด, ํด๋ผ์ด์ธํธ์ธ ์น ๋ธ๋ผ์ฐ์ ๊ฐ HTTP๋ฅผ ํตํ์ฌ ์๋ฒ๋ก๋ถํฐ ์นํ์ด์ง(HTML)๋ ๊ทธ๋ฆผ ์ ๋ณด๋ฅผ ์์ฒญํ๋ฉด, ์๋ฒ๋ ์ด ์์ฒญ์ ์๋ตํ์ฌ ํ์ํ ์ ๋ณด๋ฅผ ํด๋น ์ฌ์ฉ์์๊ฒ ์ ๋ฌํ๊ฒ ๋๋ค. ์ด ์ ๋ณด๊ฐ ๋ชจ๋ํฐ์ ๊ฐ์ ์ถ๋ ฅ ์ฅ์น๋ฅผ ํตํด ์ฌ์ฉ์์๊ฒ ๋ํ๋๋ ๊ฒ์ด๋ค.
HTTP๋ฅผ ํตํด ์ ๋ฌ๋๋ ์๋ฃ๋ http:๋ก ์์ํ๋ URL(์ธํฐ๋ท ์ฃผ์)๋ก ์กฐํํ ์ ์๋ค.
์ํค๋ฐฑ๊ณผ๋ฅผ ์กฐ๊ธ๋ง ์ ๋ฆฌํด๋ณด์๋ฉด,
- W3 (ํํ ์ฐ๋ WWW) ์์์ ์ ๋ณด๋ฅผ ์ฃผ๊ณ ๋ฐ์ ์ ์๋ ํ๋กํ ์ฝ
→ ์ธํฐ๋ท์์ ์ฐ๋ฆฌ๊ฐ ๋ณด๊ณ ์๋! ์ ๋ณด๋ฅผ ๋ณด์ฌ์ค ์ ์๊ณ
- TCP ๋๋ UDP ์ฌ์ฉ, HTTP ํฌํธ๋ 80๋ฒ ํฌํธ ์ฌ์ฉ
- HTTP ๋ฉ์์ง๋ฅผ ๋ณด๋ด๋ Server์ Client๊ฐ ์์
- http:๋ก ์์ํ๋ ์ธํฐ๋ท ์ฃผ์์์ ํ์ธํ ์ ์์
์ฌ๊ธฐ๊น์ง๋ง ์๊ณ ๋์ด๊ฐ๋ฉด ์ฒญํฌ ๋ฉ์์ง๋ ์ดํดํ ์ ์๋ค
์๋ ๊ท๊ฒฉ์ด๋ ํ๋กํ ์ฝ์ ์ ๊ทธ๋ฐ๊ฒ ์๊ตฌ๋~ ๋ผ๊ณ ๋ฐฐ๊ฒฝ์ง์๋ง ๊ฐ์ ธ๋
์ด๋ฏธ ๋ฐ์ ์ฝ์๊ฑฐ๋ ๋ค๋ฆ ์๋ค ใ
๋ ์์ธํ ๋ด์ฉ์ RFC ๊ท๊ฒฉ์ ์ฐธ๊ณ ํ๋๊ฒ ์ข๋ค (์ฒจ๋ถ๋งํฌ ์ฐธ๊ณ )
2. HTTP Header์ Body๋ฅผ ์ฝ๋ ๋ฐฉ๋ฒ
(1) ์ Header์ Body๋ฅผ ์ฌ์ฉํ ๊น?
HTTP ํค๋(header)์ ๋ฐ๋(body)๋ ๊ทธ๋ ๋ค๋ฉด ๋ฌด์์ธ๊ฐ...
๋ง ๊ทธ๋๋ก ๋จธ๋ฆฌ์ ๋ชธ์ผ๋ก ๋ถ๋ฆฌ ๋์ด ์๋ ๊ตฌ์กฐ๋ฅผ ์๋ฏธํ๋๋ฐ,
์๋ฒ์ ํด๋ผ์ด์ธํธ์ HTTP ํต์ ๋ฉ์์ง๋ฅผ ์๋ฅผ ๋ค์ด๋ณด์๋ฉด,
์ ๊ทธ๋ฆผ๊ณผ ๊ฐ์๋ฐ, ์์ธํ๋ณด๋ฉด ํด๋ผ์ด์ธํธ์ ์๋ฒ์ ๋ฉ์์ง ํ์์ด ์กฐ๊ธ ๋ค๋ฅธ ๊ฒ์ ๋ณผ ์ ์๋ค
ํ์ง๋ง! ํค๋์ ๋ฐ๋์ ๊ตฌ์ฑ์ผ๋ก ๋์ด์๋๊ฑด ๋์ผํ๋ค
๊ทผ๋ฐ ๊ทธ๋ฅ ํค๋๋ ๋ฐ๋ ๋๋ ํ์ ์์ด ํ๋ฒ์ ๋ณด๋ด๋ฉด ์๋๋..?;;;; ๋ผ๋ ์๊ฐ์ด ๋ค ์ ์๋๋ฐ
์ ๊ตฌ๋ถํ ๊น๋ฅผ TCP ์์ผ ํต์ ์ ์๋ก ๋ค์ด์ ์ค๋ช ํ์๋ฉด, ( ์ง๊ทนํ ๋์ ์๊ฐ์ด๋ค )
์ ๊ทธ๋ฆผ์ ์๋ง ์ด๋์ ํ๋ฒ์ฏค์ ๋ดค์ ๋ฒํ ๊ทธ๋ฆผ์ด๋ค
TCP ํต์ ์์ ์ค์ ์ด์์ฒด์ ๋ฅผ ํตํด ๋ฉ์์ง๋ฅผ ์ ์กํ ๋, send() ( ๋๋ write() )๋ฅผ ํตํด ๋ณด๋ด๊ณ ,
recv() ( ๋๋ read() )๋ฅผ ํตํด ๋ฉ์์ง๋ฅผ ์์ ํ๋๋ฐ,
์ด ๋ ๋ณด๋ผ/๋ฐ์ ๋ฉ์์ง์ ํฌ๊ธฐ๋ฅผ ํ๋ผ๋ฏธํฐ๋ก ๋ฃ์ด์ฃผ๊ฒ ๋์ด ์๋ค
๋ด๊ฐ ๋ณด๋ผ ๋ 8192๋งํผ ๋ณด๋ผ๋~~ ํด๋ ๋ฐ๋ ์ชฝ์์๋ 9000๋งํผ, 2000๋งํผ ์ฝ์ ์ ์๋ค
→ ์๋๋ฐฉ์ด ์ผ๋งํผ ๋ณด๋ด๊ณ ๋ฐ์์ง ๋ชจ๋ฅธ๋ค๋ ์๊ธฐ
ํฌ๊ธฐ๊ฐ ํฐ (ex. ๋์์/์นํ์ด์ง ๋ฑ๋ฑ) ๋ฉ์์ง๋ฅผ ๋ณด๋ผ ๋, ํ๋ฒ์ ๋ฐ์ ์ ์์ ์๋ ์์ํ ๊ณ
์ผ๋งํผ ์ฝ์ด์ผํ๋์ง๋ ๋ชจ๋ฅธ๋ค! ๋ผ๋ ๊ฒ์ด๋ค
๊ทธ๋์ ํค๋์ ๋ด๊ฐ ๋ณด๋ผ ๋ฉ์์ง(๋ฐ๋)์ ํฌ๊ธฐ๋ ์ด๋งํผ์ด์ผ~๋ฅผ ๋จผ์ ์๋ ค์ฃผ๊ณ (Content-Length)
๊ทธ ํ์ ๋ณด๋ผ ๋ฐ์ดํฐ๋ฅผ ๋ณด๋ด๋ ์ฉ๋๋ก ์ฌ์ฉ๋๋ค (๋จธ๋ฆฌ๋ถํฐ ๋ค์ด๋ฏผ๋ค)
(2) Request ๋ฉ์์ง
* Request ๋ฉ์์ง ํ์
{HEADER} CRLF
CRLF
{BODY}
์์์ ์ค๋ช ํ ํค๋์ Body๋ CRLF CRLF ๋ผ๋ ๊ฒ์ผ๋ก ๊ตฌ๋ถ๋์ด์๋ค
cf) CRLF ์๋ฏธ (์์ค ๋ฌธ์)
- CR: Carriage Return (\r)
- LF: Line Feed (\n)
HTTP ๋ฉ์์ง๋ฅผ ๋ณด๋ฉด ๋์ ๊ณต๋ฐฑ์ผ๋ก ๋ณด์ด๋ ๋ถ๋ถ์ด ์์ ๊ฒ์ด๋ค ๋ฐ๋ก ๊ทธ๊ฒ์ด๋ค
ํค๋๋ง ์ข๋ ์์ธํ ๋ฏ์ด๋ณด๋ฉด ์๋์ ๊ฐ๋ค
* Request ๋ฉ์์ง - Header ๊ตฌ์ฑ
/* Header ๊ตฌ์ฑ์ */
1. {METHOD ์ด๋ฆ} SP {์์ฒญํ๋ URI} SP {HTTP Version} CRLF
2. {Header 1๋ฒ์งธ} CRLF
N. {Header N๋ฒ์งธ} CRLF
CRLF
/* ~ Header ๊ตฌ์ฑ์ */
1. {BODY}
cf) SP ์๋ฏธ
SP: Space (" ") ๋์ด์ฐ๊ธฐ์ใ
cf) Request Line
1๋ฒ์งธ ์ค์ ์๋ → method + " " + ์์ฒญํ๋ URI + " " + HTTP ํ๋กํ ์ฝ ๋ฒ์
์ ๊ตฌ์ฑ์ Request Line์ด๋ผ๊ณ ํ๋ค
HTTP ๋ฉ์์ง๋ ์์๋ฅผ ๋ณด๋ฉด ์ดํด๊ฐ ์ ๋ ๊ฒ์ด๋ค
( ์ฌ์ค Method์ ์ข ๋ฅ์๋ ๋ญ๊ฐ ์๋์ง (ex. POST, GET ๋ฑ๋ฑ), VESION์ ๋ญ์ง
ํค๋์๋ ์ด๋ค ์ข ๋ฅ๊ฐ ์๊ณ , ํ์๋ก ๋ค์ด๊ฐ์ผํ๋ ํญ๋ชฉ (ex. Content-Length) ๋ฑ๋ฑ์ ๋ํด
HTTP์์๋ ์๊ธฐํ ๊ฒ ๋~~~~๋ฌด ๋ง์ผ๋ ์๋ตํ๋ค.)
(3) Response ๋ฉ์์ง
* Response ๋ฉ์์ง ํ์
1. {HTTP ๋ฒ์ } SP {Status Code} SP {Status Message} CRLF
2. {Header 1๋ฒ์งธ} CRLF
N. {Header N๋ฒ์งธ} CRLF
CRLF
1. {Body ์๊ฑฐ๋ ์๊ฑฐ๋}
cf) Status Line
Request์ ์ฒซ๋ฒ์งธ ์ค์ ์๋ Request Line์ด ์๋ฏ์ด,
Response์ ์ฒซ๋ฒ์งธ ์ค์ Status Line์ด๋ผ๊ณ ํ๋ค
Response๋ ์์๋ฅผ ๋ณด๋ฉด ์๋์ ๊ฐ๋ค
Response๋ฅผ ์๋ฒ๋ก๋ถํฐ ์์ ํ๋ฉด, Status Line์ ์๋ ์ํ ๊ฐ๊ณผ ์๋ฌ ์ฝ๋๋ฅผ ๋ณด๊ณ
์ดํ ๋ก์ง์ ๊ฒฐ์ ํ ์ ์๋ค
(200 OK ์ด๋ฉด ์ ์ฒ๋ฆฌํ๋ค๊ณ ๋ก๊ทธ๋ฅผ ๋จ๊ธด๋ค๋๊ฐ,, 401 ์๋ฌ๋ฉด Digest ์ธ์ฆ ํค๋๋ฅผ ๋ถ์ฌ์ ๋ค์ ๋ณด๋ธ๋ค๋๊ฐ)
์ธ์์ ์๋ HTTP error ์ฝ๋๋ ๊ท๊ฒฉ์ ์ ์๊ฐ ๋์ด์์ผ๋, ๊ฑฑ์ ์ํด๋ ๋๋ค
(์ฒจ๋ถํ์ผ ์ฐธ๊ณ )
3. HTTP Chunked Message
ํฌ์คํ ์ฃผ์ ์๋๋ฐ ์ด์ ์ผ ๋ฑ์ฅํ Chunked ๋ฉ์์ง..
chunk๋ผ๋ ๋จ์ด ์์ฒด์ ๋ป์ "๋ฉ์ด๋ฆฌ"๋ฅผ ๋ปํ๋ค
HTTP Body๋ก ์ค๋ ๋ฉ์์ง๋ค์ด ๋ฉ์ด๋ฆฌ๋ ํํ๋ก ์ค๋ ๊ฒ์ ์๋ฏธํ๋ค
Body์ ์๋ ๋ฉ์์ง๊ฐ ์ง์์ ์ผ๋ก ์์ผํ๋ ๊ฒฝ์ฐ๋ (ex. ์ธ์ ์ ์ ์งํด์ผ ํ ๊ฒฝ์ฐ)
๋ฉ์์ง์ ํฌ๊ธฐ๊ฐ ๋ง์ด ํด ๊ฒฝ์ฐ์ ๋ณดํต ์ฌ์ฉ๋๋ค๊ณ ํ๋ค
๋ฉ์์ง๊ฐ ํฌ๋ฉด ํด ์๋ก ํ๋ฒ์ ๋ณด๋ด๊ธฐ์ ๋ถ๋ด์ค๋ฌ์ธ ๊ฒ์ด๊ธฐ์..
๋ถํ ํ์ฌ ๋ฉ์์ง๋ฅผ ๋ณด๋ด๋ ๊ฒ์ด๋ค
๊ทธ๋ฌ๋ฉด ์ด๋ป๊ฒ! ๋๋ ์ ๋ฉ์์ง๋ฅผ ๋ณด๋ด๊ณ ๋ฐ์ ์ ์์๊น.
(1) Chunked Body ๋ฉ์์ง ํ์
์ฒญํฌ ๋ฉ์์ง๋ Header๋ ๋๊ฐ์ด ์ค๊ณ , Body๊ฐ ๋๋ ์ ธ์ ์ค๋ ๋ฉ์์ง์ธ๋ฐ
์ฐจ์ด์ ์?
- ์ผ๋ฐ Body ๋ฉ์์ง ๊ธธ์ด: Header์ ์๋ Content-Length ํค๋์ ์ ํ์์
- ์ฒญํฌ Body ๋ฉ์์ง ๊ธธ์ด: ๊ฐ ์ฒญํฌ๋ง๋ค ๊ธธ์ด๊ฐ ์ ํ์์
Boby์ ๊ธธ์ด๋ฅผ ์๋ ค์ฃผ๊ธฐ ์ํด, Content-Length๋ผ๋ ํค๋์ ๊ทธ ๊ฐ์ด ์๋๋ฐ,
์ฒญํฌ ๋ฉ์์ง๋ ๋ถํ ๋ผ์ ์ค๊ธฐ ๋๋ฌธ์ ๊ฐ ๋ฉ์ด๋ฆฌ(ใ )๋ง๋ค ๊ธธ์ด๋ฅผ ํ๊ธฐ๋ฅผ ํด์ค๋ค
์๋๋ ์์์ด๋ค
์๊ฐ๋ณด๋ค ๊ฐ๋จํ์ฅฌ?
Chunk #1๋ง ๋ณด๋ฉด
"27 <CR><LF>"๋ฅผ ์์ธํ ๋ณด์.
์์์ ํค๋์ ๋ฐ๋๋ฅผ ๋ณด์์ ๋ ๋ ๋ฒ์ CRLF๋ก ๊ตฌ๋ถ๋๋ค๋ผ๊ณ ์ค๋ช ํ์๋๋ฐ,
์ฒญํฌ ๋ฉ์์ง๋ CRLF๋ฅผ ์ฌ์ฉํ์ฌ ์ฒญํฌ ํค๋์ ์ฒญํฌ ๋ฐ๋๋ฅผ ๊ตฌ๋ถํ ์ ์๋ค!
๊ทธ๋ฆฌ๊ณ , We hole these... ์ด์ฉ๊ตฌ์ ์๋ ์ฒญํฌ ๋ฐ๋์ ๊ธ์๋ฅผ ์ธ์ด๋ณด๋ฉด 27์ด ์๋์ด์ ๋นํฉํ ํ ๋ฐ,
์ด์ ๋ hex๋ก ํ๊ธฐ ๋์ด์ ๊ทธ๋ฐ๊ฑฐ๋๊น ๋นํฉํ์ง ๋ง์
(string ํ์ hex ๋ฌธ์๋ฅผ intํ์ผ๋ก ๋ฐ๊พธ๋ ๊ฒ์ ์ฐธ๊ณ ์๋ฃ์ ๋ฌ์๋๊ฒ ์)
๋ํ, ์ฒญํฌ ๋ฐ๋ ๊ธธ์ด๋ CRLF์ ๊ธธ์ด๋ ์ ์ธํ ๊ธธ์ด๋ค..
๊ทธ๋ฆฌ๊ณ , Body ๋ถ๋ถ์ ๋ณด์ด๋
Transfer-encoding ํค๋๋ ์ด์ Chunked๋ก ๋ ๋ฉ์์ง๊ฐ ์ฌ๊ฑฐ์ผ ~~ ๋ฅผ ์๋ ค์ฃผ๋ ํค๋๋ก,
์ฒญํฌ ๋ฉ์์ง๊ฐ ์ค๊ธฐ ์ ์ ๋ณผ ์ ์๋ค
๊ทธ๋ฌ๋ฉด ๋ง์ง๋ง์ผ๋ก ์ค๋ Chunk ๋ฉ์์ง๊ฐ ์ธ์ ๊ฐ๋ ์ฌํ ๋ฐ, (์์ฌ ์๋ ์๊ณ ^^7)
๋ง์ง๋ง ๋ฉ์์ง๋ 0 ์์ ํ์ํ๊ณ ์จ๋ค.
(2) Multipart Type๊ณผ Boundary Header
์์ ์ค๋ช ํ๋ HTTP ํค๋์๋ ๋ค์ ์ฌ ๋ฐ๋ ๋ฉ์์ง์ ๊ธธ์ด๋ฅผ ๋ช ์ํ๋ ๊ฒ ๋ฟ๋ง ์๋๋ผ
๋ค์ ์ฌ ๋ฉ์์ง์ ํ์ ์ ์ด๋ค ๊ฒ์ด ์ค๋์ง์ ๋ํด์๋ ๊ฐ๊ณ ์๋ค
๋ฉ์์ง์ ํ์ ์ ๋ํ๋ด๋ ํค๋๋ → Content-Type ํค๋ ์ด๋ค
์ ์ด๋ฐ๊ฒ ํ์ํ์ง๋ ์ธ์ฝ๋ฉ๊ณผ MIME ๊ฐ๋ ์ค๋ช ์ด ํ์ํ๋ค
cf) Content-Type ํค๋๋ MIME Type์ ํฌํจ๋๋ ํค๋
* MIME(Multipurpose Internet Mail Extensions)
๋ณดํต ๋ง์ด ๋ดค์ Content-Type์ application/json ๊ฐ์ ํ์ ์ด๋ค
(์์ฃผ์์ฃผ ์ฌ๋ฌ ์ข ๋ฅ๊ฐ ์์, ์ฒจ๋ถ๋งํฌ ์ฐธ๊ณ )
์ด Content-Type์ ์ข ๋ฅ ์ค ํ๋๊ฐ multipart๋ผ๋ ๊ฒ์ธ๋ฐ,
์ด๋ค ๋ฉ์์ง๋ค์ด multi๋ก ์ฌ ๊ฒ์ด๋ ์ค๋นํด~~ ๋ผ๋ ์ญํ ์ ํ๋ค
์,,, ๊ทธ๋ฌ๋ฉด ๋ง์ฝ json ๋ฉ์์ง๋ ์ค๊ณ .. XML ๋ฉ์์ง๋ ์ค๊ณ .. ์ด๊ฑธ ์ด๋ป๊ฒ ๊ตฌ๋ถํ ๊น?
๋ผ๋ ์๊ฐ์ด ๋คํ ๋ฐ, ๊ทธ๋์ Multipart ๋ฉ์์ง๋ ๋ฉ์์ง part๋ฅผ ๊ตฌ๋ถํ ์ ์๋
"boundary"๋ผ๋ ํ๋ผ๋ฏธํฐ๋ฅผ ๊ฐ์ด ๋ฐ๋ฆฌ๊ณ ๋ค๋๋ค
Content-type: multipart/mixed; boundary="simple boundary"
์ด๋ฐ ํํ๋ก! boundary ํ๋ผ๋ฏธํฐ์ ์๋ "simple boundary"๋ก ๋ฉ์์ง๊ฐ ๊ตฌ๋ถ๋ผ ~~ ๋ผ๋ ๋ป
๋ํ, boundary๋ MIME ๊ท๊ฒฉ์ ๋ฐ๋ฅด๋ฉด, "--" ์ ํ์ดํ ๋ฌธ์์ด์ด ๊ฐ์ด ์จ๋ค
๋ง์ง๋ง boundary๋ ์ ์์ --์ด ์ถ๊ฐ๋์ด, "--simple boundary--" ๋ชจ์์ด๋ค
*MIME ๊ท๊ฒฉ 7.2.1 Multipart: The common syntax
The encapsulation boundary is defined as a line consisting entirely of two hyphen characters ("-", decimal code 45) followed by the boundary parameter value from the Content-Type header field.
๋ํ Boundary ๊ฐ์ CRLF๋ก ๊ตฌ๋ถํ๋ฉด ๋๋ค.. (CRLF ์ง์ง ์ซ๋ค)
์๋๋ ์์์ด๋ค
Content-type: multipart/{type}; boundary="simple boundary"
11
--simple boundary
43
--simple boundary
Content-type:application/json; charset=utf-8
{
"test": "hi"
}
--simple boundary
....
HTTP ํ๋กํ ์ฝ์ ๋๋ฌด ๊ด๋ฒ์ํด์ ๋ด๊ฐ ์ ๋ฆฌํ๊ณ ์ถ์ ๋ถ๋ถ๋ง ์ ๋ฆฌํ๊ธฐ๊ฐ
๋๋ฌด ํ๋ ํ๋กํ ์ฝ์ด๋ค
์ ๊ทธ๋ฅ ์ด๋ฐ ๊ฐ๋ ๋ ์๊ตฌ๋~ ์ ๋๋ง ์๊ณ ๊ฐ๋ ์ถฉ๋ถํ ๋ฏํ๋ค
์ข๋ ์์ธํ ๊ฐ๋ ์ค๋ช ์ ๋ค์์ ๋์๊ฒ ๋งก๊ธฐ๋๊ฑธ๋ก
developer.mozilla.org/ko/docs/Web/HTTP/Overview
* HTTP ์๋ฌ ์ฝ๋
developer.mozilla.org/ko/docs/Web/HTTP/Status
* HTTP Chunked ๋ฉ์์ง ์ฐธ๊ณ ์๋ฃ
flylib.com/books/en/1.2.1.149/1/
* String hex to Int
* HTTP Multipart ์ฐธ๊ณ ๊ธ
* HTTP Content-Type ์ข ๋ฅ ์ฐธ๊ณ
* MIME ๊ท๊ฒฉ
www.w3.org/Protocols/rfc1341/7_2_Multipart.html
'๐ Protocol' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
UDP๋ฅผ ์์๋ณด์ (0) | 2021.07.08 |
---|---|
SOAP์ ์์๋ณด์ (0) | 2021.06.10 |
SMTP๋ฅผ ์์๋ณด์ (0) | 2020.12.16 |